display:table标签来自动改变列宽 改变的同时table的整体宽度跟随变化
发现公司里的所有分页功能都是通过display:talbe来实现的,但是用户最近说要让表格列宽可以拖动;所有我就寻找了好多的办法;网上找了很多的资料,但是都不是我要的效果因为他们都是列宽不改变要不就是我看不懂!
工程源码下载
function TableAuto(divId){
var cellIndex=-1; //记录所作用的列索引
var preWidth=0; //记录列的原宽
var preX=0; //记录鼠标的原屏幕x坐标
var preLeft=0; //记录辅助线的初始位置
var currentTitleCell=null; //当前改变列宽的列的标题单元格
var doTitleCellClick=null; //用于暂存标题行click响应行数
var table = null;//表格对象
var titleCells = null;//获取标题行
//辅助线对象
var scale = document.createElement("div");
scale.style.cssText="border-left:dotted 1px #000;z-index:101;position:absolute;left:-1;width:0;";
document.body.appendChild(scale);
//函数:计算元素的绝对位置
function getAbsPos(e){
var rect = e.getBoundingClientRect()
var body = document.body;
return { left:rect.left+body.scrollLeft,top:(rect.top+body.scrollTop) };
}
//函数:改变列宽 (响应辅助线的 onmousemove 事件)
function changeColWidth(){
var evt = arguments.length==0 ? event : arguments[0];
var newX = evt.screenX;
var newWidth = preWidth+newX-preX;
if(newWidth<8) newWidth=8;
else scale.style.left=preLeft+newX-preX;
}
//函数:改变列宽 (响应辅助线 onmouseup 事件)
function changeColWidthStop(){
scale.releaseCapture();
scale.onmousemove = null;
scale.onmouseup = null;
scale.style.left=-1;
var evt = arguments.length==0 ? event : arguments[0];
var newX = evt.screenX;//鼠标现在坐标
var mLong = newX-preX;//鼠标移动距离
var tdNewWidth = mLong+preWidth;//调整后单元格宽度
if(tdNewWidth<8) tdNewWidth=8;
var tableNewWidth=eval($('#'+divId).width()-preWidth+tdNewWidth);//表格宽度=原始宽度表格宽度-单元格原始宽度+单元格现在宽度
var trs = table.getElementsByTagName("tr");
$('#'+divId).width(tableNewWidth);//调整表格宽度
//for ( var j = 0; j < trs.length; j++) {//调整列宽
trs[0].cells[cellIndex].width =tdNewWidth;
//}
}
//函数:改变列宽 (响应标题行单元格的 onmousedown 事件)
function doMouseDown(){
var evt = arguments.length==0 ? event : arguments[0];
preX = evt.screenX;
var pos = getAbsPos(this);
preLeft = pos.left+this.offsetWidth;
scale.style.left=preLeft-2;
scale.style.top = pos.top-2;
scale.style.height=table.offsetHeight-4;
scale.setCapture();
scale.onmousemove = changeColWidth;
scale.onmouseup = changeColWidthStop;
cellIndex = this.cellIndex;
preWidth = this.offsetWidth;
}
//函数:响应标题单元格 mousemove 事件
function doTitleCellMousemove(){
var evt = arguments.length==0 ? event : arguments[0];
if(this.offsetWidth-evt.offsetX<10){//单元格的宽-鼠标在单元格的水平坐标
this.style.cursor="col-resize";
this.onmousedown=doMouseDown;
}else{
this.style.cursor="";
this.onmousedown=null;
}
}
//添加控制元素的代码
function applyCtrl(tableId){
table = document.getElementById(tableId);//获取表格
table.getElementsByTagName("tr")[0].className="scrollColThead";
//获取标题行
titleCells = table.getElementsByTagName("tr")[0].cells;
//给每个标题行单元格绑顶 onmousemoce 事件处理函数
for(var i=1;i<titleCells.length;i++){
titleCells[i].onmousemove=doTitleCellMousemove;
}
}
//此处为表格添加控制元素。
applyCtrl(divId);
}
display:table标签来自动改变列宽 改变的同时table的整体宽度跟随变化的更多相关文章
- Qt5 QTableWidget设置列表自动适应列宽
//设置自动适应列宽 ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
- JS可改变列宽table
<!DOCTYPE HTML> <html> <head> <meta charset="gbk"> <title>ta ...
- DataGridView使用技巧五:自动设定列宽和行高
一.设定行高和列宽自动调整 设定包括Header和所有单元格的列宽自动调整 //设置包括Header和所有单元格的列宽自动调整 this.dgv_PropDemo.AutoSizeColumnsMod ...
- Bootstrap Blazor 组件介绍 Table (一)自动生成列功能介绍
Bootstrap Blazor 是一套企业级 UI 组件库,适配移动端支持各种主流浏览器,已经在多个交付项目中使用.通过本套组件可以大大缩短开发周期,节约开发成本.目前已经开发.封装了 70 多个组 ...
- Bootstrap Table列宽拖动的方法
在之前做过的一个web项目中,前端表格是基于jQuery和Bootstrap Table实现的,要求能利用拖动改变列宽,现将实现的过程记录如下: 1. Bootstrap Table可拖动,需要用到它 ...
- 动态改变EasyUI grid 列宽和隐藏列
隐藏显示 $('#yourGrid').datagrid('hideColumn','yourColumn'); $('#yourGrid').datagrid('hideColumn','yourC ...
- JQuery 表格拖动调整列宽效果
类似于桌面程序中的表格拖动表头的效果,当鼠标停留在表头边框线上时,鼠标会变成表示左右拖动的形状,接着拖动鼠标,会在表格中出现一条随鼠标移动的竖线,最后放开鼠标,表格列宽会被调整.最近比较空闲,便自己动 ...
- jquery实现表格可变列宽插件开发
工作中用到了表格的可变列宽,网上看了下,自己也实现了一个,整理贴记录. 测试环境chrome,ie8,firefox jquery版本1.8.2 原理:监听table第一行的mousemove事件,当 ...
- table标签用法
<table>标签 HTML中表格由 <table> 标签来定义. 每个表格均有若干行(由 <tr> 标签定义),每行被分割为若干单元格(由 <td> ...
随机推荐
- less的学习(css)
因为新公司需要用less来写样式,对于用惯了css的我来说还是觉得有点麻烦 但是呢,都是有个过程嘛,学习必须走起嘛. 写到半中央发现一个写的特别好的less帖子,就不写. http://www.w3c ...
- Jdbc初体验
Java数据库连接(JDBC)由一组用 Java 编程语言编写的类和接口组成.JDBC 为工具/数据库开发人员提供了一个标准的 API,使他们能够用纯Java API 来编写数据库应用程序.然而各个开 ...
- poj 3378 Crazy Thairs dp+线段树+大数
题目链接 题目大意: 给出n个数, 让你求出有多少个5元组满足 i < j < k < l < m并且ai < aj < ak < al < am 我们 ...
- linux shell 札记
shell 数组 数组索引: 单个元素索引: ${array[n]} 全部元素: ${array[*]} 或者 ${array[@]} 部分索引: ${array[2:]} 数组所有元素统一加 ...
- UDP聊天实现(简单版)
两者代码基本一致 关于套接字: 甲方: #include <stdio.h> #include <string.h> #include <netinet/in.h> ...
- J2SE知识点摘记(二十五)
Set 1.5.1 概述 Java 中的Set和正好和数学上直观的集(set)的概念是相同的.Set最大的特性就是不允许在其中存放的元素是重复的.根据这个特点,我们就可以使用Set 这个 ...
- 电池和Adapter切换电路改进实验
目的:很多单电池的机器在大负载的情况下,如把背光开到最亮,运行3D游戏,此时拔DC电源很容易出现机器死机,或花屏现象: 原因:Q5的导通时间不够,希望通过G极的快速放电,加快到导通时间: 修改前的电路 ...
- delphi 7中使用idhttp抓取网页 解决假死现象
在delphi 7中使用idhttp抓取网页,造成窗口无反应的假死状态.通过搜索获得两种方法. 1.写在线程中,但是调用比较麻烦 2.使用delphi 提供的idantifreeze(必须安装indy ...
- iOS开发之主题皮肤
iOS开发之主题皮肤 分类: [iOS] 最近在开发一款[公交应用],里面有个模块涉及到主题设置,这篇文章主要谈一下个人的做法. 大概的步骤如下: (1):整个应用依赖于一个主题管理器,主题管理器根 ...
- poj2656---求一列数中最大数的序数而且在前面输入的更优先
#include<stdio.h> #include<stdlib.h> int main() { int n,i; while(scanf("%d",&a ...