为了账号安全,请及时绑定邮箱和手机立即绑定

在 vanilla js 上拖放鼠标移动脚本

在 vanilla js 上拖放鼠标移动脚本

www说 2023-12-14 15:08:50
我正在编写一个拖放脚本,用于拖放带有“.draggable”类的块。问题是该块会定期粘在光标上并且不会脱落。如何编辑此脚本,以便可以用鼠标拖动所有具有“.draggable”类的块而不会出现此问题?let elements = document.querySelectorAll('.draggable');elements.forEach(function(el) {  let mover = false,    x, y, posx, posy, first = true;  el.onmousedown = function() {    mover = true;  };  el.onmouseup = function() {    mover = false;    first = true;  };  el.parentNode.onmousemove = function(e) {    el.style.cursor = "move";    if (mover) {      if (first) {        x = e.offsetX;        y = e.offsetY;        first = false;      }      posx = e.pageX - x;      posy = e.pageY - y;      el.style.left = posx + 'px';      el.style.top = posy + 'px';    }  }});.draggable {  position: absolute;  z-index: 1;  top: 100px;}<section class="dragscroll">  <div class="draggable">    <textarea></textarea>   </div></section><section class="dragscroll">  <div class="draggable">    <textarea></textarea>  </div></section>
查看完整描述

1 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

很难说这有效,因为它很难产生错误,所以请让我知道这有效。我所做的只是


document.addEventListener("mouseup", function() {

    mover = false;

    first = true;

  });

let elements = document.querySelectorAll('.draggable');


elements.forEach(function(el) {

  let mover = false,

    x, y, posx, posy, first = true;

  el.onmousedown = function() {

    mover = true;

  };

  document.addEventListener("mouseup", function() {

    mover = false;

    first = true;

  });

/*

  document.onmouseup = function() {

    mover = false;

    first = true;

  };

*/

  el.parentNode.onmousemove = function(e) {

    el.style.cursor = "move";

    if (mover) {

      if (first) {

        x = e.offsetX;

        y = e.offsetY;

        first = false;

      }


      posx = e.pageX - x;

      posy = e.pageY - y;

      el.style.left = posx + 'px';

      el.style.top = posy + 'px';

    }

  }

});

.draggable {

  position: absolute;

  z-index: 1;

  top: 100px;

}

<section class="dragscroll">

  <div class="draggable">

    <textarea></textarea>

   </div>

</section>


<section class="dragscroll">

  <div class="draggable">

    <textarea></textarea>

  </div>

</section>


查看完整回答
反对 回复 2023-12-14
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信