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. OpenCV一句话将彩色图片(Mat)转换为灰度

    auto in_gray=cv::imdecode(in, cv::IMREAD_GRAYSCALE);

  2. Viu联合华为HMS生态,共创影音娱乐新体验

    华为HMS生态携手流媒体平台Viu,为海外消费者打造精品移动娱乐应用体验,并助力提升流量变现能力.Viu在中东非.东南亚等16个国家及地区提供广告合作和付费会员服务,支持优质视频内容高清点播和直播.自 ...

  3. Python生成测试数据--Faker的使用方法

    # 官方文档:https://faker.readthedocs.io/en/master/index.html # 安装:pip install Faker from faker import Fa ...

  4. HTC Vive之Unity3d开发日记——手柄交互编程

    目录:        HTC Vive之Unity3d开发日记 You can fool all the people some of the time,and some of the people ...

  5. 抓包整理————tcp 三次握手性能优化[十]

    前言 tcp 三次握手性能优化. 正文 服务器三次握手流程示例: 下面就是3次握手的过程: 知道这个有什么用呢? 我举一个我使用到的例子哈. 比如有很多 tcp 连接到一台机器上机器上,那么tcp_m ...

  6. PeLK:101 x 101 的超大卷积网络,同参数量下反超 ViT | CVPR 2024

    最近,有一些大型内核卷积网络的研究,但考虑到卷积的平方复杂度,扩大内核会带来大量的参数,继而引发严重的优化问题.受人类视觉的启发,论文提出了外围卷积,通过参数共享将卷积的复杂性从 \(O(K^{2}) ...

  7. 提质增效,安全灵活,阿里云EDA上云方案让芯片设计驶入高速路

    简介: 今天下午14点,直播间等你 导语:随着芯片工艺的跃升,EDA 需要越来越大的计算能力,处理高达PB级的海量数据.传统的算力交付模式已无法跟上快速发展的芯片设计行业,云的快速交付与强大生态提供了 ...

  8. 从 2018 年 Nacos 开源说起

    2018 年夏天 国内微服务开源 领域,迎来了一位新成员.此后,在构建微服务注册中心和配置中心的过程中,国内开发者多了一个可信赖的选项. Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务 ...

  9. Istio 从懵圈到熟练:二分之一活的微服务

    作者 | 声东  阿里云售后技术专家 <关注阿里巴巴云原生公众号,回复 排查 即可下载电子书> <深入浅出 Kubernetes>一书共汇集 12 篇技术文章,帮助你一次搞懂 ...

  10. NBF事件中心架构设计与实现

    ​简介:NBF是阿里巴巴供应链中台的基础技术团队打造的一个技术PaaS平台,她提供了微服务FaaS框架,低代码平台和中台基础设施等一系列的PaaS产品,旨在帮助业务伙伴快速复用和扩展中台能力,提升研发 ...