关于固定表头和列,加改变列宽的问题,高难度!!!!
我在一个表格中采用Div+CSS方式固定了表头和列,但我的改变表格列宽功能动不对了。请问各们高手可有解决方法,如果能有其它办法也行,但必须是对同一个Table操作,高分相送,谢谢!代码如下:
<锁定表头及列的样式>
.LockHeader
{
position: relative;
top: expression(this.offsetParent.scrollTop);
z-index:10;
}
.LockColumn
{
position: relative;
left: expression(this.parentElement.offsetParent.parentElement.scrollLeft);
}
对于改变列宽的代码太长,贴最重要的吧。(参考网上做的)
sub elementOnMouseMove
'鼠标移动事件:
dim cliX, cliY
if iDragCounter < 10 then
iDragCounter = iDragCounter + 1
exit sub
end if
if (bDragMode and not objDragItem is nothing) then '当前为拖动模式
with window.event
cliX = .clientX
cliY = .clientY
.cancelBubble = false
.returnValue = false
end with
with objDragItem
if (.style.visibility = "hidden") then .style.visibility = "visible"
.style.posLeft = cliX - (.offsetWidth / 2)
.style.posTop = cliY - (.offsetHeight - 3)
end with
dragHeadHitIndex = hitTest(cliX, cliY)
end if
end sub
sub elementHeadOnMouseUp
'第一行操作:调整列宽,鼠标抬起:调整列宽
If CurDownMode=True Then '调整表格宽度
'抬起鼠标:调整位置,取消状态
Dim CurTable
Set CurTable=element
If CurChangeMode=True Then
If CurTable.offsetwidth-(OldTdWinX - MyChangeTdLine.offsetLeft )+3-window.document.body.scrollLeft>0 Then
CurTable.Style.Width=CurTable.offsetwidth-(OldTdWinX - MyChangeTdLine.offsetLeft )+3-window.document.body.scrollLeft
If CurTd.offsetwidth-(OldTdWinX - MyChangeTdLine.offsetLeft)+3-window.document.body.scrollLeft>0 Then
CurTd.style.width= CurTd.offsetwidth-(OldTdWinX - MyChangeTdLine.offsetLeft)+3-window.document.body.scrollLeft
End If
End If
End If
SaveWidth '记录当前宽度
CancelState
else
CancelState
Window.event.cancelBubble = false '否则将事件上传
end if
end sub
sub elementHeadOnMouseMove
'鼠标在第一行移动:调整列宽
If CurDownMode=True Then '已经按下,进入调整模式
If window.event.clientX+10+250 > Screen.width Then '提示表格的在屏幕之外了
MyChangeTdDiv.style.Left = window.event.clientX+window.document.body.scrollLeft-10-250
Else
MyChangeTdDiv.style.Left = window.event.clientX+window.document.body.scrollLeft+10
End If
MyChangeTdDiv.style.Top = window.event.clientY+10
TempWidth=CurTd.offsetwidth-(OldTdWinX - MyChangeTdLine.offsetLeft)+3-window.document.body.scrollLeft
MyChangeTdDiv.innerHTML =OldText & "当前竖线坐标X=" & MyChangeTdLine.offsetLeft & ",准备调整列宽为:" & TempWidth
'提示层可见'=========定位竖线层==========
If window.event.clientX > MinWinX Then '位置不小于目标Td最左侧
MyChangeTdLine.style.Left = window.event.clientX+window.document.body.scrollLeft-2
End If
window.event.cancelBubble = true
Else '判断是否可以按下状态
CurChangeMode=False
If Window.event.srcElement.tagName="TD" Then
If Window.event.srcElement.CellIndex=0 Then '第一列
If window.event.offsetX > window.event.srcElement.offsetWidth -10 Then
Set CurTd=Window.event.srcElement
window.event.srcElement.Style.cursor="col-resize"
MinWinX= window.event.clientX- window.event.offsetX + 20
OldTdWinX= window.event.clientX- window.event.offsetX+CurTd.offsetwidth
CurChangeMode=True '鼠标可以按下调整
window.event.cancelBubble = true
Else
window.event.srcElement.Style.cursor="Default"
End If
Else
If window.event.offsetX < 10 Then '操作前一列!只有一列执行上边的语句了。
Set CurTd=Window.event.srcElement.parentElement.cells.item(Window.event.srcElement.CellIndex-1)
window.event.srcElement.Style.cursor="col-resize"
MinWinX= window.event.clientX- window.event.offsetX-CurTd.offsetwidth + 20
OldTdWinX= window.event.clientX- window.event.offsetX
CurChangeMode=True '鼠标可以按下调整
window.event.cancelBubble = true
Else
If window.event.offsetX > window.event.srcElement.offsetWidth -10 Then '操作当前列!
Set CurTd= Window.event.srcElement
window.event.srcElement.Style.cursor="col-resize"
MinWinX= window.event.clientX- window.event.offsetX + 20
OldTdWinX= window.event.clientX- window.event.offsetX+CurTd.offsetwidth
CurChangeMode=True '鼠标可以按下调整
window.event.cancelBubble = true
Else
window.event.srcElement.Style.cursor="Default"
End If
End If
End If
End If
End If
end sub