注册 | 登录 | 设为首页 | 加入收藏
您当前的位置:飞翔学院-IT中国 → 编程开发JavaScript → 文章内容

javascript拖动(拖拽)之我见 - 简约版

作者:佚名 来源:本站整理 发布时间:2008-6-3 22:11:55

 拖动可能是时下比较流行的一个js效果之一,在感叹创造者的神奇之外,我怀作好奇,也来尝试了一把(当然,是在欣赏了不少拖动代码的基础上,并妄想通过最简单的办法实现)。

其实,拖动特效可以由3个主要部分组成,开始拖动,拖动,结束拖动。

哎,不说这么多了(摄影的朋友肯定要说, 怎么还不上图了...呵呵),好,我就来点代码吧。

开始拖动之前,先上2个简单的工具方法:

var  Utils  =    {
   " getTarget " : function (ev)  ...{
         //  获得当前的目标源对象  
         ev  =  ev  ||  window.event;
         var  tget  =  ev.target  ||  ev.srcElement;
        return  tget;
   }
,
     " getPosition " : function (ev)  ...{
         //  设置坐标  
          //  模拟一个鼠标跟随的效果  
         ev  =  ev  ||  window.event;
         return    ...{top:document.body.scrollTop  +  ev.clientY  +   10 ,
                        left:document.body.scrollLeft  +  ev.clientX  +   10 }
;
   }
  
}


(如果你想看到深动的效果,可以单击此处运行

点击下载此文件

 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]  下一页


  • 打印文档
  • 推荐好友
  • 返回顶部
  • 增大字体
  • 减少字体
关于本站 | 工作机会 | 合作网站 | 广告服务 | 市场合作| 联系我们 | 抽奖活动
版权所有: 武汉威俊科技有限公司 Copyright 2005-2007 www.ITCNW.COM All rights reserved