拖动可能是时下比较流行的一个js效果之一,在感叹创造者的神奇之外,我怀作好奇,也来尝试了一把(当然,是在欣赏了不少拖动代码的基础上,并妄想通过最简单的办法实现
)。
其实,拖动特效可以由3个主要部分组成,开始拖动,拖动,结束拖动。
哎,不说这么多了(摄影的朋友肯定要说, 怎么还不上图了...呵呵),好,我就来点代码吧。
开始拖动之前,先上2个简单的工具方法:
(如果你想看到深动的效果,可以单击此处运行)
点击下载此文件
1var Drag = {
2 "moveDiv":null,
3 "dragObj":null,
4 "draging":false,
5 "start":function(ev){
6 Drag.dragObj = Utils.getTarget(ev);
7 if(Drag.isdragable()){
8 Drag.createDiv();
9 Drag.draging = false;
10 }
11 return false;
12 },
13 "draging":function(ev){
14 if(!Drag.isdragable() || Drag.moveDiv == null){
15 return;
16 }
17
18 // 设置被选定对象的鼠标跟随效果
19 if(!Drag.draging){
20 var move = Drag.dragObj.cloneNode(true);
21 Drag.moveDiv.appendChild(move);
22 }
23 Drag.moveDiv.style.top = (Utils.getPosition(ev)).top;
24 Drag.moveDiv.style.left = (Utils.getPosition(ev)).left;
25
26 // 使用DOM操作,替换拖动过程中元素的位置
27 var mouseOverObj = Utils.getTarget(ev);
28 if(mouseOverObj.getAttribute("dragable") || mouseOverObj.getAttribute("container")){
29 if(Drag.dragObj.parentNode != mouseOverObj.parentNode){
30 if(mouseOverObj.nextSibling){
31 mouseOverObj.parentNode.insertBefore(Drag.dragObj,mouseOverObj);
32 }else{
33 mouseOverObj.parentNode.appendChild(Drag.dragObj);
34 }
35 }else{
36 if(mouseOverObj.nextSibling){
37 Drag.dragObj.parentNode.insertBefore(Drag.dragObj,mouseOverObj);
38 }else{
39 Drag.dragObj.parentNode.appendChild(Drag.dragObj);
40 }
41 }
42 }
43
44 // 设置状态为拖动中
45 Drag.draging = true;
46 return false;
47 },
48 "end":function(){
49 Drag.dragObj = null;
50 Drag.removeDiv();
51 Drag.draging = false;
52 return false;
53 },
54 "removeDiv":function(){
55 // 移除拖动时跟随鼠标移动的虚拟DIV层
56 if(Drag.moveDiv != null){
57 Drag.moveDiv.style.display = "none";
58 Drag.moveDiv.parentNode.removeChild(Drag.moveDiv);
59 Drag.moveDiv = null;
60 }
61 },
62 "createDiv":function(){
63 // 初始化拖动时跟随鼠标移动的虚拟DIV层
64 Drag.removeDiv();
65 Drag.moveDiv = document.createElement("div");
66 Drag.moveDiv.style.cssText = "position:absolute;z-index:10;";
67 document.body.appendChild(Drag.moveDiv);
68 },
69 "isdragable":function(){
70 // 验证当前对象是否为可拖动的对象
71 if(Drag.dragObj == null || !Drag.dragObj.getAttribute("dragable")){
72 return false;
73 }
74 return true;
75 }
76}
[1] [2] 下一页