主题:使用table+iframe实现可以拖动改变框架宽度
2009-12-27 03:43
656 查看
需求:可以随时拖动中间div改变两边的边框架(left,right)宽度,并解决了拖拽过程中不断渲染页面的效率问题.
缺陷:仅支持ie.
Js代码
<HTML>
<head>
<style type='text/css'>
.table{
width:400;
height:2;
background-color:red;
border-color:yellow;
border:0px;
}
</style>
<SCRIPT LANGUAGE="JavaScript">
var isIe = true;
if(!document.all)
{
isIe = false;
}
function downToResize(obj,e){
obj.style.cursor='col-resize';
var e = isIe ?window.event : e;
//记录开始准备移动的起始位置
obj.mouseDownX=e.clientX;
//父级左边框架的宽度
obj.parentLeftFW = document.getElementById('left').parentNode.clientWidth;
//父级右边框架的宽度
obj.parentRightFW = document.getElementById('right').parentNode.clientWidth;
obj.parentBox = document.getElementById('box');
if(isIe)obj.setCapture();
else{
alert('不支持火狐..');
obj.mouseDownX = 0;
}
}
function moveToResize(obj,e){
var e = isIe ?window.event : e;
if(!obj.mouseDownX) return false;
obj.removed = 1;
obj.parentBox.style.display = 'inline';
obj.parentBox.style.width = obj.offsetWidth;
obj.parentBox.style.height = obj.offsetHeight;
obj.parentBox.style.left = e.clientX;
obj.parentBox.style.top = getPosTop(obj.parentBox);
}
function getPosLeft(elm) {
var left = elm.offsetLeft;
while((elm = elm.offsetParent) != null) {
left += elm.offsetLeft;
}
return left;
}
function getPosTop(elm) {
var top = elm.offsetTop;
while((elm = elm.offsetParent) != null) {
top += elm.offsetTop;
}
return top;
}
function upToResize(obj,e){
var e = isIe ?window.event : e;
//下面是实际的移动边框的大小
var changeW = e.clientX*1-obj.mouseDownX;
if(changeW!=0&&obj.removed){
var newLeftW=obj.parentLeftFW*1+changeW;
var newRightW=obj.parentRightFW*1-changeW;
if(newLeftW<=200) {
var temp = newLeftW;
newLeftW = 200;
newRightW =newRightW-(200-temp);
}
if(newRightW<=200) {
var temp = newRightW;
newRightW = 200;
newLeftW = newLeftW-(200-temp);
}
var leftObj = parent.document.getElementById('left').parentNode;
leftObj.width = newLeftW;
leftObj.firstChild.style.width = newLeftW+'px';
var rightObj = parent.document.getElementById('right').parentNode;
//下面的之所以要减掉一个4,是在鼠标旁边的一个小小的位移..
rightObj.width = newRightW-4;
rightObj.firstChild.style.width = newRightW-4;
}
if(isIe)obj.releaseCapture();
else{
}
obj.mouseDownX=0;
obj.removed = 0;
obj.style.cursor = 'default';
obj.parentBox.style.display = 'none';
}
</SCRIPT>
</head>
<body style="overflow: hidden;">
<div id='box' style="display:'none';position:'absolute';border:'1px dotted red';z-index:5;width:20px;height:100px;"></div>
<TABLE height="100%" width='100%'>
<TR>
<TD ><iframe id='left' src='test.html' style="width:100%;height:100%;z-index: -1;border:0px;" scrolling="no"></iframe>
</TD>
<td><div style='height:100%;background-color:red;width:8px;'
onmousedown="downToResize(this,event);"
onmouseover="this.style.cursor='col-resize';"
onmousemove="moveToResize(this,event);"
onmouseout="this.style.cursor='default';"
onmouseup="upToResize(this,event);"></div></td>
<TD><iframe id='right' src='test.html' style="height:100%;z-index: -1;width:100%;border:0px;" scrolling="no" ></iframe></TD>
</TR>
</TABLE>
</body>
</HTML>
缺陷:仅支持ie.
Js代码
<HTML>
<head>
<style type='text/css'>
.table{
width:400;
height:2;
background-color:red;
border-color:yellow;
border:0px;
}
</style>
<SCRIPT LANGUAGE="JavaScript">
var isIe = true;
if(!document.all)
{
isIe = false;
}
function downToResize(obj,e){
obj.style.cursor='col-resize';
var e = isIe ?window.event : e;
//记录开始准备移动的起始位置
obj.mouseDownX=e.clientX;
//父级左边框架的宽度
obj.parentLeftFW = document.getElementById('left').parentNode.clientWidth;
//父级右边框架的宽度
obj.parentRightFW = document.getElementById('right').parentNode.clientWidth;
obj.parentBox = document.getElementById('box');
if(isIe)obj.setCapture();
else{
alert('不支持火狐..');
obj.mouseDownX = 0;
}
}
function moveToResize(obj,e){
var e = isIe ?window.event : e;
if(!obj.mouseDownX) return false;
obj.removed = 1;
obj.parentBox.style.display = 'inline';
obj.parentBox.style.width = obj.offsetWidth;
obj.parentBox.style.height = obj.offsetHeight;
obj.parentBox.style.left = e.clientX;
obj.parentBox.style.top = getPosTop(obj.parentBox);
}
function getPosLeft(elm) {
var left = elm.offsetLeft;
while((elm = elm.offsetParent) != null) {
left += elm.offsetLeft;
}
return left;
}
function getPosTop(elm) {
var top = elm.offsetTop;
while((elm = elm.offsetParent) != null) {
top += elm.offsetTop;
}
return top;
}
function upToResize(obj,e){
var e = isIe ?window.event : e;
//下面是实际的移动边框的大小
var changeW = e.clientX*1-obj.mouseDownX;
if(changeW!=0&&obj.removed){
var newLeftW=obj.parentLeftFW*1+changeW;
var newRightW=obj.parentRightFW*1-changeW;
if(newLeftW<=200) {
var temp = newLeftW;
newLeftW = 200;
newRightW =newRightW-(200-temp);
}
if(newRightW<=200) {
var temp = newRightW;
newRightW = 200;
newLeftW = newLeftW-(200-temp);
}
var leftObj = parent.document.getElementById('left').parentNode;
leftObj.width = newLeftW;
leftObj.firstChild.style.width = newLeftW+'px';
var rightObj = parent.document.getElementById('right').parentNode;
//下面的之所以要减掉一个4,是在鼠标旁边的一个小小的位移..
rightObj.width = newRightW-4;
rightObj.firstChild.style.width = newRightW-4;
}
if(isIe)obj.releaseCapture();
else{
}
obj.mouseDownX=0;
obj.removed = 0;
obj.style.cursor = 'default';
obj.parentBox.style.display = 'none';
}
</SCRIPT>
</head>
<body style="overflow: hidden;">
<div id='box' style="display:'none';position:'absolute';border:'1px dotted red';z-index:5;width:20px;height:100px;"></div>
<TABLE height="100%" width='100%'>
<TR>
<TD ><iframe id='left' src='test.html' style="width:100%;height:100%;z-index: -1;border:0px;" scrolling="no"></iframe>
</TD>
<td><div style='height:100%;background-color:red;width:8px;'
onmousedown="downToResize(this,event);"
onmouseover="this.style.cursor='col-resize';"
onmousemove="moveToResize(this,event);"
onmouseout="this.style.cursor='default';"
onmouseup="upToResize(this,event);"></div></td>
<TD><iframe id='right' src='test.html' style="height:100%;z-index: -1;width:100%;border:0px;" scrolling="no" ></iframe></TD>
</TR>
</TABLE>
</body>
</HTML>
相关文章推荐
- js 实现table每列可左右拖动改变列宽度
- 可拖动拉伸的左右分栏效果,本例子是用Table以及JS来实现的,左右分栏可改变,拖动中间的边框就可实现宽度的调整,点击时可设置为隐藏左侧列表。
- [转] js 实现table每列可左右拖动改变列宽度
- 可拖动拉伸的左右分栏效果,本例子是用Table以及JS来实现的,左右分栏可改变,拖动中间的边框就可实现宽度的调整,点击时可设置为隐藏左侧列表。
- 拖动表列改变table的列宽度(JavaScript脚本实现)
- 拖动改变Table的列宽度
- android 使用TableLayout 实现布局自动拉伸宽度
- ios TableView那些事(三十 五)TableView 单选操作使用Autolayout实现UITableView的Cell动态布局和高度动态改变
- 拖动table标题实现改变td的大小(css+js代码)
- 拖动一个div,动态改变其td宽度的实现
- 任意表格(table)实现拖动列(column)改变列大小
- DataGrid实现拖动任意列的列头改变列宽度时,让其他列的宽度和他一样宽
- 拖动改变Table的列宽度
- js实现拖动table列,改变列宽
- 使用XTablayout实现横向滑动菜单,可以设置文字下面导航栏的宽度
- js实现table用鼠标改变td的宽度,固定table宽度和高度超过显示点
- java web开发中,jsp使用了frameset框架,如何实现整个页面跳转,并且同一个表单中可以提交两个action
- (精)在ASP.NET中使用IFRAME+DIV,可以实现在同一页面使用弹出(模态)窗口
- 在SharePoint中模板中实现类似框架的结构:使用Splitter分割导航与内容区,拖动调整大小(一)
- 基于Metronic的Bootstrap开发框架经验总结(16)-- 使用插件bootstrap-table实现表格记录的查询、分页、排序等处理