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 ...
随机推荐
- 使用OHOS SDK构建lz4
参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://github.com/lz4/lz4.git ...
- SkipList和java中ConcurrentSkipListMap的实现
目录 简介 SkipList ConcurrentSkipListMap SkipList的实现 concurrent的实现 总结 SkipList和java中ConcurrentSkipListMa ...
- JDK10的新特性:本地变量类型var
目录 简介 为什么我们需要var var使用在什么地方 var不能用在什么地方 其他var的特点 总结 简介 java以面向对象的特性显著于世并得到了蓬勃的发展.在语言的发展过程中,为了让java语言 ...
- 上传文件附件时判断word、excel、txt等是否含有敏感词如身份证号,手机号等
上传附件判断word.excel.txt等文档中是否含有敏感词如身份证号,手机号等,其它检测如PDF,图片(OCR)等可以自行扩展. 互联网项目中,展示的数据中不能包含个人信息等敏感信息.判断word ...
- 【Kotlin】List、Set、Map简介
1 List Java 的 List.Set.Map 介绍见 → Java容器及其常用方法汇总. 1.1 创建 List 1.1.1 emptyList var list = emptyList& ...
- openGauss3.1.0企业版HA环境部署测试
前言 openGauss 是华为开源的一款高性能关系型数据库,这两年感觉 pg 系的数据库在国内慢慢火起来了,pg 的操作还是跟 mysql 和 oracle 略有差距,还得慢慢学,先从部署开始吧.对 ...
- 看不懂来打我,vue3如何将template编译成render函数
前言 在之前的 通过debug搞清楚.vue文件怎么变成.js文件 文章中我们讲过了vue文件是如何编译成js文件,通过那篇文章我们知道了,template编译为render函数底层就是调用了@vue ...
- HarmonyOS课程体验官招募(第四期),寻找乐于分享,精益求精的伙伴
华为开发者联盟HarmonyOS课程体验官(第四期)活动,开始招募啦! 如果你精益求精.乐于分享:如果你愿意为学堂课程优化改进出谋划策,那就快来加入我们吧!学堂期待与你共同成长.一起进步! [活动 ...
- 如何基于Django中的WebSockets和异步视图来实现实时通信功能
本文分享自华为云社区<结合Django中的WebSockets和异步视图实现实时通信功能的完整指南>,作者: 柠檬味拥抱. 在现代Web应用程序中,实时通信已经成为了必不可少的功能之一.无 ...
- 第 7章 Python 爬虫框架 Scrapy(上)
第 7章 Python 爬虫框架 Scrapy(上) 编写爬虫可以看成行军打仗,基本的角色有两个:士兵和将军,士兵冲锋陷阵,而将军更多地是调兵遣将.框架就像一个将军,里面包含了爬虫的全部流程.异常处理 ...