欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Jquery写一个鼠标拖动效果实现原理与代码

程序员文章站 2022-04-09 17:56:54
近日项目中要做一个鼠标拖拽层的效果,于是手动使用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>