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; width: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; width: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>
时间: 2024-11-08 07:13:13

table可更改th大小的jQuery插件的相关文章

JQuery插件之Jquery.datatables.js用法及api

1.DataTables的默认配置 $(document).ready(function() { $('#example').dataTable(); } ); 示例:http://www.guoxk.com/html/DataTables/Zero-configuration.html 2.DataTables的一些基础属性配置 "bPaginate": true, //翻页功能 "bLengthChange": true, //改变每页显示数据数量 "

基于Jquery插件Uploadify实现实时显示进度条上传图片

网址:http://www.jb51.net/article/83811.htm 这篇文章主要介绍了基于Jquery插件Uploadify实现实时显示进度条上传图片的相关资料,感兴趣的小伙伴们可以参考一下 先了解了解Uploadify,具体内容如下 Uploadify是一个简单易用的多文件上传方案.作为一个Jquery插件,Uploadify使用简单,并具有高度的定制性. Uploadify特性: Uploadify简单说来,是基于Jquery的一款文件上传插件.它的功能特色总结如下: 1).支

15个使用的jquery插件介绍

在这篇文章中,我们整理最新的15个jQuery插件, 它们都非常优秀.根据下面提到的这些jQuery插件,你可以在很多地方提高和优化Web应用的性能. 我们希望你能从中找到对你有帮助的插件,如果你也知道很多jQuery的最新资源,可以在评论中告诉我们,和大家一起分享. 1.jQuery.fblogin jQuery.fblogin,顾名思义,它是一个用jQuery实现的Facebook登录插件,你需要申请一个Facebook应用的id,然后添加Facebook JS SDK,通过这个插件来加载S

2014年七月最佳jQuery插件荟萃

本月的jQuery插件荟萃我们将介绍几款非常不错的jQuery插件,涵盖了表单,幻灯,页面设计等等方面,相信大家肯定会喜欢! Select or Die 一款帮助开发者美化并且强化选择框的jQuery插件 jPList 可 以非常灵活帮助开发人员生成可过滤,分页和排序的HTML结构.支持数据源:PHP+mysql,ASP.net +SQL,PHP+SQLite.可以和知名的javascript模板,例如,handlebars,Mustache等等配合工作.支持所有的主流浏 览器.非商业项目,个人

教你开发jQuery插件(转)

原文:http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html 要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈. 学会使用jQuery并不难,因为它简单易学,并且相信你接触jQuery后肯定也使用或熟悉了不少其插件.如果要将能力上升一个台阶,编写一个属于自己的插件是个不错的选择. 本教

15个超级实用的jQuery插件

jQuery是一个可订制的.轻量级的前端开发框架,它会让你的前端开发拥有无限的可能性.它会在敏捷Web开发中帮你做很多事情,比如简化HTML文档的解析.事件处理.动画效果和Ajax交互.实践上jQuery已经成为了新一代的标准. 在这篇文章中,我们整理了9月份以来最新的15个jQuery插件, 它们都非常优秀.根据下面提到的这些jQuery插件,你可以在很多地方提高和优化Web应用的性能. 我们希望你能从中找到对你有帮助的插件,如果你也知道很多jQuery的最新资源,可以在评论中告诉我们,和大家

自己动手丰衣足食之征服jQuery插件编写

原文地址:http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html 要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈. 学会使用jQuery并不难,因为它简单易学,并且相信你接触jQuery后肯定也使用或熟悉了不少其插件.如果要将能力上升一个台阶,编写一个属于自己的插件是个不错的选择.

优化Web性能的15个jQuery插件

jQuery是一个可订制的.轻量级的前端开发框架,它会让你的前端开发拥有无限的可能性.它会在敏捷Web开发中帮你做很多事情,比如简化HTML文档的解析.事件处理.动画效果和Ajax交互.实践上jQuery已经成为了新一代的标准. 在这篇文章中,我们整理了9月份以来最新的15个jQuery插件, 它们都非常优秀.根据下面提到的这些jQuery插件,你可以在很多地方提高和优化Web应用的性能. 我们希望你能从中找到对你有帮助的插件,如果你也知道很多jQuery的最新资源,可以在评论中告诉我们,和大家

【转】教你开发jQuery插件

阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原文:http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html 要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈. 学会使用j