基于基于JQuery的列表拖动排序实现代码的列表拖动排序实现代码
要求
拖动排序,从名字就不难想像,就是按住一行数据拖到想要的排序位置,保存新的排序队列。
思路
首先给列表行建立锚点,绑定mousedown和mouseup事件,当鼠标移动到想要插入的位置时,将对象行移动到目标行,然后
对其经过的所有行进行排序处理。
思路很简单,但这里面仍然有几个问题要注意
1、移动到什么位置可以视作要插入到目标行的位置。
2、移动出了顶端和底端时,判断为第一和最后。
3、向上移动和向下移动的处理
解决
关于事件
Javascript里鼠标按下和放开事件为onmousedown,onmouseup,JQuery里是mousedown,mouseup,所以,这里使用
mousedown和mouseup
首先,要知道界面有多少行,每一行有多高,因为要判断鼠标的移动距离
代码如下:
var tbodyHeight=setting.frame.outerHeight(); //setting.frame,父对象
var lineNum=$(“.”+setting.dgLine).length; //setting.dgLine,每一行的classname
var lineHeight=Math.ceil(tbodyHeight/lineNum);
之所有要取lineNum(行数),除了计算行高外,还有个目的是要使用index(),通过序列索引值来进行移动行到目标位置
当mousedown事件触发后,就要开始计算鼠标移动的距离,用于判断该行到底要移动到什么位置
代码如下:
dgid=$(this).attr(setting.id); //移动行的ID,setting.id,是每一行用来标记ID的名称
thisIndex=$(“#”+setting.linePre+dgid).index(); //该行的索引,setting.linePre,每一行ID关辍
thisLineTop=$(“#”+setting.linePre+dgid).offset().top; //该行的top值
topDistance=thisIndex*lineHeight; //该行距离第一行顶端的距离
downDistance=(lineNum-thisIndex-1)*lineHeight; //该行距离最后一行底端的距离
dgid主要是用来区分每一行的标识,一般的列表都是程序循环输出来的,如果没有这样一个ID,就分不出哪行是哪行,所以,
在HTML上,需要定义一个存放ID的家伙。程序通过attr就是来取这个值,保证每一行都有自己唯一的值。