使用js拖拽功能实现滑动条实例教程

拖拽属于前端常见的功能,很多效果都会用到js的拖拽功能。滑动条的核心功能也就是使用js拖拽滑块来修改位置。一个完整的滑动条包括 滑动条、滑动痕迹、滑块、文本 等元素,先把html代码写出来,如下所示:

  <div class="bar_wrap" id="wrap"><!--外包裹元素-->
    <div class="bar_container"><!--滑动条-->
      <div class="bar_into"></div><!--滑动痕迹-->
    </div>
    <div class="bar_drag"><!--滑块-->
      <div class="bar_text"></div><!--文本-->
    </div>
  </div>

然后使用css样式,完成下图效果:
在这里插入图片描述
样式可以自己编写,也可以从 《使用js拖拽功能实现滑动条实例教程》源码中复制。

接下来通过分析功能,一步一步完成js代码。

  1. 获取滑动条各个元素,代码如下:
  //获取外包裹元素
  var eBarWrap = document.getElementById('wrap');
  //获取滑动条
  var eBarCon = eBarWrap.getElementsByClassName('bar_container')[0];
  //获取滑动痕迹元素
  var eBarInto = eBarWrap.getElementsByClassName('bar_into')[0];
  //获取滑块
  var eBarDrag = eBarWrap.getElementsByClassName('bar_drag')[0];
  //获取文本元素
  var eBarText = eBarWrap.getElementsByClassName('bar_text')[0];
  1. 获取滑动最大值

因为滑块只能在滑动条内滑动,所以需要限制最大滑动位置。而DOM元素计算位置是从元素的左侧开始,所以最大值应该是 滑动条的宽度-滑块 的宽度,如下所示:

  //获取最大位置
  var nMax = eBarCon.offsetWidth - eBarDrag.offsetWidth;
  1. 在滑块上绑定鼠标按下事件函数,实现拖拽滑块功能,代码如下:
  //滑块添加拖拽事件
  eBarDrag.addEventListener('mousedown',function(event){
    
  });

3.1 获取滑块位置

需要拖动滑块,肯定要先知道滑块原来的位置,才能根据鼠标的移动来拖拽滑块。在滑块上绑定的事件函数上有传入一个event对象,这个event对象代表当前事件的实例对象,包含当前事件相关信息。如下所示:

    //初始化鼠标开始拖拽的点击位置
    var nInitX = event.clientX;
    //初始化滑块位置
    var nInitLeft = this.offsetLeft;

3.2 滑块跟随鼠标移动,修改滑动痕迹和文本数值

操作时,在滑块上按下鼠标,再移动鼠标就可以使滑块跟随鼠标移动。但一般移动鼠标不可能只在滑动条上面移动,所以需要在页面上绑定鼠标移动事件,如下所示:

	//页面绑定鼠标移动事件
    document.onmousemove = event=>{
      //鼠标移动时取消默认行为,避免选中其他元素或文字
      event.preventDefault();
      //获取鼠标移动后滑块应该移动到的位置
      let nX = event.clientX - nInitX + nInitLeft;
      //限制滑块最大移动位置
      if(nX>=nMax){
        nX = nMax;
      }
      //限制滑块最小移动位置
      if(nX<=0){
        nX = 0;
      }
      //修改滑块位置(因为用的是箭头函数,所以this还是指向滑块)
      this.style.left = nX + 'px';
      //修改滑动痕迹宽度
      eBarInto.style.width = nX + this.offsetWidth/2 + 'px';
      //修改文本数值
      eBarText.innerHTML = Math.ceil(nX/nMax*100)/10;
    };

基本上每一行代码我都写有注释,有不明白之处读者还可以尝试把数据输出到控制台。

3.3 释放鼠标时,固定滑块位置

当释放鼠标的时候,滑块固定在当前移动到的位置,滑动痕迹和文本数值一起修改。

	//鼠标松开绑定事件,取消页面上所有事件
    document.onmouseup = function(event){
      document.onmousemove = null;
      document.onmouseup = null;
    }

鼠标按下事件函数就完成了。不过滑动条的样式都可以通过css实现,但默认文本数值是空的,这不太合理,所以需要加多一句代码,给文本元素赋值,如下所示:

  //修改默认数值
  eBarText.innerHTML = 0;
  1. 在滑动条上添加点击事件

当点击滑动条上除滑块之外的位置时,滑块应该直接滑动到鼠标点击的位置。需要在滑动条上添加点击事件实现此功能,代码如下:

  //滑动条添加点击事件
  eBarCon.addEventListener('click',function(event){
    //设置滑动条位置
    var nLeft = this.offsetLeft;
    //获取有定位的父元素
    var eParent = this.offsetParent;
    //循环所有有定位的父元素
    while(eParent){
      //添加定位父元素offsetLeft值,用于准确定位滑动条与页面左侧的距离 
      nLeft += eParent.offsetLeft;
      //再次获取父元素外的定位父元素
      eParent = eParent.offsetParent;
    }
    //计算滑块位置
    var nX = event.clientX - nLeft;
    //修改滑块位置
    eBarDrag.style.left = nX +'px';
    //修改滑动痕迹宽度
    eBarInto.style.width = nX + eBarDrag.offsetWidth/2 + 'px';
    //修改文本数值
    eBarText.innerHTML = Math.ceil(nX/nMax*100)/10
  });
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
滑动验证码是一种常见的网页验证码形式,它通过让用户在一个滑块上进行滑动操作来验证身份。auto js可以用于模拟用户在滑动验证码上的操作,实现自动化处理。 使用auto js处理滑动验证码的思路大致如下:首先,后端会将验证码图片进行切割,并将切割后的图片传递给前端。前端展示这些切割后的图片,并提供滑动操作的界面。用户通过滑块来完成滑动操作,然后前端将滑动操作的坐标信息传回给后端。 后端接收到前端传回的滑动坐标信息后,会与自己切割的图片进行比较,判断滑动的位置是否与预期一致。如果一致,则验证通过,否则验证失败。 通过auto js,可以编写脚本来模拟用户的滑动操作,使其自动完成滑动验证码验证的过程。这样可以提高效率,减少人工处理的工作量。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [JS实现滑动解锁及滑动验证码的原理技巧](https://blog.csdn.net/biaoyan01/article/details/109604924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [js实现滑动拼图验证码](https://blog.csdn.net/asd53564967/article/details/125887309)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值