html代码:ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
下面的可拖拽模块的mid为其在数据库中的id号;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
<div style="display:inline" mid="|"><div></div></div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
每td列最后都有一个,并隐藏起来,用来可以推拽元素到此隐藏元素的前面,或者某td列本来没有元素,ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
也可以拖拽到此列上面:
  1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  2<html xmlns="http://www.w3.org/1999/xhtml">ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  3<head>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  4<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  5<title>博客推拽布局示例</title>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  6<link href="main2.css" rel="stylesheet" type="text/css"/>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  7<script src="jquery.js" language="javascript"></script>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  8<script src="dimensions.js" language="javascript"></script>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  9<script src="drag2.js" language="javascript"></script>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
10<script>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
11    $(document).ready(ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
12    function () {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
13        //初始化推拽布局ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
14        $("#main").DragLayout({ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
15            onEnd: function(modules) {        ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
16            var order = "";ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
17            modules.each(function(){ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
18                order += $(this).attr("mid") + " ";ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
19            });ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
20            ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
21            $("#order").text(order);ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
22            //或者进行ajax提交ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
23            }    ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
24        });ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
25        //展开收缩效果ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
26        $(".control .control1").click(function() {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
27            var control = $(this);ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
28            control.parent().next().slideToggle("slow", function() {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
29                  control.text()=="+expend"?control.text("-expend"):control.text("+expend");ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
30            });ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
31        });ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
32        //删除模块ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
33        $(".control .control2").click(function() {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
34            var control = $(this).parent().parent();ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
35            control.fadeTo(300, 0.5);ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
36            setTimeout( function() {control.remove()}, 400);ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
37        });ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
38        //添加模块ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
39        $("#add").click(function() {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
40            var modules = $("#main .module")ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
41            var lastModule = $(modules[modules.length-1]);ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
42            var newModule = lastModule.clone();ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
43            newModule.children(".title").text("new module");ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
44            newModule.children(".content").text("new content");ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
45            newModule.attr("mid", "newid");ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
46            newModule.insertAfter(lastModule);ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
47            newModule.fadeIn(300, 0.5);ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
48            ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
49        });ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
50    }ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
51    );ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
52        ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
53ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
54</script>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
55</head>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
56ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
57<body>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
58<div id="modules"> ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
59    <table id="main" cellspacing="10" border="0" width="98%" align="center"> ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
60        <tr> ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
61            <td id="c1">ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
62                <div class="module" mid="1">ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
63                    <div class="title">title1</div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
64                    <div class="control"><span class="control1">+expend</span> <span class="control2">×delete</span></div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
65                    <div class="content">content1</div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
66                </div>                ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
67                <div class="module" mid="4">ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
68                    <div class="title">title4</div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
69                    <div class="control"><span class="control1">+expend</span> <span class="control2">×delete</span></div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
70                    <div class="content">content4</div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
71                </div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
72                <div style="display:inline" mid="|"><div></div></div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
73            </td> ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
74            <td id="c2" > ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
75                <div class="module" mid="2">ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
76                    <div class="title">title2</div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
77                    <div class="control"><span class="control1">+expend</span> <span class="control2">×delete</span></div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
78                    <div class="content">content2</div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
79                </div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
80                <div style="display:inline" mid="|"><div></div></div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
81            </td> ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
82            <td id="c3"> ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
83                <div class="module" mid="3">ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
84                    <div class="title">title3</div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
85                    <div class="control"><span class="control1">+expend</span> <span class="control2">×delete</span></div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
86                    <div class="content">content3</div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
87                </div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
88                <div style="display:inline" mid="|"><div></div></div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
89            </td> ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
90        </tr> ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
91    </table>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
92    <div id="ghost"></div> ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
93    ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
94</div> ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
95<div id="other">ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
96<input type="button" id="add" value="+ add a module"/><br/>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
97new order is:<div id="order"/>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
98</div>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
99ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
100ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
101</body>ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
102</html>
ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
js代码:ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
主要是两个对象,dragLayout对象(table元素) 包含 dragModule对象(可拖拽的元素)ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  1 (function($) {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  2 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  3 $.fn.DragLayout = function(obj) {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  4  //得到所有可拖拽的模块ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  5  this.getModules = function() {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  6        return this.find("div[@mid]");ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  7     };ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  8 
//得到所有可推拽的模块的位置offset,在后面判断最近元素时候起作用ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
  9  this.getModulesPostion = function() {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
10          var i = 0;    ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
11          var modulesPostion = {};ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
12          this.modules.each(function() {        ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
13             modulesPostion = $(this).offset();ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
14             i++;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
15                     ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
16         });ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
17         ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
18          return modulesPostion;        ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
19     };ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
20  //初始化模块和模块位置ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
21  this.init = function() {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
22  this.modules = this.getModules();ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
23  this.modulesPostion = this.getModulesPostion();ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
24     };ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
25  //回调函数,完成事件ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
26  this.onEnd = obj.onEnd;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
27  //初始化ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
28  this.init();ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
29  var _self = this;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
30  //循环创建dragModule对象            ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
31  return this.modules.each(function() {        ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
32  new dragModule(this, _self);                ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
33     });ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
34 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
35 }ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
36 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
37 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
38  var dragModule = function(ele, parent) {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
39  //对应的div拖拽元素ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
40  this.ele = $(ele);ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
41  //父对象,即dragLayout对象ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
42  this.parent = parent;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
43  //标题栏,用于鼠标拖拽ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
44  this.title = $(this.ele.children()[0]);ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
45 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
46  //记录原先的邻居节点,用来对比是否被移动到新的位置 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
47  this.origNextSibling = this.ele.next();ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
48  this.init.apply(this);ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
49     ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
50 };ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
51 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
52 dragModule.prototype = {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
53     ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
54         init : function() { with(this) {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
55              var _self = this;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
56              //获取移动的时候那个灰色的虚线框 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
57               ghostLayer = $("#ghost");ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
58              //鼠标按下时推拽开始        ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
59        title.mousedown(function (event) {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
60               _self.dragStart(event);ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
61         });ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
62         ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
63         title.hover(function () {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
64               title.fadeIn("slow");ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
65         },ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
66            function () {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
67                 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
68             }ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
69         );ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
70     ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
71         title.css("cursor","move");ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
72 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
73     }ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
74     },ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
75     ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
76      //开始拖拽设定一些位置信息ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
77     dragStart: function (evt) { with(this) {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
78        var _self = this;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
79         evt  = evt?evt:window.event;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
80 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
81        //鼠标相对于浏览器的位置减去元素的位置ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
82        //得出鼠标相对于元素的相对位置,便于拖拽时计算元素的新位置ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
83         x = evt.clientX - ele.offset().left;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
84         y = evt.clientY - ele.offset().top;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
85         ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
86        //绝对位置,top和left就起作用了,就可以推拽了ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
87         ele.css("position","absolute").css("zIndex","100").css("top",ele.offset().top).css("left",ele.offset().left);ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
88         ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
89        //将那个灰框设定得与正在拖动的对象一样高ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
90         ghostLayer.css("position","relative").css("display","block").css("height",ele.innerHeight()).css("width",ele.innerWidth());ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
91         ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
92        //把灰框放到这个对象原先的位置上 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
93         ghostLayer.insertBefore(ele.next());ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
94 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
95        //鼠标按下再移动的事件,鼠标移动,元素也跟着走ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
96         $(document).mousemove(function (event) { _self.drag(event);});ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
97        //释放鼠标的事件ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
98         $(document).mouseup(function (event) { _self.dragEnd(event);});ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
99     }ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
100     },ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
101     ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
102    //拖拽时实现元素跟鼠标走ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
103     drag: function (evt) { with(this) {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
104 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
105        var _self = this;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
106         evt  = evt?evt:window.event;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
107        //计算元素的新的位置ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
108         ele.css("filter","alpha(opacity=70)").css("opacity","0.7").css("left",evt.clientX - x).css("top",evt.clientY - y);ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
109     ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
110        //被拖拽到的新的元素(当然也可以是原来那个) ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
111        var found = null; ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
112        //最大的距离ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
113        var max_distance = 10000;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
114        // 遍历所有的可拖拽的element,寻找离当前鼠标坐标最近的那个可拖拽元素,以便前面插入ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
115        var distance = null;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
116         ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
117        var i = 0;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
118         ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
119         parent.modules.each(function() {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
120            //利用勾股定理计算鼠标到遍历到的这个元素的距离 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
121             distance = Math.sqrt(Math.pow(evt.clientX - parent.modulesPostion.left,2) + Math.pow(evt.clientY - parent.modulesPostion.top, 2));            ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
122             i++;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
123            //如果更小,记录下这个距离,并将它作为found ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
124            if (distance < max_distance) {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
125                 max_distance = distance;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
126                 found = $(this);ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
127             }ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
128         });ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
129 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
130         ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
131        //找到落脚点就先把灰框插进去,我们看到的那个灰框停靠的特效ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
132        if  (found != null && ghostLayer.next() != found) {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
133             ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
134             ghostLayer.insertBefore(found);            ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
135         }        ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
136     }ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
137     },ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
138     ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
139    //鼠标释放时推拽完成ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
140     dragEnd: function (evt) { with(this) {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
141        var _self = this;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
142         evt  = evt?evt:window.event;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
143        //卸载事件ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
144         $(document).unbind("mousemove");ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
145         $(document).unbind("mouseup");ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
146         ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
147         ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
148        //把拖拽时的position=absolute和相关的那些style都消除 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
149         ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
150         ele.css("position","relative").css("filter","alpha(opacity=100)").css("opacity","1").css("zIndex","").css("left","").css("top","");ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
151 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
152        //将灰框隐藏起来ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
153         ghostLayer.css("display", "none");        ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
154         ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
155         ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
156        //如果现在的邻居不是原来的邻居了后者邻居就是它本身 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
157        if (ghostLayer.next() != origNextSibling && ghostLayer.next() != this.ele) {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
158            //把被拖拽的这个节点插到灰框的前面 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
159             ele.insertBefore(ghostLayer.next());ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
160 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
161            //从新初始化可推拽元素对象,可以设定它们的新位置,为下面的拖拽操作做准备ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
162             parent.init();ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
163 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
164            //回调函数,拖拽完成可对dragArray进行处理ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
165             parent.onEnd.call(this, parent.modules);ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
166             ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
167         }ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
168         ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
169         ghostLayer.insertAfter(parent);            ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
170     }ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
171     }ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
172 }ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
173 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
174 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
175 ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
176 })(jQuery);
ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
css代码:ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
1body {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
2font-size:12px;ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
3}ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
4ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
5input {ã¼çšEә|www.netcsharp.cncCÚøòî“ç'X
6