拖拽原理

一直以来都认为拖拽是一件很神奇的事情,今天终于有机会了解一下它的原理,这只是 一个简单的例子,还需要很多的优化、改进。

 

基本原理如下:

 

拖拽状态 = 0
鼠标在元素上按下的时候{
	拖拽状态 = 1
	记录下鼠标的x和y坐标
	记录下元素的x和y坐标
}
鼠标在元素上移动的时候{
	如果拖拽状态是0就什么也不做。
	如果拖拽状态是1,那么
	元素y = 现在鼠标y - 原来鼠标y + 原来元素y
	元素x = 现在鼠标x - 原来鼠标x + 原来元素x
}
鼠标在任何时候放开的时候{
	拖拽状态 = 0
}
 

代码

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Drag and Drop</title>
        <script type="text/javascript" src="lib/jquery/jquery-1.3.2.min.js">
        </script>
        <script type="text/javascript">
            $(function(){
                var state = {
                    draging: false,
                    mouseX: 0,
                    mouseY: 0,
                    objX: 0,
                    objY: 0
                };
                $("div").bind("mousedown", state, down).bind("mousemove", state, move).mouseover(over);
                $(document).bind("mouseup", state, up);
            });
            
            //处理鼠标被按下事件
            function down(event){
                event.data.draging = true;
                event.data.mouseX = parseInt(event.clientX);
                event.data.mouseY = parseInt(event.clientY);
                event.data.objX = parseInt($(this).css("top"));
                event.data.objY = parseInt($(this).css("left"));
            }
            
            //处理鼠标移动事件
            function move(event){
                state = event.data;
                if (state.draging) {
                    $(this).css("top", event.clientY - state.mouseX + state.objY)
                    $(this).css("left", event.clientX - state.mouseY + state.objX)
                }
            }
            
            //处理鼠标被在拖拽元素上
            function over(event){
                $(this).css("cursor", "move")
            }
            
            //处理鼠标被放开事件
            function up(event){
                event.data.draging = false;
            }
        </script>
        <style type="text/css">
            div {
                width: 200px;
                height: 200px;
                background-color: #999999;
                position: absolute;
                top: 0px;
                left: 0px;
            }
        </style>
    </head>
    <body>
        <div>
        </div>
    </body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值