用鼠标调整表格列的大小
Resize table columns with mouse
我正在编写一个脚本,允许客户端用鼠标拖动表单元格边界并调整表中列的大小。到目前为止,我在Firefox中有一个工作模型,但在宽度测量方面存在一个缺陷,当变化变大时,鼠标会不同步。更糟糕的是,脚本在其他浏览器(opera、safari)中失败,甚至我在Firefox中更改了浏览器缩放。
function doDrag() {document.body.style.cursor='crosshair';}
function noDrag() {document.body.style.cursor='auto';}
var xpos=0;
var sz=0;
var dragObj = {};
function resizeOn(el)
{
dragObj = document.getElementById(el);
document.addEventListener("mousemove",resize, true);
document.addEventListener("mouseup",resizeOff, true);
}
function resize(ev)
{
if(xpos == 0) {xpos=ev.clientX;}
if(xpos != ev.clientX)
{
sz = dragObj.offsetWidth + (ev.clientX - xpos);
dragObj.style.width = sz - 10 + "px";
alert("size="+sz+" offsetwidth="+dragObj.offsetWidth);
if(dragObj.offsetWidth != sz)
{
resizeOff();
return false;
}
xpos=ev.clientX;
}
}
function resizeOff()
{
xpos = 0;
document.removeEventListener("mousemove",resize, true);
document.removeEventListener("mouseup",resizeOff, true);
}
HTML看起来像:
<th id="col0" class="edit">client</th>
<th class="drag" onmouseover="doDrag()" onmouseout="noDrag()" onmousedown="resizeOn('col0')"></th>
第二个单元格显示为第一个单元格的右边缘。
我认为问题是dragObj.style.width=sz-10。-10完全是通过反复试验得出的。我怀疑这是单元格的实际宽度(包括边框、填充等)和偏移宽度之间的差异。根据我的css,它实际上应该是10用于填充+1用于左边框=11px。要么是我的固定填充/边框没有保持固定,要么是在元素的offsetWidth和实际with之间有其他css属性。有没有办法在不考虑浏览器缩放的情况下获得元素的实际宽度?
查看www.quicksmode.org和/或http://help.dottoro.com.确认目标浏览器是否支持这些属性。他们还评论了缩放如何影响offsetX等。
此外,您应该注意到ev.clientX在IE中已被最近的补丁(KB2846071)破坏。如果安装了修补程序,clientX将返回一个无意义的结果。希望微软能为他们的补丁发布一个补丁!
相关文章:
- d3将鼠标悬停在表格上时,制作图表动画
- 将鼠标悬停在表格单元格 HTML JavaScript 上时的弹出窗口
- 在表格单元格上设置鼠标悬停
- 更改表格的边框和背景颜色并将鼠标悬停在它们上面
- 表格单元格中的显示按钮将鼠标悬停在/鼠标上方
- 如何在鼠标悬停和鼠标出出时增加选择元素的大小时固定表格的位置
- 鼠标单击时表格颜色发生变化
- 当鼠标悬停在表格标题上时,工具提示宽度将被隐藏
- 用鼠标调整表格列的大小
- 鼠标悬停时高亮显示表格行
- 鼠标拖动时高亮显示单行的表格单元格
- 如何在将鼠标悬停在另一个链接上时更改表格背景图像
- 用鼠标拖动选择对角线的表格单元格
- 使用Javascript在鼠标点击时改变表格单元格的颜色
- 当鼠标悬停在表格上时,复选框会向左移动
- 使用JQuery获取鼠标悬停时动态填充的表格单元格的背景颜色
- 如果用户将鼠标悬停在表格中,如何删除按钮
- 为什么鼠标单击表格行时无法获取行id
- 将鼠标悬停在表格行上时如何放大表格行?-变化
- JQuery鼠标悬停在表格上的文本