日期:2014-05-16  浏览次数:20426 次

请教拖动div的问题

html:
 <div data-role='page' id='mainPage'> 
<div class="ui-grid-b" style="cursor:pointer" ><div class="ui-block-a" id="A"><div id="AA" class="ui-bar ui-bar-d" style="height:60px" class="content">
<div style="float:left;width:90px;" id="me" ><a href='#' data-role='button' style="width:70px;" >Link button</a></div>
</div></div><div class="ui-block-b" id="B"><div id="BB" class="ui-bar ui-bar-d" style="height:60px"></div></div><div class="ui-block-c"><div id="CC" class="ui-bar ui-bar-d" style="height:60px"></div></div></div> 
</div>

js函数:
$(function(){ 

$("#me").mousedown(function(e){
var p = $("#me");
var offset = p.offset();
_move=true; 
_x=e.pageX-offset.left; 
_y=e.pageY-offset.top; 
}); 
$("#me").mousemove(function(e){
var x,y;
if(_move){
x=e.pageX-_x;//移动时根据鼠标位置计算控件左上角的绝对位置 
y=e.pageY-_y; 
//$("#me").css("position","absolute");
$("#me").css({top:y,left:x});
}
}).mouseup(function(){ 
_move=false;
}); 
})
通过上边的js函数拖动id="me"的div,结果连最外层的div(即id=mainPage)一起拖动了,如何做到只拖动 id="me"的div呢?
(上述div是jquery提供的layout控件,目标是实现移动layout内部的指定id的div)

------解决方案--------------------
加一句 e.stopPropagation试试... 事件冒泡引起了外层div也跟着触发事件
------解决方案--------------------
如果只是这段代码的话,应该不会拖动外层的div,要拖动目标必须将目标绝对定位。
这段代码还有其它一些问题,比如拖动时鼠标释放了,但事件没有释放,即时没有按住鼠标,也会导致拖动目标跟随鼠标移动。可以参考一下网上成熟的拖动源码。
以下是测试代码,必须与jquery.js放在同一个目录使用。
HTML code
 <!doctype html>
 
 <div data-role='page' id='mainPage' style="border:1px solid green;">  
<div class="ui-grid-b" style="cursor:pointer" ><div class="ui-block-a" id="A"><div id="AA" class="ui-bar ui-bar-d" style="height:60px" class="content">
<div style="float:left;width:90px;border:1px solid red;" id="me" ><a data-role='button' style="width:70px;" >Link button</a></div>
</div></div><div class="ui-block-b" id="B"><div id="BB" class="ui-bar ui-bar-d" style="height:60px"></div></div><div class="ui-block-c"><div id="CC" class="ui-bar ui-bar-d" style="height:60px"></div></div></div>  
</div>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(function(){
    var _move,_x,_y;
    
    $("#me").css("position","absolute");
    
    $("#me").mousedown(function(e){
        var p = $("#me");
        var offset = p.offset();
        _move=true;  
        _x=e.pageX-offset.left;  
        _y=e.pageY-offset.top;  
    });
      
    $("#me").mousemove(function(e){
        var x,y;
        if(_move){
        x=e.pageX-_x;//移动时根据鼠标位置计算控件左上角的绝对位置  
        y=e.pageY-_y;  
        //$("#me").css("position","absolute");
        $("#me").css({top:y,left:x});
        }
    }).mouseup(function(){  
        _move=false; 
    });
});
</script>