jQuery使用drag效果實(shí)現(xiàn)自由拖拽div
偶然間看到了以前做的一個(gè)簡(jiǎn)潔的div拖拽效果,修改了一下加點(diǎn)注釋?zhuān)?jīng)測(cè)試完美通過(guò)firefox/chrome/ie6-11,現(xiàn)拿來(lái)分享一下。
先說(shuō)一下實(shí)現(xiàn)原理及要點(diǎn),最主要的有三步。第一步是mousedown事件,鼠標(biāo)mousedown的時(shí)候記錄此時(shí)的鼠標(biāo)X軸和Y軸以及拖拽框的left和top,并且給拖拽標(biāo)記賦值true,代表拖拽動(dòng)作就緒。第二步是mousemove事件,此時(shí)動(dòng)態(tài)獲取鼠標(biāo)的X軸和Y軸,然后計(jì)算出來(lái)拖拽框新的left和top并賦值使其實(shí)現(xiàn)拖拽效果。第三步是mouseup事件,鼠標(biāo)彈起時(shí)給拖拽標(biāo)記賦值false,拖拽動(dòng)作完成。
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);//鼠標(biāo)可拖拽區(qū)域
var $divWrap = divWrap ? $divMove.parents(divWrap) : $divMove;//整個(gè)移動(dòng)區(qū)域
var mX = 0, mY = 0;//定義鼠標(biāo)X軸Y軸
var dX = 0, dY = 0;//定義div左、上位置
var isDown = false;//mousedown標(biāo)記
if(document.attachEvent) {//ie的事件監(jiān)聽(tīng),拖拽div時(shí)禁止選中內(nèi)容,firefox與chrome已在css中設(shè)置過(guò)-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;//鼠標(biāo)拖拽啟動(dòng)
});
$(document).mousemove(function(event) {
var event = event || window.event;
var x = event.clientX;//鼠標(biāo)滑動(dòng)時(shí)的X軸
var y = event.clientY;//鼠標(biāo)滑動(dòng)時(shí)的Y軸
if(isDown) {
$divWrap.css({"left": x - mX + dX, "top": y - mY + dY});//div動(dòng)態(tài)位置賦值
}
});
$divMove.mouseup(function() {
isDown = false;//鼠標(biāo)拖拽結(jié)束
});
});
};
})(jQuery);
//
$(document).ready(function() {
$("#move1").dragDiv();//拖拽整個(gè)div
$("#move2").dragDiv(".divWrap");//拖拽div頭部
});
最后要說(shuō)明一下,在開(kāi)始拖拽動(dòng)作之前,要禁止選中內(nèi)容,否則影響拖拽效果。firefox和chrome可以通過(guò)css來(lái)設(shè)置:{-moz-user-select: none; -webkit-user-select: none;},ie本來(lái)也可以直接在html里寫(xiě)一個(gè)onselectstart="return false",但似乎chrome受了點(diǎn)影響,所以決定取消這個(gè)寫(xiě)法,然后在js里為ie瀏覽器寫(xiě)一個(gè)onselectstart事件。
這個(gè)小插件只是簡(jiǎn)單實(shí)現(xiàn)拖拽效果,但兼容性很好,里面也用到了一些知識(shí)點(diǎn)和技巧。當(dāng)然也可以借助這個(gè)插件或里面的思想繼續(xù)擴(kuò)展,寫(xiě)一個(gè)比較完善的拖拽插件(如:Draggable和Droppable)。
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
- jQuery 移動(dòng)端拖拽(模塊化開(kāi)發(fā),觸摸事件,webpack)
- jQuery拖拽通過(guò)八個(gè)點(diǎn)改變div大小
- jQuery實(shí)現(xiàn)div拖拽效果實(shí)例分析
- jQuery div拖拽用法實(shí)例
- jQuery控制Div拖拽效果完整實(shí)例分析
- jquery實(shí)現(xiàn)拖拽調(diào)整Div大小
- jQuery拖拽div實(shí)現(xiàn)思路
- jquery實(shí)現(xiàn)div拖拽寬度示例代碼
- JQuery Dialog(JS 模態(tài)窗口,可拖拽的DIV)
- Jquery實(shí)現(xiàn)移動(dòng)端控制DIV拖拽
相關(guān)文章
jQuery基礎(chǔ)語(yǔ)法實(shí)例入門(mén)
這篇文章主要介紹了jQuery基礎(chǔ)語(yǔ)法,以實(shí)例形式分析了jQuery的對(duì)象以及針對(duì)對(duì)象進(jìn)行的操作用法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12
輕松學(xué)習(xí)jQuery插件EasyUI EasyUI實(shí)現(xiàn)樹(shù)形網(wǎng)絡(luò)基本操作(2)
這篇文章主要幫助大家輕松學(xué)習(xí)jQuery插件EasyUI,針對(duì)EasyUI實(shí)現(xiàn)樹(shù)形網(wǎng)絡(luò)基本操作,分為三大方面:動(dòng)態(tài)加載、添加分頁(yè)、以及惰性加載節(jié)點(diǎn),感興趣的小伙伴們可以參考一下2015-11-11
JQuery自定義事件的應(yīng)用 JQuery最佳實(shí)踐
本文主要介紹JQuery框架里面支持的自定義事件模型,通過(guò)實(shí)例說(shuō)明什么時(shí)候可以利用事件模型進(jìn)行面向?qū)ο蟮腏S編程,以及利用“帶命名空間的事件處理函數(shù)”來(lái)避免unbind時(shí)影響別的事件訂閱。2010-08-08
jquery實(shí)現(xiàn)多條件篩選特效代碼分享
這篇文章主要介紹了jquery實(shí)現(xiàn)多條件篩選特效,推薦給大家,有需要的小伙伴可以參考下。2015-08-08
jQuery+CSS3實(shí)現(xiàn)仿花瓣網(wǎng)固定頂部位置帶懸浮效果的導(dǎo)航菜單
這篇文章主要介紹了jQuery+CSS3實(shí)現(xiàn)仿花瓣網(wǎng)固定頂部位置帶懸浮效果的導(dǎo)航菜單,可實(shí)現(xiàn)頁(yè)面向下滑動(dòng)后導(dǎo)航欄橫向懸浮并固定在頂部的功能,涉及jQuery事件響應(yīng)及頁(yè)面元素屬性動(dòng)態(tài)修改相關(guān)操作技巧,需要的朋友可以參考下2016-09-09
jQuery實(shí)現(xiàn)的跨容器無(wú)縫拖動(dòng)效果代碼
這篇文章主要介紹了jQuery實(shí)現(xiàn)的跨容器無(wú)縫拖動(dòng)效果代碼,可實(shí)現(xiàn)容器的任意添加與拖動(dòng)功能,涉及jQuery UI插件的使用技巧,需要的朋友可以參考下2016-06-06
手機(jī)移動(dòng)端實(shí)現(xiàn) jquery和HTML5 Canvas的幸運(yùn)大獎(jiǎng)盤(pán)特效
這篇文章主要介紹了手機(jī)移動(dòng)端實(shí)現(xiàn) jquery和HTML5 Canvas的幸運(yùn)大獎(jiǎng)盤(pán)特效的相關(guān)資料,這里附有實(shí)現(xiàn)代碼及實(shí)現(xiàn)效果圖,需要的朋友可以參考下2016-12-12

