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 相关文章推荐
javascript中的location用法简单介绍
Mar 07 Javascript
js实现window.open不被拦截的解决方法汇总
Oct 30 Javascript
jquery.ajax之beforeSend方法使用介绍
Dec 08 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
Jul 17 Javascript
js实现简单秒表走动的时钟特效
Mar 25 Javascript
js的各种排序算法实现(总结)
Jul 23 Javascript
js实现旋转木马效果
Mar 17 Javascript
深入理解 webpack 文件打包机制(小结)
Jan 08 Javascript
vue实现点击当前标签高亮效果【推荐】
Jun 22 Javascript
vue完成项目后,打包成静态文件的方法
Sep 03 Javascript
浅谈react性能优化的方法
Sep 05 Javascript
微信小程序实现日期格式化和倒计时
Nov 01 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+html5基于websocket实现聊天室的方法
2015/07/17 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
JObj预览一个JS的框架
2008/03/13 Javascript
js每次Title显示不同的名言
2008/09/25 Javascript
学习JS面向对象成果 借国庆发布个最新作品与大家交流
2009/10/03 Javascript
Javascript Object.extend
2010/05/18 Javascript
jQuery 隐藏和显示 input 默认值示例
2014/06/03 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
全系IE支持Bootstrap的解决方法
2015/10/19 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
解决拦截器对ajax请求的拦截实例详解
2016/12/21 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
JavaScript实现简单的计算器
2020/01/16 Javascript
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
Django中的静态文件管理过程解析
2019/08/01 Python
浅析Python 多行匹配模式
2020/07/24 Python
Python 如何定义匿名或内联函数
2020/08/01 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
儿科护理实习自我鉴定
2013/09/19 职场文书
饮料业务员岗位职责
2013/12/15 职场文书
初中政治教学反思
2014/01/17 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
教室布置标语
2014/06/26 职场文书
毕业论文致谢部分怎么写
2015/05/14 职场文书