zoukankan      html  css  js  c++  java
  • table可更改th大小的jQuery插件

    (function ($) {
        $.fn.resizetable = function () {
            var tableObj = $(this);
    
            var inResizeRange = false;          //鼠标移到可调整范围内为true
            var inResizeRangeLClicked = false;  //鼠标在可调整范围内右键按下为true
            var inResizing = false;             //开始调整大小时为true(鼠标在可调整范围内,并按下右键)
            var resizeDiv;      //用来显示当前位置的div
            var nowThObj;       //当前正在调整的th
            var dragDirection;  //0 left, 1 right
    
            //如果可调整大小,需要将talbe宽度设置为固定数字,这样在调整大小后,整个表格的大小也需要调整
            var ths = tableObj.find("th");
            for (var i = 0; i < ths.length; i++) {
                $(ths[i]).width($(ths[i]).width());
            }
            tableObj.css("width", tableObj.width());
    
            tableObj.find("th").mousemove(function (e) {
                //鼠标在TH移动时,如果在边界范围则将鼠标改成可移动图标(边界范围是在边界的左右2px内)
                var pos = $(this).position();
                var width = $(this).width();
                if (!inResizeRange) {
                    if (pos.left + width - 2 <= e.clientX) {
                        $(this).css("cursor", "col-resize");
                        inResizeRange = true;
                        nowThObj = this;
                        dragDirection = 1;
                    }
                    if (e.clientX - 2 <= pos.left + 2) {
                        if (this.cellIndex == 0) return;
                        $(this).css("cursor", "col-resize");
                        inResizeRange = true;
                        nowThObj = this;
                        dragDirection = 0;
                    }
                }
                if (!inResizing) {
                    if (!(pos.left + width - 2 <= e.clientX || e.clientX - 2 <= pos.left + 2)) {
                        $(this).css("cursor", "");
                        inResizeRange = false;
                    }
                }
            }).mousedown(function (e) {
                //在可迁移范围内按下鼠标右键,创建可移动的div
                if (e.button <= 1 && inResizeRange) {
                    inResizeRangeLClicked = true;
                    var pos = $(this).position();
                    createDragDiv(e.clientX, pos.top);
                }
            });
    
            $("body").mousemove(function (e) {
                //移动鼠标,显示当前位置
                if (inResizeRange && inResizeRangeLClicked) {
                    $(this).css("cursor", "col-resize");
                    resizeDiv.css("left", e.clientX);
                }
            }).mouseup(function (e) {
                //鼠标右键弹起,调整TH宽度,并释放资源
                if (e.button <= 1 && inResizeRange) {
                    adjustWidth(e);
                    inResizeRangeLClicked = false;
                    destroy();
                }
            });
    
            //创建显示调整位置的DIV
            function createDragDiv(posLeft, posTop) {
                resizeDiv = $("<div style='position:absolute; 2px; height:50px; background-color:gray;'></div>");
                resizeDiv.appendTo("body").css({ "left": posLeft, "top": posTop });
                inResizing = true;
            }
            //重置各标识变量,释放div
            function destroy() {
                inResizeRange = false;
                inResizeRangeLClicked = false;
                $("body").css("cursor", "");
                resizeDiv.remove();
                inResizing = false;
            }
            //调整TH大小
            function adjustWidth(e) {
                var resizeWidth = 0;
                if (dragDirection == 0) {
                    //left
                    resizeWidth = e.clientX - $(nowThObj).position().left;
                    $(nowThObj).prev("th").width($(nowThObj).prev("th").width() + resizeWidth);
                } else {
                    //right
                    resizeWidth = e.clientX - ($(nowThObj).position().left + $(nowThObj).width());
                    $(nowThObj).width($(nowThObj).width() + resizeWidth);
                }
                tableObj.width(tableObj.width() + resizeWidth);
            }
        };
    })(jQuery)
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
        <script src="jquery-1.9.1.min.js"></script>
        <script src="jquery.resizetable.js"></script>
        <script type="text/javascript">
            $(function () {
                $("#tableTest").resizetable();
            });
        </script>
        <style type="text/css">
            table th,td {
                border: 1px solid black;
            }
            body {
                -moz-user-select: none;
                -webkit-user-select: none;
                user-select: none;
            }
        </style>
    </head>
        <body>
            <table id="tableTest" cellpadding="0" cellspacing="0" style="border-collapse:collapse; 100%;">
                <tr>
                    <th>列1</th>
                    <th>列2</th>
                    <th>列3</th>
                </tr>
                <tr>
                    <td>cell 1</td>
                    <td>cell 2</td>
                    <td>cell 3</td>
                </tr>
            </table>
        </body>
    </html>
  • 相关阅读:
    thinkphp3.2升级至thinkphp5.0.24
    matlab从曲线图提取数据
    Pandorabox(Openwrt) 双宽带(WAN) 叠加网络实战
    大数据挖掘复习小记
    j2ee课程设计—基于activiti的请休假系统
    算法与数据结构第八次作业——散列表
    算法与数据结构——AVL树(平衡二叉树)
    算法与数据结构第六、七次作业——树
    算法与数据结构第六次作业——排序
    算法与数据结构——排序
  • 原文地址:https://www.cnblogs.com/wileywong/p/4211206.html
Copyright © 2011-2022 走看看