基于JavaScript实现拖动滑块效果


Posted in Javascript onFebruary 16, 2017

本文实例为大家分享了js拖动滑块效果的具体代码,供大家参考,具体内容如下

效果:

基于JavaScript实现拖动滑块效果

代码:

<!DOCTYPE html>
<html lang="zh-cn">

 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  <title>鼠标拖动小方块</title>
  <style type="text/css">
   .lineDiv {
    position: relative;
    height: 5px;
    background: red;
    width: 300px;
    margin: 50px auto;
   }

   .lineDiv .minDiv {
    position: absolute;
    top: -5px;
    left: 0;
    width: 15px;
    height: 15px;
    background: green;
    cursor: pointer
   }

   .lineDiv .minDiv .vals {
    position: absolute;
    font-size: 20px;
    top: -45px;
    left: -10px;
    width: 35px;
    height: 35px;
    line-height: 35px;
    text-align: center;
    background: blue;
   }

   .lineDiv .minDiv .vals:after {
    content: "";
    width: 0px;
    height: 0px;
    border-top: 6px solid blue;
    border-left: 6px solid transparent;
    border-right: 6px solid transparent;
    border-bottom: 6px solid transparent;
    display: block;
    margin-left: 11px;
   }
  </style>
 </head>

 <body>
  <center>
   <h3>用鼠标拖动小方块<span id="msg">0</span>%</h3>
  </center>
  <div id="lineDiv" class="lineDiv">
   <div id="minDiv" class="minDiv">
    <div id="vals" class="vals">0</div>
   </div>
  </div>
  <script>
   window.onload = function() {

    var lineDiv = document.getElementById('lineDiv'); //长线条
    var minDiv = document.getElementById('minDiv'); //小方块
    var msg = document.getElementById("msg");
    var vals = document.getElementById("vals");
    var ifBool = false; //判断鼠标是否按下

    //鼠标按下方块
    minDiv.addEventListener("touchstart", function(e) {
     e.stopPropagation();
     ifBool = true;
     console.log("鼠标按下")
    });

    //拖动
    window.addEventListener("touchmove", function(e) {
     console.log("鼠标拖动")
     if(ifBool) {
      var x = e.touches[0].pageX || e.touches[0].clientX; //鼠标横坐标var x
      var lineDiv_left = getPosition(lineDiv).left; //长线条的横坐标
      var minDiv_left = x - lineDiv_left; //小方块相对于父元素(长线条)的left值 
      if(minDiv_left >= lineDiv.offsetWidth - 15) {
       minDiv_left = lineDiv.offsetWidth - 15;
      }
      if(minDiv_left < 0) {
       minDiv_left = 0;
      }
      //设置拖动后小方块的left值
      minDiv.style.left = minDiv_left + "px";
      msg.innerText = parseInt((minDiv_left / (lineDiv.offsetWidth - 15)) * 100);
      vals.innerText = parseInt((minDiv_left / (lineDiv.offsetWidth - 15)) * 100);
     }
    });
    //鼠标松开
    window.addEventListener("touchend", function(e) {
     console.log("鼠标弹起")
     ifBool = false;
    });
    //获取元素的绝对位置
    function getPosition(node) {
     var left = node.offsetLeft; //获取元素相对于其父元素的left值var left
     var top = node.offsetTop;
     current = node.offsetParent; // 取得元素的offsetParent
       // 一直循环直到根元素
     
     while(current != null) {

      left += current.offsetLeft;

      top += current.offsetTop;

      current = current.offsetParent;

     }
     return {
      "left": left,
      "top": top
     };
    }
   }
  </script>
 </body>

</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
Jan 10 Javascript
jQuery实现自定义事件的方法
Apr 17 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
Jun 05 Javascript
使用Promise解决多层异步调用的简单学习心得
May 17 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
Sep 05 Javascript
预防网页挂马的方法总结
Nov 03 Javascript
bootstrap weebox 支持ajax的模态弹出框
Feb 23 Javascript
vue2.0全局组件之pdf详解
Jun 26 Javascript
node.js学习之断言assert的使用示例
Sep 28 Javascript
Vue中的slot使用插槽分发内容的方法
Mar 01 Javascript
Vue Echarts实现可视化世界地图代码实例
May 07 Javascript
聊聊Vue中provide/inject的应用详解
Nov 10 Javascript
js实现移动端微信页面禁止字体放大
Feb 16 #Javascript
100多个基础常用JS函数和语法集合大全
Feb 16 #Javascript
js实现tab切换效果
Feb 16 #Javascript
jquery实现自适应banner焦点图
Feb 16 #Javascript
js 作用域和变量详解
Feb 16 #Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
Feb 16 #Javascript
js面向对象编程总结
Feb 16 #Javascript
You might like
163的邮件用phpmailer发送(实例详解)
2013/06/24 PHP
PHP PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
前端必学之PHP语法基础
2016/01/01 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
PHP getName()函数讲解
2019/02/03 PHP
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
python ddt实现数据驱动
2018/03/14 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
浅谈sklearn中predict与predict_proba区别
2020/06/28 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
安装不同版本的tensorflow与models方法实现
2021/02/20 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
房地产销售计划书
2014/01/10 职场文书
预备党员党课思想汇报
2014/01/13 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
拾金不昧表扬信
2015/01/16 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
2015年高三毕业班班主任工作总结
2015/10/22 职场文书
python使用torch随机初始化参数
2022/03/22 Python
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers