Jquery寫一個滑鼠拖動效果實現原理與代碼

來源:互聯網
上載者:User

近日項目中要做一個滑鼠拖拽層的效果,於是手動使用Jquery做了一個,發出來跟大伙兒分享一下,並希望能得到高手的指點,如果哪位大俠覺得我的思路和代碼不正確或者需要改進的話,希望能指點一二,在下感激不盡。

我的思路是這樣的

1、在滑鼠按下的時候,捕獲滑鼠的當前位置;

2、得到要移動對象的當前位置資訊;

3、滑鼠移動時,計算滑鼠移動的距離,將這個距離更新到對象的位置,在My Code中,我試用絕對位置來表示對象的位置;

4、當滑鼠移出對象或者滑鼠彈起的時候,則認為對象處於不能移動的狀態。這個在My Code中使用一個bool類型的變數isMouseDown表示,當這個變數為true的時候,則說明對象處於可移動狀態,如果為false的時候,表示對象處於不可移動狀態。滑鼠移出對象或者彈出的時候,就將isMouseDown置為false。

好了,思路就是這樣,下面將代碼貼出來,如果我的思路中表達的不清楚的話,可以在代碼中看出來:
複製代碼 代碼如下:
<!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>使用滑鼠拖動層代碼</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">
//註冊一個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>
<div id="Main">
<h3>滑鼠放在這裡拖動我</h3>
<div id="Container">可以使用滑鼠拖動的層</div>
</div>
</body>
</html>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.