js编写拖拽效果

5 篇文章 0 订阅

一、js编写拖拽效果

代码如下(示例):

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Drag the playback</title>
  <style>
    *{
      margin: 0;padding:0;
    }
    #box{
      width: 400px;
      height: 400px;
      background: rgba(131,175,155,1);
      box-shadow: 0 0 10px #333;
      position: absolute;
    }
    #drag-bar{
      height: 30px;
      background: rgba(200,200,169,1);
      text-align: right;
    }
    #btn{
      width: 20%;
      height: 100%;
      background: rgba(249,205,173,1);
    }
  </style>
</head>
<body>
  <div id = "box">
    <div id="drag-bar"><button id="btn">回放</button></div>
  </div>

  <script>
    /* 1、首先获取各个dom元素并定义需要用到的变量;
      2、相应dom监听按下鼠标键的事件:如果点击的地方不对则return, 同时监听鼠标移动的事件
      3、使盒子随着鼠标而改变位置,并记录该位置
      4、监听鼠标键起的事件,删除之前的监听移动事件
      5、相应dom监听click事件,获取之前的位置数组的长度并减减,当===0时删除定时器,让盒子的位置倒回至原本的位置*/
      /* clientX、clientY
      点击位置距离当前body可视区域的x,y坐标
        pageX、pageY
      对于整个页面来说,包括了被卷去的body部分的长度
        screenX、screenY
      点击位置距离当前电脑屏幕的x,y坐标
        offsetX、offsetY
      相对于带有定位的父盒子的x,y坐标*/
    var box = document.getElementById("box");
    var dragBar = document.getElementById("drag-bar");
    var btn = document.getElementById("btn");
    var offsetX = 0,offsetY = 0,positionArray = [];
    dragBar.addEventListener("mousedown",handlerMouseDown);
    function handlerMouseDown(e) {
      var e = e || window.event;
      if(e.target.nodeName === "BUTTON") {
        return false;
      }
      offsetX = e.offsetX;
      offsetY = e.offsetY;
      document.addEventListener("mousemove",handlerMouseMove);
    }
    function handlerMouseMove(e) {
      var e = e || window.event;
      /* 不减去offsetX的话,在点击盒子的时候盒子的位置会发生偏移*/
      var _left = e.clientX - offsetX;
      var _top = e.clientY - offsetY;
      box.style.left = _left + "px";
      box.style.top = _top + "px";
      positionArray.push({left:_left,top:_top});
    }
    document.addEventListener("mouseup",handlerMouseUp);
    function handlerMouseUp(e) {
      document.removeEventListener("mousemove",handlerMouseMove);
    }
    btn.addEventListener("click",handlerClick);
    function handlerClick(e) {
      var index = positionArray.length;
      var timer = setInterval(function() {
        if(index === 0) {
          positionArray.length = 0;/* 不加此行的话在已经执行了回放功能后再次点击回放,依旧会执行之前的回放(第二次拖动后执行的回放会把第一次的轨迹再执行一次) */
          return clearInterval(timer);
        }
        index--;
        //console.log(index);
        box.style.left = positionArray[index].left + "px";
        box.style.top = positionArray[index].top + "px";
      },50)
    }
  </script>
</body>
</html>

总结

每天无所事事的话觉得自己太废,但是又老是不能坚持学习……啧啧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao_cheng_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值