基于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 相关文章推荐
JavaScript全排列的六种算法 具体实现
Jun 29 Javascript
JS操作CSS随机改变网页背景实现思路
Mar 10 Javascript
JavaScript随机生成信用卡卡号的方法
Apr 07 Javascript
jQuery 3 中的新增功能汇总介绍
Jun 12 Javascript
原生JS简单实现ajax的方法示例
Nov 29 Javascript
微信小程序表单验证错误提示效果
May 19 Javascript
详解angularJs中关于ng-class的三种使用方式说明
Jun 02 Javascript
简单实现jQuery手风琴效果
Aug 18 jQuery
监听angularJs列表数据是否渲染完毕的方法示例
Nov 07 Javascript
vue组件之间通信方式实例总结【8种方式】
Feb 22 Javascript
微信小程序 确认框的实现(附代码)
Jul 23 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
Oct 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
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
php读取html并截取字符串的简单代码
2009/11/30 PHP
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
php实现对文件压缩简单的方法
2019/09/29 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
js事件(Event)知识整理
2012/10/11 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
Python datetime时间格式化去掉前导0
2014/07/31 Python
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
python创建和删除目录的方法
2015/04/29 Python
Python出现segfault错误解决方法
2016/04/16 Python
Python可变参数用法实例分析
2017/04/02 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
numpy matrix和array的乘和加实例
2018/06/28 Python
详解关于Django中ORM数据库迁移的配置
2018/10/08 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
python 瀑布线指标编写实例
2020/06/03 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
行政专员岗位职责
2014/01/02 职场文书
秋季运动会通讯稿
2014/01/24 职场文书
银行优秀员工事迹
2014/02/06 职场文书
护士见习期自我鉴定
2014/02/08 职场文书
教育技术职业规划范文
2014/03/04 职场文书
服务口号大全
2014/06/11 职场文书
德劲DE1105机评
2022/04/05 无线电
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript