zoukankan      html  css  js  c++  java
  • JQuery grid拖动列宽

    初稿请大家多多指点。

    IE8,Firefox,chrome下测试的。

    主要Javascript代码 :

    ////////////////////////////////////////////////////////////////////////////
    //
    jQueryGrid
    (function($) {
        $.fn.grid 
    = function(config){
            
    if (this.attr("tagName"== "TABLE"){
                
    return create.tableToGrid(this);
            }
    else if (config.store && config.columns){
                
    if (!config.dataType){
                    config.dataType 
    = "JSON";
                };
                
    if (config.dataType.toUpperCase() == "JSON") {
                    
    return create.jsonToGrid(this, config);
                }
                
    else if (config.dataType.toUpperCase() == "XML") {
                    
    return create.xmlToGrid(this, config);
                }
            };
        };
        
        
    var create = {
            ui: 
    function(jQueryGrid){
                
    var down = false;
                
    var canMove = false;
                
    var downCell = null;
                
    var minLeft = 0;
                jQueryGrid.find(
    ".header li").each(function(){
                    $(
    this).mousemove(function(e){
                        
    if(e.pageX-$(this).offset().left-$(this).width()>-2){
                            $(
    this).css("cursor",typeof(air)=="undefined"?"w-resize":"move");
                            canMove 
    = true;
                        }
    else{
                            
    if(!down){
                                $(
    this).css("cursor","default");
                                canMove 
    = false;
                            }
                        }
                    }).mousedown(
    function(e){
                        
    if (canMove) {
                            divDragLine.show();
                            divDragLine.css(
    "left", e.pageX);
                            down 
    = true;
                            downCell 
    = $(this);
                            minLeft 
    = downCell.offset().left+20;
                            
                            divDragLine2.show();
                            divDragLine2.css(
    "left", downCell.offset().left);
                        }
                    });
                });
                
                jQueryGrid.mousemove(
    function(e){
                    
    if (down) {
                        
    if (minLeft < e.pageX) {
                            divDragLine.css(
    "left", e.pageX);
                        }
    else {
                            divDragLine.css(
    "left", minLeft);
                        }
                    }
                }).mouseup(
    function(e){
                    
    if (down) {
                        $(
    this).css("cursor""default");
                        divDragLine.hide();
                        divDragLine2.hide();
                        down 
    = false;
                        canMove 
    = false;
                        
    //alert(divDragLine.css("left"));
                        var width = minLeft - downCell.offset().left;
                        
    if (minLeft < e.pageX) {
                            width 
    = e.pageX - downCell.offset().left;
                        }
                        jQueryGrid.find(
    "li[index=" + downCell.attr("index"+ "]").css("width", width);

                        
    var width = 0;
                        jQueryGrid.find(
    ".header li").each(function(){
                            width 
    += $(this).attr("offsetWidth");
                        });

                        
    if (width < jQueryGrid.attr("offsetWidth")){
                            width 
    = jQueryGrid.attr("offsetWidth")-2;
                        }
                        
                        jQueryGrid.find(
    "ul").each(function(){
                            $(
    this).css("width",width);
                        });
                    }
                });
                
                jQueryGrid.find(
    "ul:gt(0)").each(function(){
                    $(
    this).mouseover(function(){
                        
    if (!$(this).hasClass("row-selected")) {
                            $(
    this).addClass("row-over");
                        }
                    }).mouseout(
    function(){
                        $(
    this).removeClass("row-over");
                    }).dblclick(
    function(){
                        jQueryGrid.find(
    ".row-selected").removeClass("row-selected");
                        $(
    this).addClass("row-selected").removeClass("row-over");
                        
                        
    var rowData = {};
                        
    if (jQueryGrid.store){
                            rowData 
    =     jQueryGrid.store[$(this).attr("index")];
                        }
                        jQueryGrid.trigger(
    "rowdblclick",[$(this),rowData]);
                    });
                });
                
                
    var divDragLine = jQueryGrid.find(".divDragLine");
                
    var divDragLine2 = jQueryGrid.find(".divDragLine2");
                divDragLine.css(
    "height",jQueryGrid.height()-25).hide();
                divDragLine2.css(
    "height",jQueryGrid.height()-25).hide();
            },
            
    //把普通的table转换为jQueryGrid
            tableToGrid: function(table){
                
    var colIndex = 0;
                
    var rows = table.find("tr:eq(0)");
                
    var html = [];
                html.push(
    "<div class='divDragLine'></div><div class='divDragLine2'></div><ul class='header'>");
                rows.children().each(
    function(){
                    html.push(
    "<li style='"+$(this).width()+"px;' index='"+(colIndex++)+"'>"+$(this).html()+"</li>");
                });
                html.push(
    "</ul>");
                
                rows 
    = table.find("tr:gt(0)");
                
    var row_alt = "row-alt";
                rows.each(
    function(){
                    
    if (row_alt){
                        row_alt 
    = "";
                    }
    else{
                        row_alt 
    = "row-alt";
                    }
                    html.push(
    "<ul class='row "+row_alt+"'>");
                    colIndex 
    = 0;
                    
    var cells = $(this).children().each(function(){
                        html.push(
    "<li style='"+$(this).width()+"px;' index='"+(colIndex++)+"'>"+$(this).html()+"</li>");
                    });
                    html.push(
    "</ul>");
                });
                

                table.wrap(
    "<div class='jQueryGrid'></div>");
                
                
    var jQueryGrid = table.parent();
                jQueryGrid.html(html.join(
    ""));
                
    this.ui(jQueryGrid);
                
                
    return jQueryGrid;
            },
            
    //把json数据源转换为jQueryGrid
            jsonToGrid: function(appendTo,config){
                
    if (appendTo.find(".jQueryGrid").length == 0) {
                    $(
    "<div class='jQueryGrid'></div>").appendTo(appendTo);
                };
                
    var jQueryGrid = appendTo.find(".jQueryGrid");
                
                
    var colIndex = 0;
                
    var html = ["<div class='divDragLine'></div><div class='divDragLine2'></div><ul class='header'>"];
                
    var storeLen = config.store?config.store.length:0;
                
    var columnsLen = config.columns.length;
                
    for(var c = 0; c < columnsLen; c++){
                    
    var column = config.columns[c];
                    html.push(
    "<li style='");
                    
    if (column.hidden){
                        html.push(
    "display:none;");
                    };
                    
    if (column.width){
                        html.push(
    ""+column.width+"px;");
                    };
                    html.push(
    "'  index='"+(colIndex++)+"' >"+column.header+"</li>");
                }
                html.push(
    "</ul>");
                
                
    var row_alt = "row-alt";
                
    for(var i = 0; i < storeLen; i++){
                    
    if (row_alt){
                        row_alt 
    = "";
                    }
    else{
                        row_alt 
    = "row-alt";
                    }
                    html.push(
    "<ul  class='row "+row_alt+"'  index='"+i+"'>");
                    colIndex 
    = 0;
                    
    var row = config.store[i];
                    
    for(var c = 0; c < columnsLen; c++){
                        
    var column = config.columns[c];
                        
                        html.push(
    "<li style='");
                        
    if (column.hidden){
                            html.push(
    "display:none;");
                        };
                        
    if (column.width){
                            html.push(
    ""+column.width+"px;");
                        };
                        
                        
    var value = row[column.dataIndex];
                        
    if (typeof(column.renderer) == "function"){
                            value 
    = column.renderer(value,row,i);
                        };
        
                        html.push(
    "'  index='"+(colIndex++)+"' >"+value+"</li>");
                    }
                    html.push(
    "</ul>");
                }
                jQueryGrid.html(html.join(
    ""));
                jQueryGrid.store 
    = config.store;
                
    this.ui(jQueryGrid);
                
                
    return jQueryGrid;
            },
            
    //把xml数据源转换为jQueryGrid
            xmlToGrid: function(appendTo, config){
                
            }
        };

    })(jQuery);

    附件下载:jQueryGrid.rar 

  • 相关阅读:
    【Unity游戏开发】Android6.0以上的动态权限申请问题
    【游戏开发】网络编程之浅谈TCP粘包、拆包问题及其解决方案
    【Unity游戏开发】你真的了解UGUI中的IPointerClickHandler吗?
    【Unity游戏开发】记一次解决 LuaFunction has been disposed 的bug的过程
    【年终总结】马三北漂记之8102年总结
    【小白学Lua】之Lua变长参数和unpack函数
    【计算机图形学】计算机图形学中的坐标系统
    【Unity游戏开发】tolua之wrap文件的原理与使用
    【游戏开发】基于VS2017的OpenGL开发环境搭建
    【Unity游戏开发】用C#和Lua实现Unity中的事件分发机制EventDispatcher
  • 原文地址:https://www.cnblogs.com/OwenWu/p/2079973.html
Copyright © 2011-2022 走看看