JavaScript案例——实现鼠标拖拽回放

鼠标拖动box,点击“点击回放拖动轨迹”可以自动沿着你鼠标拖动的轨迹滑动

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <script src="fengz.js"></script>
    <style>
      html,
      body {
        overflow: hidden;
      }

      body,
      div,
      h2,
      p {
        margin: 0;
        padding: 0;
      }

      body {
        color: #fff;
        background: #000;
        font: 12px/2 Arial;
      }

      p {
        padding: 0 10px;
        margin-top: 10px;
      }

      span {
        color: #ff0;
        padding-left: 5px;
      }

      #box {
        position: absolute;
        width: 300px;
        height: 150px;
        background: #333;
        border: 2px solid #ccc;
      }

      #box h2 {
        height: 25px;
        line-height: 25px;
        cursor: move;
        /*手型:移动*/
        background: #222;
        border-bottom: 2px solid #ccc;
        text-align: right;
        padding: 0 10px;
      }

      #box h2 a {
        color: #fff;
        font: 12px/25px Arial;
        text-decoration: none;
        outline: none;
      }
    </style>
  </head>
  <body>
    <div id="box">
      <h2><a id="btn" href="#">点击回放拖动轨迹</a></h2>
      <p><strong>Drag:</strong><span>false</span></p>
      <p><strong>offsetLeft:</strong><span>0</span></p>
      <p><strong>offsetTop:</strong><span>0</span></p>
    </div>
    <script>
      //获取相关元素
      var h2 = getEle("h2")[0];
      var btn = getEle("#btn");
      var spanDrag = getEle("span")[0];
      var spanLeft = getEle("span")[1];
      var spanTop = getEle("span")[2];

      var box = getEle("#box");
      var arr = [];
      spanDrag.innerHTML = "false";
      //拖拽:按下 移动 擡起 事件
      h2.onmousedown = function(evt) {
        //点鼠标按下的时候获取光标的box中的位置
        var ox = evt.offsetX;
        var oy = evt.offsetY;
        spanDrag.innerHTML = "true";
        //记录的点(box的left和top),用对象记录
        var obj = {};
        obj.x = box.offsetLeft;
        obj.y = box.offsetTop;
        arr.unshift(obj);
        //移动的过程中 记录 box 偏移量
        document.onmousemove = function(e) {
          var obj = {};
          obj.x = e.clientX - ox;
          obj.y = e.clientY - oy;
          arr.unshift(obj);
          box.style.left = e.clientX - ox + "px";
          box.style.top = e.clientY - oy + "px";
          spanLeft.innerHTML = e.clientX - ox;
          spanTop.innerHTML = e.clientY - oy;
        };
      };
      document.onmouseup = function() {
        document.onmousemove = null;
        spanDrag.innerHTML = "false";
      };
      //点击回放时,把存在数组中的座标点拿出来重新给box 的left 和top
      btn.onclick = function() {
        //点击时间;里面有定时器的时候,一定要先清除定时器
        clearInterval(btn.timer);
        //使用定时器不断去数组中取座标给box添加
        var i = 0;
        btn.timer = setInterval(function() {
          box.style.left = arr[i].x + "px";
          box.style.top = arr[i].y + "px";
          spanLeft.innerHTML = arr[i].x;
          spanTop.innerHTML = arr[i].y;
          i++;
          if (i >= arr.length) {
            clearInterval(btn.timer);
            arr = [];
          }
        }, 20);
      };
    </script>
  </body>
</html>

案例效果图(由于没有屏录软件,就截个效果图)
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章