jquery實(shí)現(xiàn)拖拽很簡(jiǎn)單的:

創(chuàng)新互聯(lián)是專(zhuān)業(yè)的桂東網(wǎng)站建設(shè)公司,桂東接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行桂東網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
$(element).myDrag({????
parent:'parent',?//定義拖動(dòng)不能超出的外框,拖動(dòng)范圍????
randomPosition:true,?//初始化隨機(jī)位置????
direction:'all',?//方向????
handler:false,?//把手????
dragStart:function(x,y){},?//拖動(dòng)開(kāi)始?x,y為當(dāng)前坐標(biāo)????
dragEnd:function(x,y){},?//拖動(dòng)停止?x,y為當(dāng)前坐標(biāo)????
dragMove:function(x,y){}?//拖動(dòng)進(jìn)行中?x,y為當(dāng)前坐標(biāo)????
});
具體的可以看這里:jquery.drag.js—實(shí)現(xiàn)拖拽效果的插件
有完整的在線實(shí)例演示的!!!
script src=""/script //引用jquery
script src=""/script //引用jquery ui
script
$(function () {
$("#draggable").draggable(); //draggable為ui中的拖動(dòng)方法
});
/script
img id="draggable" src="a1.jpg" width:100px; height:100px; /
這樣行不??
主要功能需求說(shuō)明:
1.左側(cè)的元素結(jié)構(gòu)最后會(huì)通過(guò)Ajax call服務(wù)器的數(shù)據(jù)來(lái)生成,能支持多級(jí)元素。父節(jié)點(diǎn)可以折疊起來(lái)
2.用戶(hù)可以通過(guò)拖放的操作,將元素從左側(cè)拖放到右側(cè)。如果是拖的父節(jié)點(diǎn)元素,那么需要把它子節(jié)點(diǎn)的元素一并拖到右邊
3.元素放到右側(cè),右側(cè)可以接受元素的區(qū)域有2種可能。一種新建一個(gè)區(qū)域,就類(lèi)似“華東交通大學(xué)”所示。另外一種就是拖放到已經(jīng)有元素的區(qū)域。兩者的關(guān)系是“或”。單個(gè)元素區(qū)域有“非”和“且”的關(guān)系。點(diǎn)擊右邊刪除按鈕可以刪除節(jié)點(diǎn)元素。
第一步:左側(cè)元素可以拖
官方給出的實(shí)例是直接在要拖動(dòng)的元素上添加class="ui-widget-
content"。最初我是在所有要拖動(dòng)的元素都添加了“ui-widget-content”類(lèi)別。但是測(cè)試拖動(dòng)結(jié)果,發(fā)現(xiàn)元素只能在它所在的
container里面拖動(dòng),再往右拖動(dòng),div會(huì)出現(xiàn)水平或垂直滾動(dòng)條。不知道是不是自己在參數(shù)設(shè)置上不對(duì)。container設(shè)置了
overflow:auto。
效果如下圖所示:
因
為最終的左側(cè)元素節(jié)點(diǎn)是通過(guò)Ajax訪問(wèn)后臺(tái)返回json數(shù)據(jù),然后通過(guò)Javascript動(dòng)態(tài)生成這種結(jié)構(gòu),而已不能為動(dòng)態(tài)生成的元素綁定drag事
件,也就不能調(diào)用draggable方法,所以我使用了一個(gè)稱(chēng)之“中間拖拽容易元素”,這div一直在頁(yè)面上。只是默認(rèn)不顯示,只要用戶(hù)開(kāi)始拖拽左側(cè)的元
素時(shí),它就出現(xiàn)了。當(dāng)然這里需要自己手動(dòng)添加很多代碼。
復(fù)制代碼 代碼如下:
div id='draggableDiv' class="ui-widget-content"
中間拖拽容器元素
/div
script type="text/javascript"
$("#draggableDiv").draggable({
containment: "parent",
drag: function (event, ui) { console.log("拖拽中"); },
stop: function () { console.log("拖拽結(jié)束"); }
});
/script
第二步:將
要拖的元素內(nèi)容復(fù)制到draggableDiv上。實(shí)現(xiàn)拖動(dòng)父節(jié)點(diǎn)時(shí),其下面的子節(jié)點(diǎn)元素也要拖放到右邊。如果是拖動(dòng)的子節(jié)點(diǎn)元素,就在右邊直接顯示子節(jié)
點(diǎn)元素。父節(jié)點(diǎn)和子節(jié)點(diǎn)是相對(duì)的,因?yàn)樽髠?cè)樹(shù)形結(jié)構(gòu)的節(jié)點(diǎn)可以是無(wú)限級(jí)的,所以一個(gè)元素既可能是子節(jié)點(diǎn)元素,也會(huì)是父節(jié)點(diǎn)元素。通過(guò)監(jiān)聽(tīng)鼠標(biāo)的
mousedown和mouseup事件,來(lái)判斷用戶(hù)在拖動(dòng)元素。這步的原理如下圖所示:
當(dāng)
用戶(hù)拖動(dòng)B節(jié)點(diǎn)時(shí),首先把B元素上的內(nèi)容復(fù)制給draggableDiv元素,當(dāng)用戶(hù)拖動(dòng)B元素,其實(shí)是拖動(dòng)draggableDiv元素。所以我們要計(jì)
算出我們點(diǎn)擊的B元素的位置,然后讓draggableDiv在拖動(dòng)時(shí)候顯示正確的位置,然后拖動(dòng)就是draggableDiv元素,用戶(hù)看起來(lái)是拖動(dòng)的
B節(jié)點(diǎn)元素。
復(fù)制代碼 代碼如下:
var clickElement = null; $(".threepanels .ptreelist").bind("mousedown",function (event) {
//獲取當(dāng)前mousedown元素的內(nèi)容
var itemContent = $(this).html(); var draggableDiv = $("#draggableDiv");
$(draggableDiv).css({ "display": "block", "height": 0 });
//將點(diǎn)擊的元素內(nèi)容復(fù)制
clickElement = $(this).clone();
var
currentdiv = $(this).offset(); $(draggableDiv).css({ "top":
currentdiv.top, "left": currentdiv.left }); draggableDiv.trigger(event);
//取消默認(rèn)行為 return false; });
$("#draggableDiv").mouseup(function (event) { $(this).css({ "height": "0" }); });
//拖動(dòng)元素時(shí)鼠標(biāo)的位置
var dragDivLeft = 0;
var dragDivTop = 0;
$("#draggableDiv").draggable({
containment: "parent", drag: function (event, ui) {
$("#draggableDiv").css({ "width": "260px", "height": "22px" });
$("#draggableDiv").append(clickElement);
var closeTop = $(".closeBar").offset().top;
dragDivLeft = event.target.offsetLeft;
dragDivTop = event.target.offsetTop; },
stop: function () {
//拖拽結(jié)束,將拖拽容器內(nèi)容清空
$("#draggableDiv").html("");
$("#draggableDiv").css({"height":"0"}); }
});
第三步:右邊的元素可以放到指定的位置上
需要將元素拖到指定的區(qū)域里面,然后釋放操作。完成“放”的操作。可以從上圖看出,我是將元素的上邊左邊和下邊緣的左邊存到一個(gè)數(shù)組里面。然后在“拖”的過(guò)程中,一直記錄了拖動(dòng)的左邊,放到右側(cè)時(shí),就可以判斷當(dāng)前元素將要放的位置。具體可以下載代碼查看。
html
head
titlejquery或JS拖動(dòng)DIV左右移動(dòng)/title
script?src="jquery-1.7.1.min.js"/script
style?type="text/css"
body?{background-color:?#fff;?}
.win?{position:?absolute;?top:?0px;?left:?0px;width:?300px;height:?222px;}
.title?{height:?20px;width:?300px;??position:?absolute;background-color:?#0094ff;?float:?inherit;?top:?0px;?left:?0px;?}
.winCon?{?height:?200px;width:?298px;?position:?absolute;?border:?solid;?
border-width:?1px;?border-color:?#0094ff;?border-top:?none;??float:?inherit;?left:?0px;?top:?20px;?}
/style
/head
body?onload="showDiv(this,'test1');"
/body
script?type="text/javascript"
function?showDiv(element,?str)?{
$(document.body).append("div?class='win'?id='win"?+?str?+?"'div?class='title'?id='"?+?str?+?"'/divdiv?class='winCon'?清新自在/div/div");
$("#"?+?str).mousedown(function?(event)?{
var?offset?=?$(this).offset();
_x?=?event.clientX?-?offset.left;
_y?=?event.clientY?+?20?-?offset.top;
$("#win"?+?str).css({?"top":?offset.top?-?20?+?"px"?});
$("#win"?+?str).mousemove(function?(event)?{
_xx?=?event.clientX?-?_x;
_yy?=?event.clientY?-?_y;
this.style.left?=?_xx?+?"px";
this.style.top?=?_yy?+?"px";
this.style.zIndex?=?"100";
return?false;
});
return?false;
});
$("#win"?+?str).mouseup(function?()?{
$(this).unbind("mousemove");
$(this).css({?"z-index":?"-1"?});
return?false;
});
}
/script
/html
停止拖動(dòng):return false,鼠標(biāo)松開(kāi)再按下可以繼續(xù)拖動(dòng)。
if(obt = 0) {
$(".one").css({"top":"0px"});
return false;
};
禁止拖動(dòng):disabled: true,但你需要另外一個(gè)button來(lái)設(shè)置 disabled: false 后才能繼續(xù)拖動(dòng)。
if(obt = 0) {
$(".one").css({"top":"0px"});
$(this).draggable({ disabled: true });
return false;
};
-------------------------------
建議你使用 containment,將拖動(dòng)范圍局限于一個(gè)指定的元素內(nèi)。
drag: function(e) {
// drag 代碼
},
containment: "div.main"
這樣你就不需要自定義 top right bottom left,.one 只在 div.main 中可以拖動(dòng)。
如果要直接實(shí)現(xiàn)這種效果的話(huà),
一個(gè)程序比較復(fù)雜,
第二個(gè)可能效果不會(huì)很理想,會(huì)出現(xiàn)很有拖拽或者運(yùn)動(dòng)中的bug!
你可以參考一下jquery ui里面的拖拽。
利用jquery ui里面的,即方便,有能有效的去除各種意料意外的情況
給你一個(gè)地址,你可以看一下參考一下
網(wǎng)站題目:jquery可拖動(dòng),jquery左右滑動(dòng)
轉(zhuǎn)載源于:http://chinadenli.net/article6/dsipoog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、商城網(wǎng)站、做網(wǎng)站、網(wǎng)站排名、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
營(yíng)銷(xiāo)型網(wǎng)站建設(shè)知識(shí)