Jquery寫一個(gè)鼠標(biāo)拖動(dòng)效果實(shí)現(xiàn)原理與代碼
更新時(shí)間:2012年12月24日 09:35:48 作者:
近日項(xiàng)目中要做一個(gè)鼠標(biāo)拖拽層的效果,于是手動(dòng)使用Jquery做了一個(gè),發(fā)出來(lái)跟大伙兒分享一下,并希望能得到高手的指點(diǎn),如何有高手改進(jìn)的話,在下不勝感激
近日項(xiàng)目中要做一個(gè)鼠標(biāo)拖拽層的效果,于是手動(dòng)使用Jquery做了一個(gè),發(fā)出來(lái)跟大伙兒分享一下,并希望能得到高手的指點(diǎn),如果哪位大俠覺(jué)得我的思路和代碼不正確或者需要改進(jìn)的話,希望能指點(diǎn)一二,在下感激不盡。
我的思路是這樣的:
1、在鼠標(biāo)按下的時(shí)候,捕獲鼠標(biāo)的當(dāng)前位置;
2、得到要移動(dòng)對(duì)象的當(dāng)前位置信息;
3、鼠標(biāo)移動(dòng)時(shí),計(jì)算鼠標(biāo)移動(dòng)的距離,將這個(gè)距離更新到對(duì)象的位置,在我的代碼中,我試用絕對(duì)定位來(lái)表示對(duì)象的位置;
4、當(dāng)鼠標(biāo)移出對(duì)象或者鼠標(biāo)彈起的時(shí)候,則認(rèn)為對(duì)象處于不能移動(dòng)的狀態(tài)。這個(gè)在我的代碼中使用一個(gè)bool類型的變量isMouseDown表示,當(dāng)這個(gè)變量為true的時(shí)候,則說(shuō)明對(duì)象處于可移動(dòng)狀態(tài),如果為false的時(shí)候,表示對(duì)象處于不可移動(dòng)狀態(tài)。鼠標(biāo)移出對(duì)象或者彈出的時(shí)候,就將isMouseDown置為false。
好了,思路就是這樣,下面將代碼貼出來(lái),如果我的思路中表達(dá)的不清楚的話,可以在代碼中看出來(lái):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>使用鼠標(biāo)拖動(dòng)層代碼</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="http://code.jquery.com/jquery-1.7.min.js"></script>
<script type="text/javascript">
//注冊(cè)一個(gè)Jquery的鼠標(biāo)拖動(dòng)函數(shù),參數(shù)為要拖動(dòng)的對(duì)象
$.fn.extend({ SliderObject: function (objMoved) {
var isMouseDown = false; //鼠標(biāo)是否按下
var mouseDownPosiX;
var mouseDownPosiY;
var InitPositionX;
var InitPositionY;
var obj = $(objMoved) == undefined ? $(this) : $(objMoved);
obj.mousedown(function (e) {
//當(dāng)鼠標(biāo)按下時(shí)捕獲鼠標(biāo)位置以及對(duì)象的當(dāng)前位置
mouseDownPosiX = e.pageX;
mouseDownPosiY = e.pageY;
isMouseDown = true;
InitPositionX = obj.css("left").replace("px", "");
InitPositionY = obj.css("top").replace("px", "");
}).mousemove(function (e) {
//當(dāng)鼠標(biāo)按下并且移動(dòng)時(shí),首先判斷鼠標(biāo)是否在當(dāng)前焦點(diǎn),以及鼠標(biāo)是否已經(jīng)彈起,
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");
}
//當(dāng)鼠標(biāo)彈起或者離開元素時(shí),將鼠標(biāo)彈起置為false,不移動(dòng)對(duì)象
}).mouseup(function () {
isMouseDown = false;
}).mouseleave(function () {
isMouseDown = false;
});
}
});
$(document).ready(function () {
$("#Slider").SliderObject($("#Main"));
})
</script>
</head>
<body>
<div id="Main">
<h3>鼠標(biāo)放在這里拖動(dòng)我</h3>
<div id="Container">可以使用鼠標(biāo)拖動(dòng)的層</div>
</div>
</body>
</html>
我的思路是這樣的:
1、在鼠標(biāo)按下的時(shí)候,捕獲鼠標(biāo)的當(dāng)前位置;
2、得到要移動(dòng)對(duì)象的當(dāng)前位置信息;
3、鼠標(biāo)移動(dòng)時(shí),計(jì)算鼠標(biāo)移動(dòng)的距離,將這個(gè)距離更新到對(duì)象的位置,在我的代碼中,我試用絕對(duì)定位來(lái)表示對(duì)象的位置;
4、當(dāng)鼠標(biāo)移出對(duì)象或者鼠標(biāo)彈起的時(shí)候,則認(rèn)為對(duì)象處于不能移動(dòng)的狀態(tài)。這個(gè)在我的代碼中使用一個(gè)bool類型的變量isMouseDown表示,當(dāng)這個(gè)變量為true的時(shí)候,則說(shuō)明對(duì)象處于可移動(dòng)狀態(tài),如果為false的時(shí)候,表示對(duì)象處于不可移動(dòng)狀態(tài)。鼠標(biāo)移出對(duì)象或者彈出的時(shí)候,就將isMouseDown置為false。
好了,思路就是這樣,下面將代碼貼出來(lái),如果我的思路中表達(dá)的不清楚的話,可以在代碼中看出來(lái):
復(fù)制代碼 代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>使用鼠標(biāo)拖動(dòng)層代碼</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="http://code.jquery.com/jquery-1.7.min.js"></script>
<script type="text/javascript">
//注冊(cè)一個(gè)Jquery的鼠標(biāo)拖動(dòng)函數(shù),參數(shù)為要拖動(dòng)的對(duì)象
$.fn.extend({ SliderObject: function (objMoved) {
var isMouseDown = false; //鼠標(biāo)是否按下
var mouseDownPosiX;
var mouseDownPosiY;
var InitPositionX;
var InitPositionY;
var obj = $(objMoved) == undefined ? $(this) : $(objMoved);
obj.mousedown(function (e) {
//當(dāng)鼠標(biāo)按下時(shí)捕獲鼠標(biāo)位置以及對(duì)象的當(dāng)前位置
mouseDownPosiX = e.pageX;
mouseDownPosiY = e.pageY;
isMouseDown = true;
InitPositionX = obj.css("left").replace("px", "");
InitPositionY = obj.css("top").replace("px", "");
}).mousemove(function (e) {
//當(dāng)鼠標(biāo)按下并且移動(dòng)時(shí),首先判斷鼠標(biāo)是否在當(dāng)前焦點(diǎn),以及鼠標(biāo)是否已經(jīng)彈起,
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");
}
//當(dāng)鼠標(biāo)彈起或者離開元素時(shí),將鼠標(biāo)彈起置為false,不移動(dòng)對(duì)象
}).mouseup(function () {
isMouseDown = false;
}).mouseleave(function () {
isMouseDown = false;
});
}
});
$(document).ready(function () {
$("#Slider").SliderObject($("#Main"));
})
</script>
</head>
<body>
<div id="Main">
<h3>鼠標(biāo)放在這里拖動(dòng)我</h3>
<div id="Container">可以使用鼠標(biāo)拖動(dòng)的層</div>
</div>
</body>
</html>
相關(guān)文章
jQuery插件HighCharts繪制2D圓環(huán)圖效果示例【附demo源碼下載】
這篇文章主要介紹了jQuery插件HighCharts繪制2D圓環(huán)圖效果,結(jié)合實(shí)例形式分析了jQuery使用HighCharts插件繪制圓環(huán)圖的實(shí)現(xiàn)步驟與相關(guān)操作技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-03-03
jquery實(shí)現(xiàn)滑動(dòng)特效代碼
這篇文章主要介紹了jquery實(shí)現(xiàn)滑動(dòng)特效代碼, .slideUp([duration][,complete])目標(biāo)元素向上滑入隱藏;.slideDown([duration][,complete])目標(biāo)元素向下滑出顯示;.slideToggle([duration][,complete])目標(biāo)元素隱藏則向下滑出顯示,否則向上滑入隱藏;需要的朋友參考下2015-08-08
jquery實(shí)現(xiàn)焦點(diǎn)輪播效果
本文主要介紹了jquery實(shí)現(xiàn)焦點(diǎn)輪播效果的示例代碼,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02
jquery+h5實(shí)現(xiàn)九宮格抽獎(jiǎng)特效(前后端代碼)
這篇文章主要為大家詳細(xì)介紹了jquery+h5實(shí)現(xiàn)九宮格抽獎(jiǎng)特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
jquery trigger偽造a標(biāo)簽的click事件取代window.open方法
這篇文章主要介紹了使用jquery trigger 觸發(fā)a標(biāo)簽的click事件取代window.open方法,需要的朋友可以參考下2014-06-06
jQuery validate 驗(yàn)證radio實(shí)例
這篇文章主要介紹了jQuery validate 驗(yàn)證radio實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03

