基于jquery的一個(gè)拖拽到指定區(qū)域內(nèi)的效果
更新時(shí)間:2011年09月21日 15:22:41 作者:
這兩天一直在整這個(gè)拖拽的效果,既然學(xué)習(xí)就要把一個(gè)特效的各個(gè)方面考慮周全,這樣才學(xué)到真正的知識(shí)??刹?,又整理了一個(gè) 拖拽的特效。
這個(gè)可與前兩個(gè)不同了,這個(gè)是拖拽到指定的區(qū)域內(nèi)的特效。其實(shí)邏輯方式差不多,只不過(guò)不同的是 找到目標(biāo)元素,用appendTo 的方法插入到目標(biāo)元素。
具體的代碼如下,有興趣者可以試下。(由于是初學(xué),做的簡(jiǎn)單,如果有其他的方法請(qǐng)給下指點(diǎn),我定感激不盡哈。。。)
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>測(cè)試的拖拽功能</title>
<style type="text/css">
body, div { margin: 0; paading: 0; font-size: 12px; }
ul, li { margin: 0; padding: 0; list-style: none; }
.clear { clear: both; width: 1px; height: 0px; line-height: 0px; font-size: 1px; }
.bor2 { padding: 20px 0 0 0; }
.box { position: static; float: left; width: 200px; height: 800px; margin: 0 auto; margin-top: 15px; }
.bor { position: static; width: 100px; height: 100px; margin: 0 0 5px 0 ; border: 1px solid #ccc; background: #ececec; }
.borp { position: absolute; width: 100px; height: 80px; margin: 10px; padding: 10px; border: 1px solid #ccc; background: #ececec; }
.bg { float:left; width: 100px; height: 100px; margin: 8px 5px 0 auto; padding: 10px; border: 1px solid #ccc; }
.text2 { width: 200px; }
.bgColor { border: 1px dashed #f00; }
</style>
<script type="text/javascript" src="jquery-1.6.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var move = false; // 移動(dòng)的初始化
var $bg = $(".bg");
var initDiv, tarDiv, tarDivHalf = 0, wHalf = 0; //拖拽對(duì)象 目標(biāo)對(duì)象
var initPos = {x: 0, y: 0}, relPos = {x: 0, y: 0}, temPos = {x: 0, y: 0};
var dragPos = {x1: 0, x2: 0, y1: 0, y2: 0};// 拖拽對(duì)象的四個(gè)坐標(biāo)
var tarDivPos = {x1: 0, y1: 0, x2: 0, y2: 0}; //目標(biāo)對(duì)象的四個(gè)坐標(biāo)
$(".bor").each(function() {
$(this).mousedown(function(event) {
borSub = $(this).index();
initDiv = $(".bor").eq(borSub); //拖拽對(duì)象
// 鼠標(biāo) 與 目標(biāo)元素的相對(duì)坐標(biāo)
relPos.x = event.pageX - $(this).offset().left;
relPos.y = event.pageY - $(this).offset().top;
move = true;
});
$(document).mousemove(function(event) {
if (!move) { return false; }
// 下列代碼是 if(move)的 程序
initDiv.removeClass("bor").addClass("borp");
// 目標(biāo)元素隨鼠標(biāo)移動(dòng)的坐標(biāo)
dragPos.x1 = event.pageX - relPos.x;
dragPos.y1 = event.pageY - relPos.y;
dragPos.x2 = dragPos.x1 + initDiv. innerWidth();
dragPos.y2 = dragPos.y1 + initDiv. innerHeight();
initDiv.css({ left: dragPos.x1 +'px', top: dragPos.y1 + 'px' });
$bg.each(function() {
tarDiv = $(this);
// 目標(biāo)對(duì)象的坐標(biāo)
tarDivPos.x1 = tarDiv.offset().left;
tarDivPos.x2 = tarDivPos.x1 + tarDiv.width();
tarDivPos.y1 = tarDiv.offset().top;
tarDivPos.y2 = tarDivPos.y1 + tarDiv.height();
tarDivHalf = tarDiv.height()/2; //臨時(shí)變量,以便于在if判斷中使用
wHalf = tarDiv.width()/2;
if (dragPos.x2 >= tarDivPos.x1 + wHalf && dragPos.x2 <= tarDivPos.x2 + wHalf && dragPos.y2 >= tarDivPos.y1 + tarDivHalf && dragPos.y2 <= tarDivPos.y2 + tarDivHalf ) {
if(tarDiv.children().length >0 ) {return false;}// 解決重疊元素 移動(dòng)到一個(gè)目標(biāo)元素
tarDiv.removeClass("bg").addClass("bg bgColor");
} else {
tarDiv.removeClass("bgColor");
}
});
}).mouseup (function(event) {
initDiv.appendTo($(".bgColor"));// 利用 apppendTo 方法 使拖動(dòng)元素對(duì)象添加到指定的區(qū)域。
initDiv.removeClass("borp").addClass("bor").removeAttr("style"); //恢復(fù)拖拽對(duì)象初始的樣式
move = false;
});
});
});
</script>
</head>
<body>
<div class="box">
<div class="bor">bor1</div>
<div class="bor">bor2</div>
<div class="bor">bor3</div>
</div>
<div class="box2">
<div class="bg" id="bg1"></div>
<div class="bg" id="bg2"></div>
<div class="bg" id="bg3"></div>
<div class="bg" id="bg4"></div>
<div class="bg" id="bg5"></div>
<div class="bg" id="bg6"></div>
<div class="bg" id="bg7"></div>
<div class="bg" id="bg8"></div>
<div class="bg" id="bg9"></div>
<div class="bg" id="bg10"></div>
<div class="bg" id="bg11"></div>
<div class="bg" id="bg12"></div>
<div class="bg" id="bg13"></div>
<div class="bg" id="bg14"></div>
<div class="bg" id="bg15"></div>
<div class="bg" id="bg16"></div>
<div class="bg" id="bg17"></div>
<div class="bg" id="bg18"></div>
<div class="bg" id="bg19"></div>
<div class="bg" id="bg20"></div>
<div class="bg" id="bg21"></div>
<div class="bg" id="bg22"></div>
<div class="bg" id="bg23"></div>
<div class="bg" id="bg24"></div>
<div class="bg" id="bg25"></div>
<div class="bg" id="bg26"></div>
<div class="bg" id="bg27"></div>
<div class="bg" id="bg28"></div>
<div class="bg" id="bg29"></div>
<div class="bg" id="bg30"></div>
<div class="bg" id="bg31"></div>
<div class="bg" id="bg32"></div>
<div class="bg" id="bg33"></div>
<div class="bg" id="bg34"></div>
<div class="bg" id="bg35"></div>
<div class="bg" id="bg36"></div>
<div class="bg" id="bg37"></div>
<div class="bg" id="bg38"></div>
<div class="bg" id="bg39"></div>
</div>
<div class="clear"></div>
</body>
</html>
具體的代碼如下,有興趣者可以試下。(由于是初學(xué),做的簡(jiǎn)單,如果有其他的方法請(qǐng)給下指點(diǎn),我定感激不盡哈。。。)
復(fù)制代碼 代碼如下:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>測(cè)試的拖拽功能</title>
<style type="text/css">
body, div { margin: 0; paading: 0; font-size: 12px; }
ul, li { margin: 0; padding: 0; list-style: none; }
.clear { clear: both; width: 1px; height: 0px; line-height: 0px; font-size: 1px; }
.bor2 { padding: 20px 0 0 0; }
.box { position: static; float: left; width: 200px; height: 800px; margin: 0 auto; margin-top: 15px; }
.bor { position: static; width: 100px; height: 100px; margin: 0 0 5px 0 ; border: 1px solid #ccc; background: #ececec; }
.borp { position: absolute; width: 100px; height: 80px; margin: 10px; padding: 10px; border: 1px solid #ccc; background: #ececec; }
.bg { float:left; width: 100px; height: 100px; margin: 8px 5px 0 auto; padding: 10px; border: 1px solid #ccc; }
.text2 { width: 200px; }
.bgColor { border: 1px dashed #f00; }
</style>
<script type="text/javascript" src="jquery-1.6.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var move = false; // 移動(dòng)的初始化
var $bg = $(".bg");
var initDiv, tarDiv, tarDivHalf = 0, wHalf = 0; //拖拽對(duì)象 目標(biāo)對(duì)象
var initPos = {x: 0, y: 0}, relPos = {x: 0, y: 0}, temPos = {x: 0, y: 0};
var dragPos = {x1: 0, x2: 0, y1: 0, y2: 0};// 拖拽對(duì)象的四個(gè)坐標(biāo)
var tarDivPos = {x1: 0, y1: 0, x2: 0, y2: 0}; //目標(biāo)對(duì)象的四個(gè)坐標(biāo)
$(".bor").each(function() {
$(this).mousedown(function(event) {
borSub = $(this).index();
initDiv = $(".bor").eq(borSub); //拖拽對(duì)象
// 鼠標(biāo) 與 目標(biāo)元素的相對(duì)坐標(biāo)
relPos.x = event.pageX - $(this).offset().left;
relPos.y = event.pageY - $(this).offset().top;
move = true;
});
$(document).mousemove(function(event) {
if (!move) { return false; }
// 下列代碼是 if(move)的 程序
initDiv.removeClass("bor").addClass("borp");
// 目標(biāo)元素隨鼠標(biāo)移動(dòng)的坐標(biāo)
dragPos.x1 = event.pageX - relPos.x;
dragPos.y1 = event.pageY - relPos.y;
dragPos.x2 = dragPos.x1 + initDiv. innerWidth();
dragPos.y2 = dragPos.y1 + initDiv. innerHeight();
initDiv.css({ left: dragPos.x1 +'px', top: dragPos.y1 + 'px' });
$bg.each(function() {
tarDiv = $(this);
// 目標(biāo)對(duì)象的坐標(biāo)
tarDivPos.x1 = tarDiv.offset().left;
tarDivPos.x2 = tarDivPos.x1 + tarDiv.width();
tarDivPos.y1 = tarDiv.offset().top;
tarDivPos.y2 = tarDivPos.y1 + tarDiv.height();
tarDivHalf = tarDiv.height()/2; //臨時(shí)變量,以便于在if判斷中使用
wHalf = tarDiv.width()/2;
if (dragPos.x2 >= tarDivPos.x1 + wHalf && dragPos.x2 <= tarDivPos.x2 + wHalf && dragPos.y2 >= tarDivPos.y1 + tarDivHalf && dragPos.y2 <= tarDivPos.y2 + tarDivHalf ) {
if(tarDiv.children().length >0 ) {return false;}// 解決重疊元素 移動(dòng)到一個(gè)目標(biāo)元素
tarDiv.removeClass("bg").addClass("bg bgColor");
} else {
tarDiv.removeClass("bgColor");
}
});
}).mouseup (function(event) {
initDiv.appendTo($(".bgColor"));// 利用 apppendTo 方法 使拖動(dòng)元素對(duì)象添加到指定的區(qū)域。
initDiv.removeClass("borp").addClass("bor").removeAttr("style"); //恢復(fù)拖拽對(duì)象初始的樣式
move = false;
});
});
});
</script>
</head>
<body>
<div class="box">
<div class="bor">bor1</div>
<div class="bor">bor2</div>
<div class="bor">bor3</div>
</div>
<div class="box2">
<div class="bg" id="bg1"></div>
<div class="bg" id="bg2"></div>
<div class="bg" id="bg3"></div>
<div class="bg" id="bg4"></div>
<div class="bg" id="bg5"></div>
<div class="bg" id="bg6"></div>
<div class="bg" id="bg7"></div>
<div class="bg" id="bg8"></div>
<div class="bg" id="bg9"></div>
<div class="bg" id="bg10"></div>
<div class="bg" id="bg11"></div>
<div class="bg" id="bg12"></div>
<div class="bg" id="bg13"></div>
<div class="bg" id="bg14"></div>
<div class="bg" id="bg15"></div>
<div class="bg" id="bg16"></div>
<div class="bg" id="bg17"></div>
<div class="bg" id="bg18"></div>
<div class="bg" id="bg19"></div>
<div class="bg" id="bg20"></div>
<div class="bg" id="bg21"></div>
<div class="bg" id="bg22"></div>
<div class="bg" id="bg23"></div>
<div class="bg" id="bg24"></div>
<div class="bg" id="bg25"></div>
<div class="bg" id="bg26"></div>
<div class="bg" id="bg27"></div>
<div class="bg" id="bg28"></div>
<div class="bg" id="bg29"></div>
<div class="bg" id="bg30"></div>
<div class="bg" id="bg31"></div>
<div class="bg" id="bg32"></div>
<div class="bg" id="bg33"></div>
<div class="bg" id="bg34"></div>
<div class="bg" id="bg35"></div>
<div class="bg" id="bg36"></div>
<div class="bg" id="bg37"></div>
<div class="bg" id="bg38"></div>
<div class="bg" id="bg39"></div>
</div>
<div class="clear"></div>
</body>
</html>
您可能感興趣的文章:
- jQuery拖拽div實(shí)現(xiàn)思路
- jQuery使用drag效果實(shí)現(xiàn)自由拖拽div
- JQuery之拖拽插件實(shí)現(xiàn)代碼
- jQuery插件實(shí)現(xiàn)文件上傳功能(支持拖拽)
- jquery實(shí)現(xiàn)拖拽調(diào)整Div大小
- jQuery實(shí)現(xiàn)的簡(jiǎn)單拖拽功能示例
- jquery拖拽排序簡(jiǎn)單實(shí)現(xiàn)方法(效果增強(qiáng)版)
- 基于jquery實(shí)現(xiàn)的鼠標(biāo)拖拽元素復(fù)制并寫入效果
- jQuery實(shí)現(xiàn)的簡(jiǎn)單拖拽功能示例【測(cè)試可用】
相關(guān)文章
jQuery簡(jiǎn)單實(shí)現(xiàn)點(diǎn)擊文本框復(fù)制內(nèi)容到剪貼板上的方法
這篇文章主要介紹了jQuery簡(jiǎn)單實(shí)現(xiàn)點(diǎn)擊文本框復(fù)制內(nèi)容到剪貼板上的方法,涉及jQuery針對(duì)瀏覽器的判定與剪貼板的讀寫操作技巧,需要的朋友可以參考下2016-08-08jQuery實(shí)現(xiàn)菜單欄導(dǎo)航效果
這篇文章主要為大家詳細(xì)介紹了jQuery實(shí)現(xiàn)簡(jiǎn)單菜單欄導(dǎo)航效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08jquery無(wú)縫向上滾動(dòng)實(shí)現(xiàn)代碼
向上滾動(dòng)的效果想必大家都見(jiàn)過(guò)吧!無(wú)縫間歇向上滾動(dòng)應(yīng)該也不會(huì)陌生吧,接下來(lái)為大家介紹下jquery實(shí)現(xiàn)無(wú)縫間歇滾動(dòng),感興趣的朋友可以參考下哈,希望可以幫助到你們2013-03-03使用element-ui的el-menu導(dǎo)航選中后刷新頁(yè)面保持當(dāng)前選中狀態(tài)
這篇文章主要介紹了使用element-ui的el-menu導(dǎo)航選中后刷新頁(yè)面保持當(dāng)前選中狀態(tài),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07jQuery移除元素自動(dòng)解綁事件實(shí)現(xiàn)思路及代碼
用jQuery將元素移除的基本方法常用的有三個(gè),一個(gè)是remove()方法,一個(gè)是html()方法,一個(gè)是empty()方法2014-05-05js前臺(tái)判斷開(kāi)始時(shí)間是否小于結(jié)束時(shí)間
js前臺(tái)判斷開(kāi)始時(shí)間是否小于結(jié)束時(shí)間,結(jié)合了jquery需要的朋友可以參考下2012-02-02jQuery插件jsonview展示json數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了jQuery插件jsonview展示json數(shù)據(jù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05