双击锁定,单击排序的js实现

来源:互联网 发布:红蜘蛛软件卸载不了 编辑:程序博客网 时间:2024/05/01 02:57

使用方法见最后的demo

var CC = {};(function() {    var cSort = function() {        this.sortList = {};        this.clickTaskId;        this.curTask = 0; // 1 click, 2 dblclick        this.sortFunc = function(){};        this.curOrder = 1;    };    var Field = function(field, order) {        this.field = field;        this.sort = 0; // 0 asc, 1 desc        this.order = order;        this.lock = 0; // 0 unlock, 1 lock        this.sortImg = "";        this.lockImg = "";    };    cSort.prototype = {        sortImg : [],        lockImg : [],        delay : 500,        click : function(field, str) {            var sort = this;            if ("db" == str) {                sort.dbclick(field);            } else {                sort.clickTaskId = setTimeout(function() {                    // 有正在执行的排序                    if(sort.curTask != 0)                        return;                    var o = sort.sortList[field];                    // lock状态                    if(o.lock == 1)                        return;                    sort.curTask = 1;                    o.sort = 1 - o.sort;                    //o.lockImg = cSort.sortImg[o.sort];                    sort.sortFunc();                    o.order = sort.curOrder ++;                    sort.curTask = 0;                }, cSort.delay);            }        },        dbclick : function(field) {            var sort = this;            if(sort.curTask != 0)                return;            clearTimeout(sort.clickTaskId);            sort.curTask = 2;            var o = sort.sortList[field];            o.lock = 1 - o.lock;        //  o.lockImg = cSort.lockImg[o.lock];            // 执行排序            sort.sortFunc();            o.order = sort.curOrder ++;            sort.curTask = 0;        },        add : function(field, order) {            var obj = new Field(field, order);            this.sortList[field] = obj;            return this;        },        addDone : function() {            for(key in this.sortList) {                this.curOrder ++;            }        },        setSortFunc : function(func) {            this.sortFunc = func;        },        getSortResult : function() {            var list = this.sortList;            var result = "";            var lastMax = 999999;            var temp;            var temp2;            // 遍历list.length的次数,每次取出剩余中order最大的            for(key in list) {                // 初始化order为最小值                temp = new Field("-1", "-1");                // 依次和list中的元素比较,如果list中的元素的order值小于lastMax(上一次取出的最大值),则赋给temp                for(key2 in list) {                    temp2 = list[key2].order;                    if(temp2 < lastMax && temp2 > temp.order)                        temp = list[key2];                }                // temp是剩余中order最大的元素                lastMax = temp.order;                // 设置返回的字符串格式                result += temp.field + "," + temp.order + "," + temp.lock + ";";            }            return result;        }    }    // ba yin yong gei wai bu bian liang    CC.initSort = function(v) {        return new cSort();    }})();function cprint(info) {    console.log(info);}function demo() {    //<a id="11" onclick="CSORT.click('11')" ondblclick="CSORT.click('11', 'db')">11</a>    var CSORT = CC.initSort();     CSORT.add("11", 1).add("22", 2).add("33", 3).addDone();    CSORT.setSortFunc(function(){});    CSORT.getSortResult(); // 格式:field,order,lock;}
0 0
原创粉丝点击