js实现兼容PC端和移动端滑块拖动选择数字效果


Posted in Javascript onFebruary 16, 2017

本文为大家分享了js实现移动端滑块拖动选择数字的效果,可以通过鼠标拖拽滑动效果来选择数字,供大家参考,具体内容如下

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

 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  <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; //判断鼠标是否按下
    //事件
    var start = function(e) {
     e.stopPropagation();
     ifBool = true;
     console.log("鼠标按下")
    }
    var move = function(e) {
     console.log("鼠标拖动")
     if(ifBool) {
      if(!e.touches) { //兼容移动端
       var x = e.clientX;
      } else {  //兼容PC端
       var x = e.touches[0].pageX;
      }
      //var x = e.touches[0].pageX || e.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);
     }
    }
    var end = function(e) {
      console.log("鼠标弹起")
      ifBool = false;
     }
     //鼠标按下方块
    minDiv.addEventListener("touchstart", start);
    minDiv.addEventListener("mousedown", start);
    //拖动
    window.addEventListener("touchmove", move);
    window.addEventListener("mousemove", move);
    //鼠标松开
    window.addEventListener("touchend", end);
    window.addEventListener("mouseup", end);
    //获取元素的绝对位置
    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 相关文章推荐
繁简字转换功能
Jul 19 Javascript
Ajax同步与异步传输的示例代码
Nov 21 Javascript
JavaScript中诡异的delete操作符
Mar 12 Javascript
jquery合并表格中相同文本的相邻单元格
Jul 17 Javascript
AngularJS 面试题集锦
Sep 06 Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 Javascript
Angular.js跨controller实现参数传递的两种方法
Feb 20 Javascript
Vue中img的src属性绑定与static文件夹实例
May 18 Javascript
对vue事件的延迟执行实例讲解
Aug 28 Javascript
vue-cli 首屏加载优化问题
Nov 06 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
Sep 16 Javascript
JavaScript实现世界各地时间显示
Sep 07 Javascript
js时间戳格式化成日期格式的多种方法介绍
Feb 16 #Javascript
基于JavaScript实现拖动滑块效果
Feb 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
You might like
PHP实现多图片上传类实例
2014/07/26 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
2017/03/14 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
2018/04/27 PHP
Laravel框架自定义分页样式操作示例
2020/01/26 PHP
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
js利用prototype调用Array的slice方法示例
2014/06/09 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
详解webpack打包后如何调试的方法步骤
2018/11/07 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
2019/10/26 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
python基础教程之对象和类的实际运用
2014/08/29 Python
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
2014/11/05 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
Python如何执行精确的浮点数运算
2020/07/31 Python
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
教师个人的自我评价分享
2014/01/02 职场文书
大学生简短的自我评价分享
2014/02/20 职场文书
教师业务培训方案
2014/05/01 职场文书
趣味运动会策划方案
2014/06/02 职场文书
明星员工获奖感言
2014/08/14 职场文书
ktv好的活动方案
2014/08/15 职场文书
4s店活动策划方案
2014/08/25 职场文书
2014年预算员工作总结
2014/12/05 职场文书
2015年幼师工作总结
2015/04/28 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
2015年酒店销售部工作总结
2015/07/24 职场文书
房屋转让协议书(标准范本)
2016/03/21 职场文书
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS
SQLServer常见数学函数梳理总结
2022/08/05 MySQL