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> ...
随机推荐
- navigator.geolocation例子
navigator.geolocation例子 <html> <head> <script type="text/javascript"> fu ...
- 对原生js的一些小尝试
意图仿造JQ操作以及弄个个人工具箱,不断完善中,代码均为个人摸索,所以肯定会有不少不足的地方,希望读者们能提出来. var xzhUtils = { //-----DOM对象添加类----- //-- ...
- Get请求出现乱码的解决方案
Get请求出现乱码,模拟一般出现的场景.场景一:超链接<a href=”url?name=张三&age=18”>场景二:window.opon(“url?name=张三&a ...
- 强大的DELPHI RTTI–兼谈需要了解多种开发语言
一月 27th, 2005 by 猛禽 风焱在<“18般武艺”?>中说到他碰上的被多种语言纠缠的问题.我在回复里说: 很多语言只要能看懂几分就行了,没必要每一种都精通 但是如果只会很少的一 ...
- centos6.5vpn搭建
centos6.5vpn搭建整个搭建流程,服务端,客户端安装及测试. 达到的效果: 在安装vpn客户端的机器可通过vpn(virtual private network)专用线路(vpn主配置文件中定 ...
- rgbdslam_v2安装并使用
rgbdslam_v2安装并使用 此文档为原创,转载请注明来自CSDN Jasmine_shine的专栏 网址:http://blog.csdn.net/jasmine_shine/article/d ...
- Android的应用程序的异常处理2
1.自定义一个类(MaApp)继承Application 2.在清单文件中的Application选项菜单对应的name属性中添加MyApp 3.重写application中的onCreate方法 4 ...
- oracle 快照(snapshot) 管理
----手工创建oracle 快照 BEGIN DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT (); END; / ---删除快照 详细快照信息能够查看视图 ...
- PPT插件 用js制作PPT
https://github.com/bartaz/impress.js/ deck.js
- HTML5实现图片选择并预览
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...