js与jquery实例-拖动改变列宽和行高

如何通过javascript或者jquery实现改变表格宽度或者行高的功能?今天就把这个功能代码分享给大家,绝对原创哦,代码少而且易懂。先看效果图:

html结构:

html结构:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>table</title>
<script src="./jquery-1.12.4.min.js"></script>
<style>
table th{
cursor:col-resize;
background:rgb(204,215,255);
}
</style>
</head>
<body>
<table id="tb1" cellspacing="0" cellpadding="2" width="100%" border="1">
<tbody>
<tr>
<th>编号</th><th>名称</th><th>英文名</th><th>上线时间</th><th>主要功能</th>
<th>备注</th><th>网址</th><th>大小</th>
</tr>
<tr>
<td>01</td><td>乐之者java</td><td>lzzjava</td><td>2017-08-06</td>
<td>java相关的原创视频与文章</td>
<td>网站</td><td>http://www.roadjava.com/</td><td>-</td>
</tr>
<tr>
<td>02</td><td>乐之者内容管理系统</td><td>lzzcms</td><td>2017-08-06</td><td>cms类软件</td>
<td>软件</td><td>-</td><td>几十兆吧</td>
</tr>
<tr>
<td>01</td><td>乐之者java</td><td>lzzjava</td><td>2017-08-06</td>
<td>java相关的原创视频与文章</td>
<td>网站</td><td>http://www.roadjava.com/</td><td>-</td>
</tr>
<tr>
<td>02</td><td>乐之者内容管理系统</td><td>lzzcms</td><td>2017-08-06</td><td>cms类软件</td>
<td>软件</td><td>-</td><td>几十兆吧</td>
</tr>
</tbody>
</table>
</body>
</html>

JavaScript与jquery代码:

<script>
//js实现改变宽度
var resizeTd;
var table = document.getElementById("tb1");
for (j = 0; j < table.rows[0].cells.length; j++) {
table.rows[0].cells[j].onmousedown = function (e) {
if (this.offsetWidth-e.offsetX< 10) {
resizeTd = this;//保存下要操作的列
resizeTd.initClientX = e.clientX;//保存下鼠标按下时鼠标相对该单元格x方向的偏移
resizeTd.initWidth = resizeTd.offsetWidth;//保存下该单元格的宽度
}
};
table.rows[0].cells[j].onmousemove = function () {//更改鼠标样式
if (this.offsetWidth-event.offsetX<10){
this.style.cursor = 'col-resize';
}else{
this.style.cursor = 'default';
}
};
}
document.onmouseup = function () {//不需要写在上边的for循环里面
resizeTd = null;
};
document.onmousemove = function (evt) {
if(resizeTd){
if(resizeTd.initWidth+(evt.clientX-resizeTd.initClientX)>0){
resizeTd.width=resizeTd.initWidth+(evt.clientX-resizeTd.initClientX);
}
}
}; //jquery实现改变高度
var resizeTr;
$("tr").mousedown(function(e){//鼠标按下时初始化当前要操作的行
if($(this).outerHeight()-e.offsetY<10){
resizeTr=this;
resizeTr.initClientY=e.clientY;
resizeTr.initHeight=$(this).outerHeight();
}
});
$(document).mouseup(function(){//鼠标抬起时置空当前操作的行
resizeTr=null;
});
$("tr").mousemove(function(evt){ //鼠标在接近行底部时改变形状
if($(this).outerHeight()-evt.offsetY<10){
$(this).css("cursor","row-resize");
}else{
$(this).css("cursor","default");
}
});
//如果鼠标移动事件绑定在tr上,当移动过快时会导致tr的高度变化跟不上鼠标的移动变化
$(document).mousemove(function(evt){
if(resizeTr){
if(resizeTr.initHeight+(evt.clientY-resizeTr.initClientY)>0){
$(resizeTr).outerHeight(resizeTr.initHeight+(evt.clientY-resizeTr.initClientY));
}
}
});
</script>

值得指出的几个地方需要注意下:

分清楚几个概念,即事件对象event的x、clientX、pageX、screenX、offsetX(当然y,clientY,pageY,screenY,offsetY类似)以及HtmlElement对象的offsetWidth、offsetHeight、offsetLeft、offsetTop、scrollWidth、scrollHeight、scrollLeft、scrollTop是理解本程序的关键。

mousemove事件在改变宽度或高度的时候不要绑定在tr元素上,要绑定在document上,不然当鼠标移动过快时,宽度或者高度会跟不上鼠标移动的速度,最终不会发生变化。

鼠标变成两条竖线一条横线时可以拖动表格宽度,当宽度太窄导致内容换行时表格整体高度发生变化,但是表格还是占据100%宽度的

js调用方法案例

给你的表格添加id属性    <table id="tb1" border="1" cellspacing="0">   。因为js是通过id获取你的表格元素的。然后将js程序放在js位置下就可以了。

<script>
//js实现改变宽度
var resizeTd;
var table = document.getElementById("tb1");
for (j = 0; j < table.rows[0].cells.length; j++) {
table.rows[0].cells[j].onmousedown = function (e) {
if (this.offsetWidth-e.offsetX< 10) {
resizeTd = this;//保存下要操作的列
resizeTd.initClientX = e.clientX;//保存下鼠标按下时鼠标相对该单元格x方向的偏移
resizeTd.initWidth = resizeTd.offsetWidth;//保存下该单元格的宽度
}
};
table.rows[0].cells[j].onmousemove = function () {//更改鼠标样式
if (this.offsetWidth-event.offsetX<10){
this.style.cursor = 'col-resize';
}else{
this.style.cursor = 'default';
}
};
}
document.onmouseup = function () {//不需要写在上边的for循环里面
resizeTd = null;
};
document.onmousemove = function (evt) {
if(resizeTd){
if(resizeTd.initWidth+(evt.clientX-resizeTd.initClientX)>0){
resizeTd.width=resizeTd.initWidth+(evt.clientX-resizeTd.initClientX);
}
}
}; </script>

原文链接:https://blog.csdn.net/xiaozhuangyumaotao/article/details/105588448

js与jquery实例-拖动改变列宽和行高的更多相关文章

  1. 使用像素单位设置 EXCEL 列宽或行高

    在导出 Excel 的时候, 经常要需要给列设置宽度或给行设置高度, 在使用 NPOI 或 EppPlus 等组件进行操作的时候, 列宽和行高的单位都不是像素, 好像是英寸,具体是啥也说不清. 平常在 ...

  2. DataGridView使用技巧(七、设定列宽和行高自动调整)----.NET

    DataGridView使用技巧(七.设定列宽和行高自动调整)----.NET 1) 设定行高和列宽自动调整 [VB.NET]' 设定包括Header和所有单元格的列宽自动调整DataGridView ...

  3. JQuery 表格拖动调整列宽效果

    类似于桌面程序中的表格拖动表头的效果,当鼠标停留在表头边框线上时,鼠标会变成表示左右拖动的形状,接着拖动鼠标,会在表格中出现一条随鼠标移动的竖线,最后放开鼠标,表格列宽会被调整.最近比较空闲,便自己动 ...

  4. Android中动态设置GridView的列数、列宽和行高

    在使用GridView时我们知道,列数是可以通过设计时的属性来设置的,列的宽度则是根据列数和GridView的宽度计算出来的.但是有些时候我们想实现列数是动态改变的效果,即列的宽度保持某个值,列的数量 ...

  5. DataGridView使用技巧五:自动设定列宽和行高

    一.设定行高和列宽自动调整 设定包括Header和所有单元格的列宽自动调整 //设置包括Header和所有单元格的列宽自动调整 this.dgv_PropDemo.AutoSizeColumnsMod ...

  6. 【Qt开发】QTableWidget设置根据内容调整列宽和行高

    QTableWidget要调整表格行宽主要涉及以下一个函数 1.resizeColumnsToContents();                      根据内容调整列宽            ...

  7. Excel中列宽、行高与像素的换算公式

    DPI             Scale      ColumnWidth             RowHeight 72dpi           75%       cw=(pix-5)/6  ...

  8. jquery实现表格可变列宽插件开发

    工作中用到了表格的可变列宽,网上看了下,自己也实现了一个,整理贴记录. 测试环境chrome,ie8,firefox jquery版本1.8.2 原理:监听table第一行的mousemove事件,当 ...

  9. display:table标签来自动改变列宽 改变的同时table的整体宽度跟随变化

    发现公司里的所有分页功能都是通过display:talbe来实现的,但是用户最近说要让表格列宽可以拖动:所有我就寻找了好多的办法:网上找了很多的资料,但是都不是我要的效果因为他们都是列宽不改变要不就是 ...

  10. 三种动态加载js的jquery实例代码另附去除js方法

    !-- 这里为你提供了三种动态加载js的jquery实例代码哦,由于jquery是为用户提供方便的,所以利用jquery动态加载文件只要一句话$.getscript("test.js&quo ...

随机推荐

  1. HTTP协议安全头部的笔记

    本文于2016年3月完成,发布在个人博客网站上. 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来. 近日项目组对当前开发.维护的Web系统做了AppScan扫描,扫描的结 ...

  2. unknow or unsupported command install

    错误原因: 今天使用pip下载labelimg时,出现了"unknow or unsupported command install"的错误,这是由于电脑有多个pip文件路径所导致 ...

  3. RabbitMQ 10 头部模式

    头部模式是根据头部信息来决定的,在发送的消息中是可以携带一些头部信息的(类似于HTTP),可以根据这些头部信息来决定路由到哪一个消息队列中. 定义配置类. import org.springframe ...

  4. win10上鼠标右键怎么进入cmd

    背景: 在win7上有个很好的功能,在文件夹空白区域,按住 " ctrl + 鼠标右键 " 可以直接打开 cmd 窗口 但是在win10上同样的操作方法,打开的窗口却是 power ...

  5. 7月27日19:30直播预告:HarmonyOS3及华为全场景新品发布会

    7月27日 19:30 HarmonyOS 3 及华为全场景新品发布会 高能来袭! 在HarmonyOS开发者社区企微直播间 一起见证HarmonyOS的又一次智慧进化 扫码预约直播,与您不见不散!

  6. 重新点亮shell————语法[四]

    前言 简单介绍一下语法. 正文 数组: 定义数组: IPTS =(10.0.0.1 10.0.0.2 10.0.0.3) 显示所以数组元素: echo ${IPTS[@]} 显示数组元素的个数 ech ...

  7. seo FAQ 科普

    前言 seo 常规问题整理,后续不断补充,只做科普. 正文 1.什么是seo: seo 也就是搜索排名. 2.百度,360等知名品牌如何排名: 抓取,过滤,建立索引,输出结果 3.是否网站越好看排名就 ...

  8. 集群部署时的分布式 session 如何实现?

    面试官心理分析 面试官问了你一堆 dubbo 是怎么玩儿的,你会玩儿 dubbo 就可以把单块系统弄成分布式系统,然后分布式之后接踵而来的就是一堆问题,最大的问题就是分布式事务.接口幂等性.分布式锁, ...

  9. 力扣633(java&python)-平方数之和(中等)

    题目: 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c . 示例 1: 输入:c = 5输出:true解释:1 * 1 + 2 * 2 = 5示例 2: 输 ...

  10. K8s Ingress Provider 为什么选择 MSE 云原生网关?

    ​简介:在虚拟化时期的微服务架构下,业务通常采用流量网关 + 微服务网关的两层架构,流量网关负责南北向流量调度和安全防护,微服务网关负责东西向流量调度和服务治理,而在容器和 K8s 主导的云原生时代, ...