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. 玩转OpenHarmony智能家居:如何实现树莓派“碰一碰”设备控制

    一.简介 "碰一碰"设备控制,依托NFC短距通信协议,通过碰一碰的交互方式,将OpenAtom OpenHarmony(简称"OpenHarmony")标准系统 ...

  2. 实践指南:EdgeOne与HAI的梦幻联动

    在当今快速发展的数字时代,安全和速度已成为网络服务的基石.EdgeOne,作为腾讯云提供的边缘安全加速平台,以其全球部署的节点和强大的安全防护功能,为用户提供了稳定而高效的网络体验.而HAI(Hype ...

  3. Mac系统,Qt工程转xcode工程,打包pkg

    序言: 程序使用Qt开发,程序主要功能是调用摄像头.需要打包成pkg给到用户安装,打包用到的是xcode. 实际操作: 一.Qt工程转xcode工程 // 打开终端,cd到项目根目录(CamScan. ...

  4. Python删除文件、文件夹----os

    使用 os  删除文件 import os '''删除文件 语法: os.unlink(path) 示例: 删除 b 文件夹中的 12.txt ''' os.unlink('b/12.txt')   ...

  5. 【译】新的 MSBuild 编辑体验

    MSBuild 是 .NET 开发体验的基本组成部分,但它对新手和有经验的开发人员都具有挑战性.为了帮助开发人员更好地理解他们的项目文件,并访问需要直接编辑项目文件的高级功能,我们发布了一个实验性的 ...

  6. ArkUI新能力,助力应用开发更便捷

    原文链接:https://mp.weixin.qq.com/s/TAuq1WC6435ebn6L61rZAA,点击链接查看更多技术内容:    ArkUI是一套构建分布式应用的声明式UI开发框架.它具 ...

  7. docker 应用篇————容器卷[十一]

    前言 简单介绍一下容器卷. 正文 我们发现一个文件,就是什么呢? 就是说因为我们的容器一但删除那么什么都没有了. 那么如何能够不删除呢?那么可以使用容器卷. 比如说系统我们容器内的/usr 使用我们的 ...

  8. 学Windows批处理第一天:使用批处理命令生成一个文件并写入内容

    脚本功能:1.生成一个文件,文件名格式为:yyyymmddhhmmss 2.文件中写入一段文本 操作步骤:1.新建一个文本文档(txt格式) 2.修改文件名为任意名称(我的叫create_file), ...

  9. css添加属性,让浏览器检查无法选中元素

    1.表现 浏览器直接选中元素的时候,仅能直接选中整个body,想要找到具体元素,需要自己手动寻找,没太大实际作用,仅仅让不懂的人不能简简单单的直接定位元素然后修改里面的内容 pointer-event ...

  10. 力扣1082(MySQL)-销售分析Ⅰ(简单)

    题目: 产品表:Product 销售表:Sales 编写一个 SQL 查询,查询总销售额最高的销售者,如果有并列的,就都展示出来. 以 任意顺序 返回结果表. 查询结果格式如下所示. Product ...