拖拽效果的实现

首先分解一下拖拽的步骤:
    1)在目标元素上按下鼠标(这里没有细分左右键),也就是mousedown事件
    2)按下鼠标的同事,拖动鼠标,相当于在mousedown事件中绑定mousemove事件
    3)停止拖拽,释放鼠标按键,也就是mouseup事件
    代码表示如下:
    targetNode.οnmοusedοwn=function(){
        ...
        document.οnmοusemοve=function(){
            ....
        }
        document.οnmοuseup=function(){
            ....
        }
    }
    这里的mousemove和mouseup事件都绑定在document上而不是目标元素上

    是因为拖拽的时候鼠标随时可能离开目标元素,这样将导致mouseover和mouseup

    找不到目标而影响拖拽的效果,具体代码如下(ps:下面的代码在火狐下是有bug的,这是因为拖拽元素的innerHTML是空的,解决办法可以加空的<span></span>标签或让其里面有内容即可,有兴趣可  以试一下)


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
*{ margin:0; padding:0;}
#dragDiv{ width:200px; height:200px; position:absolute; top:100px; left:100px; background:#ddd;}
</style>
</head>

<body>
<div id="dragDiv"></div>
<script type="text/javascript">
var dragDiv=document.getElementById('dragDiv');
//鼠标按下动作
dragDiv.οnmοusedοwn=function(event){
    var e=event||window.event,
        t=e.target||e.srcElement,
        //鼠标按下时的坐标x1,y1
        x1=e.clientX,
        y1=e.clientY,
        //鼠标按下时的左右偏移量
        dragLeft=this.offsetLeft,
        dragTop=this.offsetTop;
    document.οnmοusemοve=function(event){
        var e=event||window.event,
            t=e.target||e.srcElement,
            //鼠标移动时的动态坐标
            x2=e.clientX,
            y2=e.clientY,
            //鼠标移动时的坐标的变化量
            x=x2-x1,
            y=y2-y1;
        dragDiv.style.left=(dragLeft+x)+'px';
        dragDiv.style.top=(dragTop+y)+'px';
    }
    document.οnmοuseup=function(){
        this.οnmοusemοve=null;    
    }
}
</script>
</body>
</html>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值