jQuery使用drag效果實現自由拖拽div
偶然間看到了以前做的一個簡潔的div拖拽效果,修改了一下加點注釋,經測試完美通過firefox/chrome/ie6-11,現拿來分享一下。
先說一下實現原理及要點,最主要的有三步。第一步是mousedown事件,鼠標mousedown的時候記錄此時的鼠標X軸和Y軸以及拖拽框的left和top,并且給拖拽標記賦值true,代表拖拽動作就緒。第二步是mousemove事件,此時動態(tài)獲取鼠標的X軸和Y軸,然后計算出來拖拽框新的left和top并賦值使其實現拖拽效果。第三步是mouseup事件,鼠標彈起時給拖拽標記賦值false,拖拽動作完成。
html代碼如下:
<div class="divWrap" id="move1" style="width: 200px; height: 200px; background: Green; border: 1px solid red; position: absolute; top: 100px; left: 100px; cursor: move; -moz-user-select: none; -webkit-user-select: none;"></div> <div class="divWrap" style="width: 200px; height: 200px; background: brown; border: 1px solid red; position: absolute; top: 300px; left: 100px;"> <h3 id="move2" style="height: 45px; line-height: 45px; font-size: 18px; background: red; margin: 0; cursor: move; -moz-user-select: none; -webkit-user-select: none;">Title--Move</h3> </div>
js代碼如下:
(function($) {
$.fn.dragDiv = function(divWrap) {
return this.each(function() {
var $divMove = $(this);//鼠標可拖拽區(qū)域
var $divWrap = divWrap ? $divMove.parents(divWrap) : $divMove;//整個移動區(qū)域
var mX = 0, mY = 0;//定義鼠標X軸Y軸
var dX = 0, dY = 0;//定義div左、上位置
var isDown = false;//mousedown標記
if(document.attachEvent) {//ie的事件監(jiān)聽,拖拽div時禁止選中內容,firefox與chrome已在css中設置過-moz-user-select: none; -webkit-user-select: none;
$divMove[0].attachEvent('onselectstart', function() {
return false;
});
}
$divMove.mousedown(function(event) {
var event = event || window.event;
mX = event.clientX;
mY = event.clientY;
dX = $divWrap.offset().left;
dY = $divWrap.offset().top;
isDown = true;//鼠標拖拽啟動
});
$(document).mousemove(function(event) {
var event = event || window.event;
var x = event.clientX;//鼠標滑動時的X軸
var y = event.clientY;//鼠標滑動時的Y軸
if(isDown) {
$divWrap.css({"left": x - mX + dX, "top": y - mY + dY});//div動態(tài)位置賦值
}
});
$divMove.mouseup(function() {
isDown = false;//鼠標拖拽結束
});
});
};
})(jQuery);
//
$(document).ready(function() {
$("#move1").dragDiv();//拖拽整個div
$("#move2").dragDiv(".divWrap");//拖拽div頭部
});
最后要說明一下,在開始拖拽動作之前,要禁止選中內容,否則影響拖拽效果。firefox和chrome可以通過css來設置:{-moz-user-select: none; -webkit-user-select: none;},ie本來也可以直接在html里寫一個onselectstart="return false",但似乎chrome受了點影響,所以決定取消這個寫法,然后在js里為ie瀏覽器寫一個onselectstart事件。
這個小插件只是簡單實現拖拽效果,但兼容性很好,里面也用到了一些知識點和技巧。當然也可以借助這個插件或里面的思想繼續(xù)擴展,寫一個比較完善的拖拽插件(如:Draggable和Droppable)。
以上所述就是本文的全部內容了,希望大家能夠喜歡。
相關文章
輕松學習jQuery插件EasyUI EasyUI實現樹形網絡基本操作(2)
這篇文章主要幫助大家輕松學習jQuery插件EasyUI,針對EasyUI實現樹形網絡基本操作,分為三大方面:動態(tài)加載、添加分頁、以及惰性加載節(jié)點,感興趣的小伙伴們可以參考一下2015-11-11
jQuery+CSS3實現仿花瓣網固定頂部位置帶懸浮效果的導航菜單
這篇文章主要介紹了jQuery+CSS3實現仿花瓣網固定頂部位置帶懸浮效果的導航菜單,可實現頁面向下滑動后導航欄橫向懸浮并固定在頂部的功能,涉及jQuery事件響應及頁面元素屬性動態(tài)修改相關操作技巧,需要的朋友可以參考下2016-09-09
手機移動端實現 jquery和HTML5 Canvas的幸運大獎盤特效
這篇文章主要介紹了手機移動端實現 jquery和HTML5 Canvas的幸運大獎盤特效的相關資料,這里附有實現代碼及實現效果圖,需要的朋友可以參考下2016-12-12

