Javascript实现简单的拖拽

拖拽的页面效果在于用户可以自由拖动盒子的位置。拖拽越来越多的被应用:

1.window桌面可以自由拖拽图标的位置。

2.浏览器选项卡自已自由拖动

3.网页中登录框

下面简单介绍一下拖拽的原理。一个div盒子在页面中的拖动为例

鼠标按下时,鼠标和div的相对位置已经确定,此时确定鼠标距离div的距离

鼠标按下点距离div左距离RL=鼠标按下坐标ml-div距离文档的左距离bl

鼠标按下点距离div上距离RT=鼠标按下坐标mt-div距离文档的上距离bt

鼠标移动时,鼠标按下点和div的相对位置不变,根据鼠标按下位置和div的相对位置不变,计算div的最新位置。

div.style.left=鼠标坐标X-鼠标按下点距离div左距离RL;

div.style.top=鼠标坐标Y-鼠标按下点距离div上距离RT;

鼠标释放时,取消鼠标移动事件。

下面先对div盒子布局

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

<title>div拖拽</title>

<style>

#box{width:100px;height:100px;background:red;position: absolute;left:100px;top:100px;}

</style>

<script>

window.onload=function(){

var oBox=document.getElementById("box");

var RL=0;

var RT=0;

oBox.onmousedown=function(ev){

      var ev=event||ev;

      RL=ev.clientX-oBox.offsetLeft;

      RT=ev.clientY-oBox.offsetTop;

      oBox.onmousemove=function(ev){

          var ev=event||ev;

          this.style.left=ev.clientX-RL+"px";

          this.style.top=ev.clientY-RT+"px";

          console.log(this.style.left);

      }

}

oBox.onmouseup=function(){

      oBox.onmousemove=null;

}

}

</script>

</head>

<body>

<div id="box"></div>

</body>

</html>

注意:当鼠标拖动div盒子太快时,鼠标会移出div,鼠标此时就不能拖动div盒子了,如何解决这个bug?

改变绑定事件的对象,将oBox改成document,这样无论鼠标怎么拖动,都不会移出文档,代码改成如下:

window.onload=function(){

var oBox=document.getElementById("box");

var RL=0;

var RT=0;

oBox.onmousedown=function(ev){

      var ev=event||ev;

      RL=ev.clientX-oBox.offsetLeft;

      RT=ev.clientY-oBox.offsetTop;

      document.onmousemove=function(ev){

              var ev=event||ev;

              oBox.style.left=ev.clientX-RL+"px";

              oBox.style.top=ev.clientY-RT+"px";

      }

}

oBox.onmouseup=function(){

      document.onmousemove=null;

}

}

上面是没有限制范围的拖动,如果我们想在窗口中移动呢?只要做好范围的限制即可。

window.onload=function(){

var oBox=document.getElementById("box");

var RL=0;

var RT=0;

oBox.onmousedown=function(ev){

     var ev=event||ev;

     RL=ev.clientX-oBox.offsetLeft;

     RT=ev.clientY-oBox.offsetTop;

     document.onmousemove=function(ev){

          var ev=event||ev;

           var L=ev.clientX-RL;

          var T=ev.clientY-RT;

          if(L<0){

                L=0;

          }else if(L>document.documentElement.clientWidth-oBox.offsetWidth){

                L=document.documentElement.clientWidth-oBox.offsetWidth;

          }

          if(T<0){

                T=0;

          }else if(T>document.documentElement.clientHeight-oBox.offsetHeight){

                T=document.documentElement.clientHeight-oBox.offsetHeight;

          }                            

          oBox.style.left=L+"px";

          oBox.style.top=T+"px";

     }

}

oBox.onmouseup=function(){

        document.onmousemove=null;

}

}

如果发现文章中有表述不准确或者有相关问题需要交流,可以在下面留言。

 (完)

本文转载自:迹忆客(https://www.jiyik.com)

以上是 Javascript实现简单的拖拽 的全部内容, 来源链接: utcz.com/z/290148.html

回到顶部