js 鼠标拖动(js鼠标拖动窗口的做法)
前言
随着互联网技术的不断进步,网站的用户交互性要求也越来越高。其中,用鼠标拖动进度条是一种常见的用户交互方式。在实现这种交互方式时,还可以组合缩略图来丰富用户体验。本文将使用JavaScript实现拖动鼠标进度条同时显示多个缩略图的效果。
实施思路
1.准备HTML和CSS
首先,我们需要准备一个HTML文件和一个CSS文件。HTML文件包含一个拖动条和多个缩略图,CSS文件用于设置样式。下面是HTML和CSS代码的示例:
HTML代码:
``html``
CSS代码:
```css#progress{width:500px;高度:3px;背景颜色:#ccc;相对位置:margin:50px自动;}
#slider{width:20px;高度:20px;背景颜色:#333;绝对位置:顶部:-9px;左:0;光标:指针;边框半径:50%;}
#thumbnails{width:500px;margin:20px自动;显示:柔性;justify-content:中心;}
#thumbnailsimg{width:40px;高度:40px;margin:010px;光标:指针;border:2px实线#fff;}
#thumbnailsimg.active{border-color:#333;}```
2.使用JavaScript实现鼠标拖动进度条
在HTML文件中,我们准备了用于拖动的进度条和滑块。不过用鼠标拖动进度条的功能还没有实现。接下来我们将使用JavaScript来实现这个功能。
首先,我们需要获取进度条和滑块的DOM元素。具体代码如下:
```javascriptvarProgress=document.getElementById('progress');varslider=document.getElementById('slider');```
然后,我们需要定义一些变量来保存滑块的当前位置,以及进度条的总长度和滑块的可移动范围。具体代码如下:
```javascriptvarsliderLeft=0;//滑块的初始位置varprogressWidth=progress.clientWidth;//进度条总长度varsliderWidth=slider.clientWidth;//滑块的宽度varsliderRange=progressWidth-sliderWidth;//滑块的可移动范围```
接下来,我们需要向滑块添加mousedown和mousemove事件。当鼠标按下时,记录当前鼠标位置。当鼠标移动时,通过计算鼠标的移动距离,计算出滑块应该移动的距离,然后更新滑块的位置。具体代码如下:
```javascriptslider.addEventListener('mousedown',function(e){varstartX=e.clientX;//记录鼠标初始位置varstartLeft=slider.offsetLeft;//记录滑块初始位置functionmouseMoveHandler(e){varmoveX=e.clientX-startX;//计算鼠标移动距离varleft=startLeft+moveX;//计算滑块应移动的距离if(leftsliderRange){left=sliderRange;}slider.style.left=left+'px';//更新滑块的位置}document.addEventListener('mousemove',mouseMoveHandler);document.addEventListener('mouseup',function(){document.removeEventListener('mousemove',mouseMoveHandler);}});});```
3.使用JavaScript显示多个缩略图
最后,我们需要使用JavaScript来实现显示多个缩略图的功能。
首先,我们需要获取所有缩略图元素并向它们添加点击事件。单击缩略图时,滑块应移动的距离是通过计算其在整个缩略图列表中的索引值来计算的。然后,更新滑块的位置并将活动类名称添加到相应的缩略图中以方便样式设置。同时,删除其他缩略图的活动类名。具体代码如下:
```javascriptvarthumbnails=document.querySelectorAll('#thumbnailsimg');for(vari=0;ithumbnails.length;i++){thumbnails[i].addEventListener('click',function(){varindex=Array.prototype.indexOf.call(thumbnails,this);varleft=sliderRange/(thumbnails.length-1)*index;slider.style.left=left+'px';for(varj=0;j个缩略图。长度;j++){缩略图[j].classList.remove('active');}this.classList.add('active');});}```
完整代码
下面是完整的JavaScript代码:
```javascriptvarprogress=document.getElementById('progress');varslider=document.getElementById('slider');varthumbnails=document.querySelectorAll('#thumbnailsimg');
varsliderLeft=0;varprogressWidth=progress.clientWidth;varsliderWidth=slider.clientWidth;varsliderRange=progressWidth-sliderWidth;
slider.addEventListener('mousedown',function(e){varstartX=e.clientX;varstartLeft=slider.offsetLeft;functionmouseMoveHandler(e){varmoveX=e.clientX-startX;varleft=startLeft+moveX;if(leftsliderRange){left=sliderRange;}slider.style.left=left+'px';updateActiveThumbnail(left);}document.addEventListener('mousemove',mouseMoveHandler);document.addEventListener('mouseup',function(){document.removeEventListener('mousemove',mouseMoveHandler);});});
for(vari=0;ithumbnails.length;i++){thumbnails[i].addEventListener('click',function(){varindex=Array.prototype.indexOf.call(thumbnails,this);varleft=sliderRange/(thumbnails.length-1)*index;slider.style.left=left+'px';updateActiveThumbnail(left);});}
函数updateActiveThumbnail(left){for(vari=0;ithumbnails.length;i++){varthumbnailLeft=getThumbnailLeft(i);}if(thumbnailLeft-20左左thumbnailLeft+20){thumbnails[i].classList.add('active');}else{缩略图[i].classList.remove('active');}}}
函数getThumbnailLeft(index){varwidth=缩略图[index].clientWidth;无功保证金=10;varleft=索引*(宽度+边距);向左返回;}```
总结
通过使用JavaScript实现鼠标拖动进度条并同时显示多个缩略图,可以极大地提高用户体验。在实现过程中,我们需要准备HTML和CSS,并用JavaScript编写具体的实现代码。计算滑块应移动的距离时需要特别注意。另外,还需要考虑如何设置缩略图的活动类名才能达到想要的效果。希望这篇文章对初学者有所帮助。