zoukankan      html  css  js  c++  java
  • day52—JavaScript拖拽事件的应用(自定义滚动条)

    转行学开发,代码100天——2018-05-07

    前面的记录里展示了JavaScript中鼠标拖拽功能,今天利用拖拽功能实现另一个应用场景——自定义滚动条(作为控制器)的用法。

    常通过自定义滚动条控制物体大小,控制透明度等。其实现的基本原理就是拖拽事件,只不过这里是单方向的移动。

    如上图,通过拖拽图中红色方块,实现对其他变化的控制。

    这里需要注意一下几点:

    1.红色方块的变化范围(方向:水平变化,范围:0—(oParent.offsetWidth-oDiv.offsetWidth))

    2.拖动红色方块产生的一个重要变量:变化比例,scale= 1/(oParent.offsetWidth-oDiv.offsetWidth).

    通过该比例来驱动其他变化的范围。

    具体代码如下:

    <!-- 自定义控制条 -->
    <div id="parent">
        <div id="div1"></div>
    </div>
    <!-- 被驱动div盒子  -->
    <div id="div2"></div>
        <style type="text/css">
        #parent{width: 600px;height: 20px;background: #ccc;position: relative;margin: 10px auto;}
        #div1{width: 20px;height: 20px;background: red;position: absolute;left: 0;top: 0;}
        #div2{width: 0;height: 0;background: green;position: absolute;}
        </style>

    JavaScript控制条部分:

    <script type="text/javascript">
        window.onload = function(){
            var oParent = document.getElementById("parent");
            var oDiv = document.getElementById("div1");
            var oDiv2 = document.getElementById("div2");
            var disX =0;
            oDiv.onmousedown = function(ev){
                var oEvent = ev||event;
                disX = oEvent.clientX-oDiv.offsetLeft;
                if (oDiv.setCapture) {
                //鼠标移动事件
                oDiv.onmousemove = mouseMove;
                oDiv.onmouseup = mouseUp;
                oDiv.setCapture();//ie专用
                return false;
                }else{
                   //鼠标移动
                   document.onmousemove =mouseMove; 
                   document.onmouseup = mouseUp;
                    return false;
                   }
                  //鼠标按下事件
                  function mouseMove(ev){
                       var oEvent  = ev||event;
                       var l = oEvent.clientX-disX;
                       if (l<0) {
                           l=0;
                       }else if(l>oParent.offsetWidth-oDiv.offsetWidth)
                       {
                           l=oParent.offsetWidth-oDiv.offsetWidt+"px";
                       }
                       oDiv.style.left = l+"px";
                   var scale = l/(oParent.offsetWidth-oDiv.offsetWidth);
                       document.title =scale;
                       oDiv2.style.width=400*scale+"px";
                       oDiv2.style.height=400*scale+"px";
                   };
                //鼠标抬起事件
                function mouseUp()
                {
                    this.onmousemove = null;
                    this.onmouseup = null;
                    if (this.setCapture) 
                    {
                        this.releaseCapture();//ie专用
                    }
                };
              };
            }
        </script>

    此外还可以通过该实例修改后,将其变化比例用于驱动透明度等变化,甚至设计为竖直方向的工具条。

     

        #div3{width: 200px;height: 200px;background: yellow;position: absolute;filter: alpha(opacity:30);opacity: 0.3;}

     javascript中控制鼠标移动事件作如下修改:

      var scale = l/(oParent.offsetWidth-oDiv.offsetWidth);
       document.title =scale;
       // oDiv2.style.width=400*scale+"px";
       // oDiv2.style.height=400*scale+"px";
       var alpha = 100*scale;
       oDiv3.style.filter ='alpha(opacity:'+alpha+')';
       oDiv3.style.opacity = alpha/100;

  • 相关阅读:
    2-SAT 问题及图论解法
    割点、强连通分量
    欧拉路、欧拉回路
    DFS 树
    【题解】[AGC 034 F] RNG and XOR【异或卷积 FWT】
    【题解】[UOJ 62] UR #5 怎样跑得更快【莫比乌斯反演】
    【题解】LOJ #2085 / 洛谷 P1587「NOI2016」循环之美【莫比乌斯反演】
    【题解】LOJ #6052 「雅礼集训 2017 Day11」DIV【莫比乌斯反演】
    【题解】[HDU 5382] GCD?LCM【莫比乌斯反演 差分 线性筛】
    【题解】[51Nod 1847] 奇怪的数学题【min_25筛 杜教筛 莫比乌斯反演】
  • 原文地址:https://www.cnblogs.com/allencxw/p/9011363.html
Copyright © 2011-2022 走看看