• 如何实现网页组件的随意拖拽


    在可视化的代码编辑器中, 如Adobe Dreamweaver, Microsoft Expression Web, offeeCup HTML Editor, 可以对各种组件进行随意的拖拽. 

    下面这个小程序. 演示了如何使用JavaScript, JQuery 来实现组件的拖拽.

    图1是网页加载后的界面:

                                  图1 

    图2, 你可以将最下面的组件, 随意拖拽到任意的一个分类中, 同时每个组件, 也是可以随意拖拽到其他的组件中:

                                  图2

    程序实现的代码如下:

    <!DOCTYPE HTML>
    <html>
    <head>
    <style type="text/css">
    	#div0 {376px;height:500px;padding:10px;border:2px solid #aaaaaa;}
    	#div1 {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 是动物, 动物中有包含了熊猫,  狗, 猫.

  • 相关阅读:
    09-排序1 排序
    06-图3 六度空间
    06-图2 Saving James Bond
    06-图1 List Components
    04-树5 Complete Binary Search Tree
    03-树2 Tree Traversals Again
    PAT 05-树8 Huffman Codes
    Egret引擎的visible两次开关闭问题
    Egret的项目笔记(一)
    Egret屏幕适配【转】
  • 原文地址:https://www.cnblogs.com/montai/p/13128790.html
Copyright © 2020-2023  润新知