基于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实现类似滑动门切换效果的层切换
Sep 23 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
Oct 17 Javascript
javascript中数组的定义及使用实例
Jan 21 Javascript
Bootstrap学习笔记之css组件(3)
Jun 07 Javascript
javascript实现滚动效果的数字时钟实例
Jul 21 Javascript
js图片轮播手动切换特效
Jan 12 Javascript
详解如何更好的使用module vuex
Mar 27 Javascript
使用apifm-wxapi模块中的问题及解决方法
Aug 05 Javascript
VUE写一个简单的表格实例
Aug 06 Javascript
JS精确判断数据类型代码实例
Dec 18 Javascript
微信小程序中data-key属性之数据传输(经验总结)
Aug 22 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
Nov 16 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
js下函数般调用正则的方法附代码
2008/06/22 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
浅谈javascript 函数表达式和函数声明的区别
2016/01/05 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
2017/09/25 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
JavaScript使用Math.random()生成简单的验证码
2019/01/21 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
python利用7z批量解压rar的实现
2019/08/07 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
古驰英国官网:GUCCI英国
2020/03/07 全球购物
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
优秀教师先进事迹
2014/01/22 职场文书
财务总监管理岗位职责
2014/03/08 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
浅谈MySQL之select优化方案
2021/08/07 MySQL
python 中的jieba分词库
2021/11/23 Python
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL