如何實現網頁組件的隨意拖拽


在可視化的代碼編輯器中, 如Adobe Dreamweaver, Microsoft Expression Web, offeeCup HTML Editor, 可以對各種組件進行隨意的拖拽. 

下面這個小程序. 演示了如何使用JavaScript, JQuery 來實現組件的拖拽.

 

圖1是網頁加載后的界面:

                              圖1 

圖2, 你可以將最下面的組件, 隨意拖拽到任意的一個分類中, 同時每個組件, 也是可以隨意拖拽到其他的組件中:

                              圖2

程序實現的代碼如下:

<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
	#div0 {width:376px;height:500px;padding:10px;border:2px solid #aaaaaa;}
	#div1 {width:350px;height:25px;padding:10px;border:1px solid #aaaaaa; text-align:left}
</style>
<script type="text/javascript">
	function allowDrop(ev)
	{
		ev.preventDefault();
	}

	function drag(ev)
	{
		ev.dataTransfer.setData("Text",ev.target.id);
	}

	function drop(ev)
	{
		var data=ev.dataTransfer.getData("Text");
		ev.target.appendChild(document.getElementById(data));
		ev.preventDefault();
	}
</script>
</head>
<body>
	<h1 style="text-align:center"> 詞語分類</h1>
	<div id = "div0" ondrop="drop(event)" ondragover="allowDrop(event)">
		<div id = "div1">分類1</div><br>
		<div id = "div1">分類2</div><br>
		<div id = "div1">分類3</div><br>
		<div id = "div1">分類4</div><br>
		<div id = "div1">分類5</div><br>
		<div id = "div1">分類6</div><br>
		<button id="dragA" draggable="true" ondragstart="drag(event)"> 水果 </button>
		<button id="dragB" draggable="true" ondragstart="drag(event)"> 動物 </button>
		<button id="dragC" draggable="true" ondragstart="drag(event)"> 蔬菜 </button>
		<button id="dragD" draggable="true" ondragstart="drag(event)"> 玩具 </button>
		<button id="dragE" draggable="true" ondragstart="drag(event)"> 蘋果 </button>
		<button id="dragF" draggable="true" ondragstart="drag(event)"> 皮球 </button>
		<button id="dragG" draggable="true" ondragstart="drag(event)"> 布娃娃 </button>
		<button id="dragH" draggable="true" ondragstart="drag(event)"> 小汽車 </button>
		<button id="dragI" draggable="true" ondragstart="drag(event)"> 公共汽車 </button>
		<button id="dragJ" draggable="true" ondragstart="drag(event)"> 香蕉 </button>
		<button id="dragK" draggable="true" ondragstart="drag(event)"> 熊貓 </button>
		<button id="dragL" draggable="true" ondragstart="drag(event)"> 狗 </button>
		<button id="dragM" draggable="true" ondragstart="drag(event)"> 面包 </button>
		<button id="dragN" draggable="true" ondragstart="drag(event)"> 貓 </button>
	</div>
</body>
</html>

  

代碼解釋:

1 創建拖拽容器

程序中創建了div0的容器, 這是個父節點容器, 響應drop和dragover兩個DOM事件. 同時創建了6個div1容器, 這個是子節點容器, 繼承了父節點容器的兩個DOM時間

<div id = "div0" ondrop="drop(event)" ondragover="allowDrop(event)">
		<div id = "div1">分類1</div><br>
		<div id = "div1">分類2</div><br>
		<div id = "div1">分類3</div><br>
		<div id = "div1">分類4</div><br>
		<div id = "div1">分類5</div><br>
		<div id = "div1">分類6</div><br>

2 創建拖拽組件

這里創建了14個Button組件, 當然也可以創建其他的組件元素, 只需要更改一下類型的名稱就可以了, 如List, text, textarea等等. 這些組件,除了繼承了父節點的drop和dropover相應, 還增加了ondragstart事件的響應. 並且 設置可以拖拽屬性為true( draggable="true").

          <button id="dragA" draggable="true" ondragstart="drag(event)"> 水果 </button>
		<button id="dragB" draggable="true" ondragstart="drag(event)"> 動物 </button>
		<button id="dragC" draggable="true" ondragstart="drag(event)"> 蔬菜 </button>
		<button id="dragD" draggable="true" ondragstart="drag(event)"> 玩具 </button>
		<button id="dragE" draggable="true" ondragstart="drag(event)"> 蘋果 </button>
		<button id="dragF" draggable="true" ondragstart="drag(event)"> 皮球 </button>
		<button id="dragG" draggable="true" ondragstart="drag(event)"> 布娃娃 </button>
		<button id="dragH" draggable="true" ondragstart="drag(event)"> 小汽車 </button>
		<button id="dragI" draggable="true" ondragstart="drag(event)"> 公共汽車 </button>
		<button id="dragJ" draggable="true" ondragstart="drag(event)"> 香蕉 </button>
		<button id="dragK" draggable="true" ondragstart="drag(event)"> 熊貓 </button>
		<button id="dragL" draggable="true" ondragstart="drag(event)"> 狗 </button>
		<button id="dragM" draggable="true" ondragstart="drag(event)"> 面包 </button>
		<button id="dragN" draggable="true" ondragstart="drag(event)"> 貓 </button>


3 拖拽事件響應函數  

響應函數有三個, 這里用到了JQuary DOM技術, 查找和設置文檔元素.
// 防止拖拽過程中,有其他的響應事件發生
 function allowDrop(ev) { ev.preventDefault(); } // 開始拖拽時, 將元素的ID保存到Text中 function drag(ev) { ev.dataTransfer.setData("Text",ev.target.id); } //拖拽結束, 講拖拽元素放到拖拽區域對象的子節點中. function drop(ev) { var data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); ev.preventDefault(); }

4 拖拽過程中, 改變了元素組的繼承關系

 如圖2中, 分類2 是動物, 動物中有包含了熊貓,  狗, 貓.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM