使用原生JavaScript实现拖动校验功能

  介绍

本篇文章给大家分享的是有关使用原生JavaScript实现拖动校验功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

<强>思路

1页面布局采用定位,背景颜色变化bg的宽度为0,其宽度会随着滑块的移动而移动。

& lt; !——验证——比;   & lt; div类=癰ox"祝辞   & lt; !——滑块——比;   & lt; div类=癰tn"祝辞& lt;/div>   & lt; !——文字——比;   类& lt; p=皌ext"祝辞请滑动滑块& lt;/p>   & lt; !——背景——比;   & lt; div类=癰g"祝辞& lt;/div>   & lt;/div>

/*滑块使用定位,背景没有设置宽度*/.box {
  宽度:250 px;
  高度:50 px;
  background - color: # ccc;
  位置:相对;
  保证金:0汽车;
  }
  .btn {
  box-sizing: border-box;
  宽度:50 px;
  高度:50 px;
  边界:1 px固体# ccc;
  颜色:# ccc;
  background - color: # fff;
  位置:绝对的;
  左:0;
  上图:0;
  光标:指针;
  z - index: 4;
  }
  。text {
  位置:绝对的;
  高度:50 px;
  左:50%;
  变换:translateX (-50%);
  z - index: 2;
  用户选择:没有;
  }
  .bg {
  宽度:0;
  高度:50 px;
  background - color: # 25 c20f;
  z - index: 3;
  位置:绝对的;
  上图:0;
  左:0;
  }

2,分析事件——鼠标按下,鼠标移动,鼠标松开

2.1鼠标按下,获取此时事件的水平距离downX;鼠标移动,获取此时事件的水平距离e。clientX;那么鼠标移动的距离moveX=e。clientX downX,也就是滑块跟着移动的距离,即同时bg的宽度也就是滑块移动的距离,即

2.2滑块拉到头了,表示验证成功
什么时候表示滑块滑到头了,也就是moveX等于框的宽度——滑块的宽度。那么文字的改变成“验证成功”。且滑块停留在了最有端。无论鼠标点击还是移动,都不会在影响了。那就是清除事件,清除按钮的鼠标移动和鼠标按下事件此时验证成功,设立一个标记为表示验证成功国旗=true,后续需要用到。

2.3那么如果我们滑块拉到一半就松开了鼠标时,滑块应该回到原始位置。但是如果已经验证成功了,那就不会回到原点。
鼠标松开事件触发,那么鼠标移动已经不能影响滑块了,那么此时需要清除移动事件没有验证成功那就回到原点

函数选择器(名字){
  返回document.querySelector(名称);
  }
  var盒=选择器(& # 39;.box& # 39;),
  btn=选择器(& # 39;.btn& # 39;),
  文本=选择器(& # 39;。text # 39;),
  bg=选择器(& # 39;.bg& # 39;),
  国旗=false;//鼠标按下,移动,松开//按下的距离和移动的距离差就是滑块移动的距离
  btn。onmousedown=function (e){//按钮按下的
  var downX=e.clientX
  btn。onmousemove=function (e) {//e事件的状态
  var moveX=e。clientX - downX;
  如果(moveX比;0) {
  this.style。左=moveX + & # 39; px # 39;;
  bg.style。宽度=moveX + & # 39; px # 39;//滑块拉到头了,表示验证成功
  如果(moveX祝辞=盒子。offsetWidth - this.offsetWidth) {
  bg.style。zIndex=1;//设置bg的z - index的值是为了处理党滑块经过原始值的时候,bg将文字覆盖了。验证成功后,有让文字显示出来
  文本。innerText=& # 39;实现验证成功& # 39;;
  text.style。颜色=& # 39;# fff& # 39;;
  国旗=true;//此时鼠标移动或者按下,滑块不在跟着移动了
  btn。onmousemove=零;//btn。onmousedown=零;//清除事件
  }
  }
  }
  }
  btn。onmouseup=function () {
  btn。onmousemove=零;//如果验证成功了,那就不会回到原点
  如果(国旗){
  返回;
  }
  this.style。左=0;
  bg.style。宽度=0;
  }

<>强完整可以运行的源码

& lt; !DOCTYPE html>   & lt; html lang=癳n"祝辞   & lt; head>   & lt;元charset=癠TF-8"祝辞   & lt; title> Title   & lt; style>/*滑块使用定位,背景没有设置宽度*/.box {   宽度:250 px;   高度:50 px;   background - color: # ccc;   位置:相对;   保证金:0汽车;   }   .btn {   box-sizing: border-box;   宽度:50 px;   高度:50 px;   边界:1 px固体# ccc;   颜色:# ccc;   background - color: # fff;   位置:绝对的;   左:0;   上图:0;   光标:指针;   z - index: 4;   }   。text {   位置:绝对的;   高度:50 px;   左:50%;   变换:translateX (-50%);   z - index: 2;   用户选择:没有;   }   .bg {   宽度:0;   高度:50 px;   background - color: # 25 c20f;   z - index: 3;   位置:绝对的;   上图:0;   左:0;   }   & lt;/style>   & lt;/head>   & lt; body>      & lt; !——验证——比;   & lt; div类=癰ox"祝辞   & lt; !——滑块——比;   & lt; div类=癰tn"祝辞& lt;/div>   & lt; !——文字——比;   类& lt; p=皌ext"祝辞请滑动滑块& lt;/p>   & lt; !——背景——比;   & lt; div类=癰g"祝辞& lt;/div>   & lt;/div>      & lt; script>   函数选择器(名字){   返回document.querySelector(名称);   }   var盒=选择器(& # 39;.box& # 39;),   btn=选择器(& # 39;.btn& # 39;),   文本=选择器(& # 39;。text # 39;),   bg=选择器(& # 39;.bg& # 39;),   国旗=false;//鼠标按下,移动,松开//按下的距离和移动的距离差就是滑块移动的距离   btn。onmousedown=function (e){//按钮按下的   var downX=e.clientX   btn。onmousemove=function (e) {//e事件的状态   var moveX=e。clientX - downX;   如果(moveX比;0) {   this.style。左=moveX + & # 39; px # 39;;   bg.style。宽度=moveX + & # 39; px # 39;//滑块拉到头了,表示验证成功   如果(moveX祝辞=盒子。offsetWidth - this.offsetWidth) {   bg.style。zIndex=1;//设置bg的z - index的值是为了处理党滑块经过原始值的时候,bg将文字覆盖了。验证成功后,有让文字显示出来   文本。innerText=& # 39;实现验证成功& # 39;;   text.style。颜色=& # 39;# fff& # 39;;   国旗=true;//此时鼠标移动或者按下,滑块不在跟着移动了   btn。onmousemove=零;//btn。onmousedown=零;//清除事件   }   }   }   }   btn。onmouseup=function () {   btn。onmousemove=零;//如果验证成功了,那就不会回到原点   如果(国旗){   返回;   }   this.style。左=0;   bg.style。宽度=0;   }   & lt;/script>   & lt;/body>   & lt;/html>

使用原生JavaScript实现拖动校验功能