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 相关文章推荐
用JQUERY增删元素的代码
Feb 14 Javascript
Javascript核心读书有感之语言核心
Feb 01 Javascript
javascript对浅拷贝和深拷贝的详解
Oct 14 Javascript
js replace 全局替换的操作方法
Jun 12 Javascript
JS实现获取进今年第几天是周几的方法分析
Jun 27 Javascript
vue超时计算的组件实例代码
Jul 09 Javascript
微信小程序开发的基本流程步骤
Jan 31 Javascript
说说Vue.js中的functional函数化组件的使用
Feb 12 Javascript
Vue Prop属性功能与用法实例详解
Feb 23 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
Sep 02 Javascript
vue+element实现图片上传及裁剪功能
Jun 29 Javascript
如何利用javascript接收json信息并进行处理
Aug 06 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的伪静态模式
2015/12/31 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
PHP实现 APP端微信支付功能
2018/06/22 PHP
动态刷新 dorado树的js代码
2009/06/12 Javascript
一句话JavaScript表单验证代码
2009/08/02 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
JQuery手速测试小游戏实现思路详解
2016/09/20 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
2016/10/27 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
[03:37]2016完美“圣”典 风云人物:Mikasa专访
2016/12/07 DOTA
Python标准库os.path包、glob包使用实例
2014/11/25 Python
python做量化投资系列之比特币初始配置
2018/01/23 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
Flask框架路由和视图用法实例分析
2019/11/07 Python
文秘专业自荐信
2013/10/14 职场文书
致接力运动员广播稿
2014/02/17 职场文书
个人创业事迹材料
2014/12/30 职场文书
少儿励志名言(80句)
2019/08/14 职场文书
Pytorch DataLoader shuffle验证方式
2021/06/02 Python
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技