基于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 扩展对input的一些操作方法
Oct 30 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
May 05 Javascript
jQuery1.6 类型判断实现代码
Sep 01 Javascript
简约JS日历控件 实例代码
Jul 12 Javascript
Jquery easyUI 更新行示例
Mar 06 Javascript
Javascript玩转继承(一)
May 08 Javascript
js使用循环清空某个div中的input标签值
Sep 29 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
May 27 Javascript
详谈js对url进行编码和解码(三种方式的区别)
Aug 16 Javascript
基于vue cli重构多页面脚手架过程详解
Jan 23 Javascript
微信小程序wx.request拦截器使用详解
Jul 09 Javascript
layui的数据表格+springmvc实现搜索功能的例子
Sep 28 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循环输出数据库内容的代码
2008/05/24 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
JavaScipt基本教程之前言
2008/01/16 Javascript
按钮JS复制文本框和表格的代码
2011/04/01 Javascript
初识Node.js
2015/03/20 Javascript
浅谈几种常用的JS类定义方法
2016/06/08 Javascript
jQuery获取table行数并输出单元格内容的实现方法
2016/06/30 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
python实现下载指定网址所有图片的方法
2015/08/08 Python
Python 字典与字符串的互转实例
2017/01/13 Python
python:socket传输大文件示例
2017/01/18 Python
Python开发的实用计算器完整实例
2017/05/10 Python
python实现神经网络感知器算法
2017/12/20 Python
Python基础教程之内置函数locals()和globals()用法分析
2018/03/16 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
如何用Python进行时间序列分解和预测
2021/03/01 Python
文秘专业应届生求职信范文
2013/11/14 职场文书
建筑行业的大学生自我评价
2013/12/08 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
《在家里》教后反思
2014/03/01 职场文书
项目建议书
2015/02/04 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL
详解SQL的窗口函数
2022/04/21 Oracle