近日项目中要做一个鼠标拖拽层的效果,于是手动使用jquery做了一个,发出来跟大伙儿分享一下,并希望能得到高手的指点,如果哪位大侠觉得我的思路和代码不正确或者需要改进的话,希望能指点一二,在下感激不尽。
我的思路是这样的:
1、在鼠标按下的时候,捕获鼠标的当前位置;
2、得到要移动对象的当前位置信息;
3、鼠标移动时,计算鼠标移动的距离,将这个距离更新到对象的位置,在我的代码中,我试用绝对定位来表示对象的位置;
4、当鼠标移出对象或者鼠标弹起的时候,则认为对象处于不能移动的状态。这个在我的代码中使用一个bool类型的变量ismousedown表示,当这个变量为true的时候,则说明对象处于可移动状态,如果为false的时候,表示对象处于不可移动状态。鼠标移出对象或者弹出的时候,就将ismousedown置为false。
好了,思路就是这样,下面将代码贴出来,如果我的思路中表达的不清楚的话,可以在代码中看出来:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.min.js"></script>
<script type="text/javascript"> <br>//注册一个Jquery的鼠标拖动函数,参数为要拖动的对象 <br>$.fn.extend({ SliderObject: function (objMoved) { <br>var isMouseDown = false; //鼠标是否按下 <br>var mouseDownPosiX; <br>var mouseDownPosiY; <br>var InitPositionX; <br>var InitPositionY; <br>var obj = $(objMoved) == undefined ? $(this) : $(objMoved); <br>obj.mousedown(function (e) { <br>//当鼠标按下时捕获鼠标位置以及对象的当前位置 <br>mouseDownPosiX = e.pageX; <br>mouseDownPosiY = e.pageY; <br>isMouseDown = true; <br><br>InitPositionX = obj.css("left").replace("px", ""); <br>InitPositionY = obj.css("top").replace("px", ""); <br><br>}).mousemove(function (e) { <br>//当鼠标按下并且移动时,首先判断鼠标是否在当前焦点,以及鼠标是否已经弹起, <br>if ($(this).is(":focus") && isMouseDown) { <br>var tempX = parseInt(e.pageX) - parseInt(mouseDownPosiX) + parseInt(InitPositionX); <br>var tempY = parseInt(e.pageY) - parseInt(mouseDownPosiY) + parseInt(InitPositionY); <br>obj.css("left", tempX + "px").css("top", tempY + "px"); <br>} <br>//当鼠标弹起或者离开元素时,将鼠标弹起置为false,不移动对象 <br>}).mouseup(function () { <br>isMouseDown = false; <br>}).mouseleave(function () { <br>isMouseDown = false; <br>}); <br>} <br>}); <br>$(document).ready(function () { <br>$("#Slider").SliderObject($("#Main")); <br>}) <br></script>










