js与jquery实例-拖动改变列宽和行高
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实例-拖动改变列宽和行高的更多相关文章
- 使用像素单位设置 EXCEL 列宽或行高
在导出 Excel 的时候, 经常要需要给列设置宽度或给行设置高度, 在使用 NPOI 或 EppPlus 等组件进行操作的时候, 列宽和行高的单位都不是像素, 好像是英寸,具体是啥也说不清. 平常在 ...
- DataGridView使用技巧(七、设定列宽和行高自动调整)----.NET
DataGridView使用技巧(七.设定列宽和行高自动调整)----.NET 1) 设定行高和列宽自动调整 [VB.NET]' 设定包括Header和所有单元格的列宽自动调整DataGridView ...
- JQuery 表格拖动调整列宽效果
类似于桌面程序中的表格拖动表头的效果,当鼠标停留在表头边框线上时,鼠标会变成表示左右拖动的形状,接着拖动鼠标,会在表格中出现一条随鼠标移动的竖线,最后放开鼠标,表格列宽会被调整.最近比较空闲,便自己动 ...
- Android中动态设置GridView的列数、列宽和行高
在使用GridView时我们知道,列数是可以通过设计时的属性来设置的,列的宽度则是根据列数和GridView的宽度计算出来的.但是有些时候我们想实现列数是动态改变的效果,即列的宽度保持某个值,列的数量 ...
- DataGridView使用技巧五:自动设定列宽和行高
一.设定行高和列宽自动调整 设定包括Header和所有单元格的列宽自动调整 //设置包括Header和所有单元格的列宽自动调整 this.dgv_PropDemo.AutoSizeColumnsMod ...
- 【Qt开发】QTableWidget设置根据内容调整列宽和行高
QTableWidget要调整表格行宽主要涉及以下一个函数 1.resizeColumnsToContents(); 根据内容调整列宽 ...
- Excel中列宽、行高与像素的换算公式
DPI Scale ColumnWidth RowHeight 72dpi 75% cw=(pix-5)/6 ...
- jquery实现表格可变列宽插件开发
工作中用到了表格的可变列宽,网上看了下,自己也实现了一个,整理贴记录. 测试环境chrome,ie8,firefox jquery版本1.8.2 原理:监听table第一行的mousemove事件,当 ...
- display:table标签来自动改变列宽 改变的同时table的整体宽度跟随变化
发现公司里的所有分页功能都是通过display:talbe来实现的,但是用户最近说要让表格列宽可以拖动:所有我就寻找了好多的办法:网上找了很多的资料,但是都不是我要的效果因为他们都是列宽不改变要不就是 ...
- 三种动态加载js的jquery实例代码另附去除js方法
!-- 这里为你提供了三种动态加载js的jquery实例代码哦,由于jquery是为用户提供方便的,所以利用jquery动态加载文件只要一句话$.getscript("test.js&quo ...
随机推荐
- 数据库SQL(MSSQLSERVER)服务启动错误代码3414
昨天永和客户联系我,说他们的前台系统报错了,给我发了报错的图片.看到错误的第一眼就知道是数据库出问题了,连不上sql Server. 虽然知道是数据库出问题了,但是刚开始的时候没有打开SQL Serv ...
- 无监督多视角行人检测 Unsupervised Multi-view Pedestrian Detection
无监督多视角行人检测 Unsupervised Multi-view Pedestrian Detection 论文url:https://arxiv.org/abs/2305.12457 论文简述 ...
- easyexcel实现导出添加文字水印
引入jar包 由于easyexcel没有引入ooxml-schemas包,所以需要额外添加. <!-- easyexcel依赖 --> <dependency> <gro ...
- leetcode-数组中两元素的最大乘积
题目描述 给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值. 请你计算并返回该式的最大值. 示例 1: 输入:nums ...
- 【有奖互动】开发者版本新特性,你期待哪些更新?#HDC.Together2023#
<hdc.together< span="">>华为开发者大会2023再次启航,将于8月4日~6日在中国松山湖举办,承载万千期待,开启崭新时代.聚焦新版本. ...
- Linux之sudo
[摘要] 生产环境中为了系统的安全性,Linux主机的root权限是只能管理器使用,普通用户不具有root权限,但是可以通过sudo获取root权限执行一些操作. 一.知识要点 wheel组 在Lin ...
- 【Nano Framework ESP32 篇】刷入 nanoCLR 固件以及相关问题
老周在几个世纪前曾写过树莓派相关的 iOT 水文,之所以没写 Nano Framework 相关的内容,是因为那时候这货还不成熟,可玩性不高.不过,这货现在已经相对完善,老周都把它用在项目上了--第一 ...
- 《Effective C#》系列之(四)——最小化内存泄露和资源占用
一.内存泄露 在<Effective C#>这本书中,最小化资源泄漏是其中一章的内容.以下是该章节的一些核心建议,以及使用C#代码示例说明: 及时释放非托管资源:在使用非托管资源时,需要手 ...
- 使用GitHub Actions和GitHub pages实现前端项目的自动打包部署
1. 引言 As we all know,前端部署项目是比较简单的,通常情况下只需要将打包的产物(index.html..js文件..css文件等)放在Web服务器下就,这种叫静态资源托管,成本是比较 ...
- 阿里 Seata 新版本终于解决了 TCC 模式的幂等、悬挂和空回滚问题
简介: 今天来聊一聊阿里巴巴 Seata 新版本(1.5.1)是怎么解决 TCC 模式下的幂等.悬挂和空回滚问题的. 作者:朱晋君 大家好,我是君哥. 今天来聊一聊阿里巴巴 Seata 新版本(1 ...