• JavaScript 拖拽制作拖拽条


    引言:在上一篇拖拽(原来这样可以实现鼠标拖拽 中我们已经了解了拖拽的制作原理,这次在上面的基础上,用拖拽模仿音量控制条效果。制作成功后效果图:

    直接上代码:

     1 <style>
     2     body{
     3         margin: 0;
     4         padding: 0;
     5     }
     6     #wrap{
     7          300px;
     8         height: 6px;
     9         background: rgba(66,66,66,0.71);
    10         margin: 100px auto;
    11         position: relative;
    12         cursor: pointer;
    13     }
    14     #drag{
    15          8px;
    16         height: 25px;
    17         background: #47acab;
    18         position: absolute;
    19         margin-top:-10px ;
    20         border-radius: 1px;
    21         cursor: pointer;
    22     }
    23     #show{
    24          100px;
    25         height: 50px;
    26         margin: 100px auto;
    27         background: rgba(5,249,245,0.71);
    28         text-align: center;
    29         line-height: 50px;
    30     }
    31 </style>
    32 
    33 <body>
    34     <div id="wrap" style=" 300px">
    35         <div id="drag"></div>
    36     </div>
    37     <div id="show">show</div>
    38 
    39     <script>
    40         var drag=document.getElementById("drag");
    41         var show=document.getElementById("show");
    42         var wrap=document.getElementById("wrap");
    43 
    44         drag.onmousedown=function (event) {
    45             var event=event||window.event;
    46             var sl=event.clientX-drag.offsetLeft; // 获取鼠标焦点距离warp的距离
    47             var st=event.clientY-drag.offsetHeight;
    48 
    49 
    50         document.onmousemove=function (event) {
    51             var event=event||window.event;
    52 
    53             var left=event.clientX-sl; // 鼠标焦点-减去鼠标焦点距离warp的距离等于拖拽块移动距离。
    54             var top=event.clientY-st;
    55 
    56             drag.style.left=left+'px';
    57             drag.style.top=top+'px';
    58             drag.style.cursor='pointer';
    59 
    60             if (event.clientX-sl<=0){  // 判断,防止拖拽脱离wrap区域,
    61                 drag.style.left=0+'px';
    62             }
    63             if (event.clientY-st<=0){
    64                 drag.style.top=0+'px';
    65             }
    66             if (event.clientX-sl>=300){
    67                 drag.style.left=300+'px';
    68             }
    69             if (event.clientY-st>=0){
    70                 drag.style.top=0+'px';
    71             }
    72             show.innerHTML="音量:" + Math.floor( drag.style.left.slice(0,drag.style.left.length-2)/3);
              // 计算显示的数字,slice去除后面的'px'字符串,wrap 宽300px,为了显示100,所以除以3 73 } 74 75 document.onmouseup=function () { // 解除事件 76 document.onmousemove=null; 77 document.onmouseup=null; 78 } 79 } 80 81 wrap.onmousedown=function (event) { // 点击wrap获取鼠标焦点位置,然后用这个位置减去wrap条的left,再赋值给拖拽让其显示在点击位置 82 var event=event||window.event; 83 84 drag.style.left=event.clientX-wrap.offsetLeft+'px'; 85 show.innerHTML="音量:" + Math.floor( drag.style.left.slice(0,drag.style.left.length-2)/3); 86 87 } 88 </script>

    注意,这里与上一篇拖拽demo 实现的不同的是,在这我用了 offsetLeft ,而不是getBoundingClientRect()  ,原因是这里的拖拽块有父级 wrap 包裹。而:如果有父级元素,且父级元素定位的话,offset

    获取的距离就是边框到父级元素的距离,如果父元素不是定位元素,那么子元素的offset值相对于 可视区窗口。而 getBoundingClientRect() 的值只相对于可视去窗口。所以要用offset的方式获取其left位置、

    您可以点击这里查看demo哦

  • 相关阅读:
    VS2008中 没有QT的代码智能提示
    QT的一个奇怪问题,设置了Qt::Tool后,点击弹出对话框的确定取消按钮,程序直接退出。
    QT线程初次使用。遇到的问题。
    QMenu,QT的菜单添加
    VS2008 不能创建C++的项目,解决方法
    VS2008工具,两种加入库的方法。 设置程序运行时目录
    得到弹出菜单QMenu的高度
    QT 修改QTableWidget表头
    QT两个字符串转化函数,避免文字乱码。
    改变QlistWidget的行高
  • 原文地址:https://www.cnblogs.com/wxhhts/p/9718504.html
Copyright © 2020-2023  润新知