拖拽案例

html+css如下:

<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
</head>
<style type="text/css">
    #box{
        width: 150px;
        height:150px;
        background:red;
        position: absolute;
        cursor: move;
    }

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

源生js

<script type="text/javascript">
    box.onmousedown=function(event){
var e =event||window.event;
//获取event对象
var X =e.clientX-box.offsetLeft;
//计算点击鼠标到盒子水平距离(鼠标x轴-盒子的左边界)
var Y =e.clientY-box.offsetTop;
//计算点击鼠标到盒子垂直距离(鼠标y轴-盒子的上边界)
document.onmousemove=function(e){
   var e=e||event;
   //获取event对象
 var mx=e.clientX-X;
 //计算移动的距离(根据鼠标到盒子距离不变【移动后的水平-鼠标到盒子水平距离】)
 var my=e.clientY-Y;
//计算移动的距离(根据鼠标到盒子距离不变【移动后的垂直-鼠标到盒子垂直距离】)
var wx=document.documentElement.clientWidth-box.offsetWidth;
//计算水平最大移动距离(浏览器可见宽-盒子的宽)
var wy=document.documentElement.clientHeight-box.offsetHeight;
//计算垂直最大移动距离(浏览器可见高-盒子的高)
if(mx<0)mx=0;
//左边不超出宽
if(my<0)my=0;
//左边不超出高
if(mx>wx)mx=wx;
//右边不超出宽
if(my>wy)my=wy;
//右边不超出高


 box.style.left=mx+"px";
 //移动后的左边界
 box.style.top=my+"px";
//移动后的上边界
}
 }
 box.onmouseup=function(){
   document.onmousemove=null;
   //移动的函数为空,停止函数。
  }

jQuery封装

<script type="text/javascript">
 
       $("#box").mousedown(function(event){
        var e =event||window.event;
         var X =e.clientX-$("#box").offset().left;
         var Y =e.clientY-$("#box").offset().top;
          
          $(document).mousemove(function(event){
          var e =event||window.event;
             var mx=e.clientX-X;
              var my=e.clientY-Y;
             var wx=$(document).width()-$("#box").width();
          var wy=$(document).height()-$("#box").height();

          if(mx<0)mx=0;
          if(my<0)my=0;
          if(mx>wx)mx=wx;
          if(my>wy)my=wy;
           $("#box").css({"left":mx+'px',"top":my+'px'})
        
          })
        })
    
   $("#box").mouseup(function(){
    $(document).off("mousemove")        
    //这里用到新知识点 .off()                                                                                                                                
   })

</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值