Jquery写一个鼠标拖动效果实现原理与代码
近日项目中要做一个鼠标拖拽层的效果,于是手动使用jquery做了一个,发出来跟大伙儿分享一下,并希望能得到高手的指点,如果哪位大侠觉得我的思路和代码不正确或者需要改进的话,希望能指点一二,在下感激不尽。
我的思路是这样的:
1、在鼠标按下的时候,捕获鼠标的当前位置;
2、得到要移动对象的当前位置信息;
3、鼠标移动时,计算鼠标移动的距离,将这个距离更新到对象的位置,在我的代码中,我试用绝对定位来表示对象的位置;
4、当鼠标移出对象或者鼠标弹起的时候,则认为对象处于不能移动的状态。这个在我的代码中使用一个bool类型的变量ismousedown表示,当这个变量为true的时候,则说明对象处于可移动状态,如果为false的时候,表示对象处于不可移动状态。鼠标移出对象或者弹出的时候,就将ismousedown置为false。
好了,思路就是这样,下面将代码贴出来,如果我的思路中表达的不清楚的话,可以在代码中看出来:
. 代码如下:
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "https://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml" >
<head>
<title>使用鼠标拖动层代码</title>
<style type="text/css">
#main
{
width:400px;
height:400px;
position:absolute;
top:10px;
left:0;
border:1px solid #ccc;
border-radius:5px;
background-color:green;
}
h3
{
margin:0;
width:400px;
height:40px;
background-color:gray;
cursor:move;
line-height:40px;
border-radius:5px 5px 0 0;
}
</style>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.7.min.js"></script>
<script type="text/javascript">
//注册一个jquery的鼠标拖动函数,参数为要拖动的对象
$.fn.extend({ sliderobject: function (objmoved) {
var ismousedown = false; //鼠标是否按下
var mousedownposix;
var mousedownposiy;
var initpositionx;
var initpositiony;
var obj = $(objmoved) == undefined ? $(this) : $(objmoved);
obj.mousedown(function (e) {
//当鼠标按下时捕获鼠标位置以及对象的当前位置
mousedownposix = e.pagex;
mousedownposiy = e.pagey;
ismousedown = true;
initpositionx = obj.css("left").replace("px", "");
initpositiony = obj.css("top").replace("px", "");
}).mousemove(function (e) {
//当鼠标按下并且移动时,首先判断鼠标是否在当前焦点,以及鼠标是否已经弹起,
if ($(this).is(":focus") && ismousedown) {
var tempx = parseint(e.pagex) - parseint(mousedownposix) + parseint(initpositionx);
var tempy = parseint(e.pagey) - parseint(mousedownposiy) + parseint(initpositiony);
obj.css("left", tempx + "px").css("top", tempy + "px");
}
//当鼠标弹起或者离开元素时,将鼠标弹起置为false,不移动对象
}).mouseup(function () {
ismousedown = false;
}).mouseleave(function () {
ismousedown = false;
});
}
});
$(document).ready(function () {
$("#slider").sliderobject($("#main"));
})
</script>
</head>
<body>
<p id="main">
<h3>鼠标放在这里拖动我</h3>
<p id="container">可以使用鼠标拖动的层</p>
</p>
</body>
</html>
上一篇: Java高阶语法---static