首先说明我会把分集中给那些给于了有用的回答的人。
手头上要做一个效果:页面分左右栏,中间有一个分隔符可以拖动它来改变左右栏的宽度。我做了一个效果, 但是当页面上有内容的时候,拖动就会有问题(鼠标不听话了),当页面没有内容的时候拖动是正常的。请js高手帮看一下。
jquery的splitter插件我也试过,有同样的问题。
具体的问题大家把代码拷贝运行了看一下。我在右栏放了iframe指向google是为了模拟页面有很多内容。<html>
<head>
<title>splitter</title>
<style>
body{
margin: 0px;
padding: 0px;
}
#splitter_container{
width: 100%;
height: 100%;
border: solid red 1px;
margin: 0px;
padding: 0px;
overflow: hidden;
}
#splitter_left_panel{
width: 300px;
height: 100%;
float: left;
border: solid blue 0px;
}
#splitter_bar{
width: 8px;
height: 100%;
float: left;
background-color: #ccc;
}
#splitter_right_panel{
height: 100%;
}
</style>
<script>
/** this is a helper function used to get the dom element specified by id **/
function $(id){return document.getElementById(id);}/** main functionality **/var Splitter = {
container: null,
lPanel: null,
rPanel: null,
bar: null,
movingBar: null,
lPanelInitWidth: '250px',
lPanelMaxWidth: '500px',
lPanelMinWidth: '200px',
rPanelInitWidth: '800px',
rPanelMaxWidth: '999px',
rPanelMinWidth: '500px',
init: function(config){
if(!config.id){
alert('Can not initialize splitter1.');
return;
}
if($(config.id)){
this.container = $(config.id);
if(!($('splitter_left_panel')&&$('splitter_right_panel')&&$('splitter_bar'))){
alert('Can not initialize splitter2.');
return;
}
else{
this.lPanel = $('splitter_left_panel');
this.rPanel = $('splitter_right_panel');
this.bar = $('splitter_bar');
}
}
if(config.lPanelMaxWidth){
this.lPanelMaxWidth = config.lPanelMaxWidth;
}
if(config.lPanelMinWidth){
this.lPanelMinWidth = config.lPanelMinWidth;
}
if(config.rPanelMaxWidth){
this.rPanelMaxWidth = config.rPanelMaxWidth;
}
if(config.rPanelMinWidth){
this.rPanelMinWidth = config.rPanelMinWidth;
}
if(config.lPanelInitWidth){
this.lPanelInitWidth = config.lPanelInitWidth;
}
if(config.rPanelInitWidth){
this.rPanelInitWidth = config.rPanelInitWidth;
}
this.bar.onmousedown = Splitter.start;
},
start: function(){
var o = Splitter.container;
o.lastMouseX = event.x;
document.body.style.cursor = 'col-resize';
var movingBar = document.createElement('div');
Splitter.container.appendChild(movingBar);
with(movingBar.style){
position = 'absolute';
left = Splitter.bar.offsetLeft + 'px';
top = '0px';
status = 'left: ' + left;
width = Splitter.bar.currentStyle.width;
height = '100%';
backgroundColor = 'blue';
zIndex = 999;
cursor = 'col-resize';
}
movingBar.dx = 0;
Splitter.movingBar = movingBar;
document.onmousemove = Splitter.move;
document.onmouseup = Splitter.end;
},
move: function(){
var o = Splitter.container;
var dx = event.x - o.lastMouseX;
Splitter.movingBar.dx = Splitter.movingBar.dx + dx;
var left = parseInt(Splitter.movingBar.style.left) + dx;
Splitter.movingBar.style.left = left;
o.lastMouseX = event.x;
},
end: function(){
document.onmousemove = null;
document.onmouseup = null;
var dx = Splitter.movingBar.dx;
status = 'dx:' + dx;
Splitter.container.removeChild(Splitter.movingBar);
status = "lPanel.currentStyle.width: " + Splitter.lPanel.currentStyle.width;
Splitter.lPanel.style.width = parseInt(Splitter.lPanel.currentStyle.width) + dx;
document.body.style.cursor = 'default';
}
};
</script>
</head>
<body onload="Splitter.init({id: 'splitter_Container'});">
<div id="splitter_container">
<div id="splitter_left_panel">left</div>
<div id="splitter_bar"></div>
<div id="splitter_right_panel">
<iframe frameborder="0" height="100%" id="" width="100%" scrolling="auto" src="http://www.google.cn"></iframe></div>
</div>
</body>
</html>
手头上要做一个效果:页面分左右栏,中间有一个分隔符可以拖动它来改变左右栏的宽度。我做了一个效果, 但是当页面上有内容的时候,拖动就会有问题(鼠标不听话了),当页面没有内容的时候拖动是正常的。请js高手帮看一下。
jquery的splitter插件我也试过,有同样的问题。
具体的问题大家把代码拷贝运行了看一下。我在右栏放了iframe指向google是为了模拟页面有很多内容。<html>
<head>
<title>splitter</title>
<style>
body{
margin: 0px;
padding: 0px;
}
#splitter_container{
width: 100%;
height: 100%;
border: solid red 1px;
margin: 0px;
padding: 0px;
overflow: hidden;
}
#splitter_left_panel{
width: 300px;
height: 100%;
float: left;
border: solid blue 0px;
}
#splitter_bar{
width: 8px;
height: 100%;
float: left;
background-color: #ccc;
}
#splitter_right_panel{
height: 100%;
}
</style>
<script>
/** this is a helper function used to get the dom element specified by id **/
function $(id){return document.getElementById(id);}/** main functionality **/var Splitter = {
container: null,
lPanel: null,
rPanel: null,
bar: null,
movingBar: null,
lPanelInitWidth: '250px',
lPanelMaxWidth: '500px',
lPanelMinWidth: '200px',
rPanelInitWidth: '800px',
rPanelMaxWidth: '999px',
rPanelMinWidth: '500px',
init: function(config){
if(!config.id){
alert('Can not initialize splitter1.');
return;
}
if($(config.id)){
this.container = $(config.id);
if(!($('splitter_left_panel')&&$('splitter_right_panel')&&$('splitter_bar'))){
alert('Can not initialize splitter2.');
return;
}
else{
this.lPanel = $('splitter_left_panel');
this.rPanel = $('splitter_right_panel');
this.bar = $('splitter_bar');
}
}
if(config.lPanelMaxWidth){
this.lPanelMaxWidth = config.lPanelMaxWidth;
}
if(config.lPanelMinWidth){
this.lPanelMinWidth = config.lPanelMinWidth;
}
if(config.rPanelMaxWidth){
this.rPanelMaxWidth = config.rPanelMaxWidth;
}
if(config.rPanelMinWidth){
this.rPanelMinWidth = config.rPanelMinWidth;
}
if(config.lPanelInitWidth){
this.lPanelInitWidth = config.lPanelInitWidth;
}
if(config.rPanelInitWidth){
this.rPanelInitWidth = config.rPanelInitWidth;
}
this.bar.onmousedown = Splitter.start;
},
start: function(){
var o = Splitter.container;
o.lastMouseX = event.x;
document.body.style.cursor = 'col-resize';
var movingBar = document.createElement('div');
Splitter.container.appendChild(movingBar);
with(movingBar.style){
position = 'absolute';
left = Splitter.bar.offsetLeft + 'px';
top = '0px';
status = 'left: ' + left;
width = Splitter.bar.currentStyle.width;
height = '100%';
backgroundColor = 'blue';
zIndex = 999;
cursor = 'col-resize';
}
movingBar.dx = 0;
Splitter.movingBar = movingBar;
document.onmousemove = Splitter.move;
document.onmouseup = Splitter.end;
},
move: function(){
var o = Splitter.container;
var dx = event.x - o.lastMouseX;
Splitter.movingBar.dx = Splitter.movingBar.dx + dx;
var left = parseInt(Splitter.movingBar.style.left) + dx;
Splitter.movingBar.style.left = left;
o.lastMouseX = event.x;
},
end: function(){
document.onmousemove = null;
document.onmouseup = null;
var dx = Splitter.movingBar.dx;
status = 'dx:' + dx;
Splitter.container.removeChild(Splitter.movingBar);
status = "lPanel.currentStyle.width: " + Splitter.lPanel.currentStyle.width;
Splitter.lPanel.style.width = parseInt(Splitter.lPanel.currentStyle.width) + dx;
document.body.style.cursor = 'default';
}
};
</script>
</head>
<body onload="Splitter.init({id: 'splitter_Container'});">
<div id="splitter_container">
<div id="splitter_left_panel">left</div>
<div id="splitter_bar"></div>
<div id="splitter_right_panel">
<iframe frameborder="0" height="100%" id="" width="100%" scrolling="auto" src="http://www.google.cn"></iframe></div>
</div>
</body>
</html>
试试 setCapture()与releaseCapture()
<html>
<head>
<title>splitter</title>
<style>
body{
margin: 0px;
padding: 0px;
}
#splitter_container{
width: 100%;
height: 100%;
border: solid red 1px;
margin: 0px;
padding: 0px;
overflow: hidden;
}
#splitter_left_panel{
width: 300px;
height: 100%;
float: left;
border: solid blue 0px;
}
#splitter_bar{
width: 8px;
height: 100%;
float: left;
background-color: #ccc;
}
#splitter_right_panel{
height: 100%;
}
</style>
<script>
/** this is a helper function used to get the dom element specified by id **/
function $(id){return document.getElementById(id);}/** main functionality **/var Splitter = {
container: null,
lPanel: null,
rPanel: null,
bar: null,
movingBar: null,
lPanelInitWidth: '250px',
lPanelMaxWidth: '500px',
lPanelMinWidth: '200px',
rPanelInitWidth: '800px',
rPanelMaxWidth: '999px',
rPanelMinWidth: '500px',
init: function(config){
if(!config.id){
alert('Can not initialize splitter1.');
return;
}
if($(config.id)){
this.container = $(config.id);
if(!($('splitter_left_panel')&&$('splitter_right_panel')&&$('splitter_bar'))){
alert('Can not initialize splitter2.');
return;
}
else{
this.lPanel = $('splitter_left_panel');
this.rPanel = $('splitter_right_panel');
this.bar = $('splitter_bar');
}
}
if(config.lPanelMaxWidth){
this.lPanelMaxWidth = config.lPanelMaxWidth;
}
if(config.lPanelMinWidth){
this.lPanelMinWidth = config.lPanelMinWidth;
}
if(config.rPanelMaxWidth){
this.rPanelMaxWidth = config.rPanelMaxWidth;
}
if(config.rPanelMinWidth){
this.rPanelMinWidth = config.rPanelMinWidth;
}
if(config.lPanelInitWidth){
this.lPanelInitWidth = config.lPanelInitWidth;
}
if(config.rPanelInitWidth){
this.rPanelInitWidth = config.rPanelInitWidth;
}
this.bar.onmousedown = Splitter.start;
},
start: function(){
var o = Splitter.container;
o.lastMouseX = event.x;
document.body.style.cursor = 'col-resize';
var movingBar = document.createElement('div');
Splitter.container.appendChild(movingBar);
with(movingBar.style){
position = 'absolute';
left = Splitter.bar.offsetLeft + 'px';
top = '0px';
status = 'left: ' + left;
width = Splitter.bar.currentStyle.width;
height = '100%';
backgroundColor = 'blue';
zIndex = 999;
cursor = 'col-resize';
}
Splitter.container.setCapture();
movingBar.dx = 0;
Splitter.movingBar = movingBar;
document.onmousemove = Splitter.move;
document.onmouseup = Splitter.end;
},
move: function(){
document.selection.empty();
var o = Splitter.container;
var dx = event.x - o.lastMouseX;
Splitter.movingBar.dx = Splitter.movingBar.dx + dx;
var left = parseInt(Splitter.movingBar.style.left) + dx;
Splitter.movingBar.style.left = left;
o.lastMouseX = event.x;
},
end: function(){
Splitter.container.releaseCapture();
document.onmousemove = null;
document.onmouseup = null;
var dx = Splitter.movingBar.dx;
status = 'dx:' + dx;
Splitter.container.removeChild(Splitter.movingBar);
status = "lPanel.currentStyle.width: " + Splitter.lPanel.currentStyle.width;
Splitter.lPanel.style.width = parseInt(Splitter.lPanel.currentStyle.width) + dx;
document.body.style.cursor = 'default';
}
};
</script>
</head>
<body onload="Splitter.init({id: 'splitter_Container'});">
<div id="splitter_container">
<div id="splitter_left_panel">left</div>
<div id="splitter_bar"></div>
<div id="splitter_right_panel">
<iframe frameborder="0" height="100%" id="" width="100%" scrolling="auto" src="http://www.google.cn"></iframe></div>
</div>
</body>
</html>
<head>
<title>splitter</title>
<style>
body{
margin: 0px;
padding: 0px;
}
#splitter_container{
width: 100%;
height: 100%;
border: solid red 1px;
margin: 0px;
padding: 0px;
overflow: hidden;
}
#splitter_left_panel{
width: 300px;
height: 100%;
float: left;
border: solid blue 0px;
}
#splitter_bar{
width: 8px;
height: 100%;
float: left;
background-color: #ccc; }
#splitter_right_panel{
height: 100%;
} </style>
<script>
/** this is a helper function used to get the dom element specified by id **/
function $(id){return document.getElementById(id);} /** main functionality **/ var Splitter = {
mouseIn:false,
container: null,
lPanel: null,
rPanel: null,
bar: null,
movingBar: null,
lPanelInitWidth: '250px',
lPanelMaxWidth: '500px',
lPanelMinWidth: '200px',
rPanelInitWidth: '800px',
rPanelMaxWidth: '999px',
rPanelMinWidth: '500px',
init: function(config){
if(!config.id){
alert('Can not initialize splitter1.');
return;
}
if($(config.id)){
this.container = $(config.id);
if(!($('splitter_left_panel')&&$('splitter_right_panel')&&$('splitter_bar'))){
alert('Can not initialize splitter2.');
return;
}
else{
this.lPanel = $('splitter_left_panel');
this.rPanel = $('splitter_right_panel');
this.bar = $('splitter_bar');
}
}
if(config.lPanelMaxWidth){
this.lPanelMaxWidth = config.lPanelMaxWidth;
}
if(config.lPanelMinWidth){
this.lPanelMinWidth = config.lPanelMinWidth;
}
if(config.rPanelMaxWidth){
this.rPanelMaxWidth = config.rPanelMaxWidth;
}
if(config.rPanelMinWidth){
this.rPanelMinWidth = config.rPanelMinWidth;
}
if(config.lPanelInitWidth){
this.lPanelInitWidth = config.lPanelInitWidth;
}
if(config.rPanelInitWidth){
this.rPanelInitWidth = config.rPanelInitWidth;
}
this.bar.onmousedown = Splitter.start;
},
start: function(){
var o = Splitter.container;
o.lastMouseX = event.x;
document.body.style.cursor = 'col-resize';
var movingBar = document.createElement('div');
Splitter.container.appendChild(movingBar);
with(movingBar.style){
position = 'absolute';
left = Splitter.bar.offsetLeft + 'px';
top = '0px';
status = 'left: ' + left;
width = Splitter.bar.currentStyle.width;
height = '100%';
backgroundColor = 'blue';
zIndex = 999;
cursor = 'col-resize';
}
movingBar.dx = 0;
Splitter.movingBar = movingBar;
document.onmousemove = Splitter.move;
document.onmouseup = Splitter.end;
document.onmousedown=Splitter.readyToMove;
},
move: function(){
if(Splitter.mouseIn){
var o = Splitter.container;
var dx = event.x - o.lastMouseX;
Splitter.movingBar.dx = Splitter.movingBar.dx + dx;
var left = parseInt(Splitter.movingBar.style.left) + dx;
Splitter.movingBar.style.left = left;
alert(left)
o.lastMouseX = event.x;
}
},
end: function(){
Splitter.mouseIn=true;
// document.onmousemove = null;
//document.onmouseup = null;
var dx = Splitter.movingBar.dx;
status = 'dx:' + dx;
Splitter.container.removeChild(Splitter.movingBar);
status = "lPanel.currentStyle.width: " + Splitter.lPanel.currentStyle.width;
Splitter.lPanel.style.width = parseInt(Splitter.lPanel.currentStyle.width) + dx;
document.body.style.cursor = 'default';
},
readyToMove:function(){
Splitter.mouseIn=true;
}
};
</script>
</head>
<body onload="Splitter.init({id: 'splitter_Container'});">
<div id="splitter_container">
<div id="splitter_left_panel">left</div>
<div id="splitter_bar"></div>
<div id="splitter_right_panel">
<iframe frameborder="0" height="100%" id="" width="100%" scrolling="auto" src="http://www.google.cn"></iframe></div>
</div>
</body>
</html>
<head>
<script language="javascript">
<!--
var bInDrag = false;
var iSplitHeight = 20;
var iBrowserHeight = 400;
function initDrag(obj) {
bInDrag = true;
obj.setCapture();
}
function freeDrag(obj) {
bInDrag = false;
obj.releaseCapture();
}
function doDrag() {
var iMoveHeight = 0;
if (bInDrag) {
iMoveHeight = event.clientY - document.getElementById('splitLine').style.pixelTop;
document.getElementById('head').style.pixelHeight += iMoveHeight;
document.getElementById('splitLine').style.pixelTop = document.getElementById('head').style.pixelHeight + (iSplitHeight/2);
document.getElementById('foot').style.pixelTop += iMoveHeight;
document.getElementById('foot').style.pixelHeight = iBrowserHeight - document.getElementById('foot').style.pixelTop;
}
}
-->
</script>
<style type="text/css">
<!--
body {
margin-left: 0px; margin-top: 0px;
}
-->
</style>
</head>
<body>
<div id="head" style="overflow:auto; height:100">top</div>
<div id="splitLine" height="20">
<hr onmousedown="initDrag(this);" onmouseup="freeDrag(this);" onmousemove="doDrag();" style="cursor:row-resize" color="#c6d7ff" noShade size="5">
</div>
<div id="foot" style="overflow:auto; height:300">
<iframe frameborder="0" height="100%" id="" width="100%" scrolling="auto" src="http://www.google.cn"></iframe>
</div>
</body>
</html>
我先不揭帖,等着更好的回答。
我测试不出来你说的现象.....我是ie6!~
<head>
<title>splitter</title>
<style>
body{
margin: 0px;
padding: 0px;
}
#splitter_container{
width: 100%;
height: 100%;
border: solid red 1px;
margin: 0px;
padding: 0px;
overflow: hidden;
}
#splitter_left_panel{
width: 300px;
height: 100%;
float: left;
border: solid blue 0px;
}
#splitter_bar{
width: 8px;
height: 100%;
float: left;
background-color: #ccc;
}
#splitter_right_panel{
height: 100%;
}
</style>
<script>
/** this is a helper function used to get the dom element specified by id **/
function $(id){return document.getElementById(id);}/** main functionality **/var Splitter = {
container: null,
lPanel: null,
rPanel: null,
bar: null,
movingBar: null,
lPanelInitWidth: '250px',
lPanelMaxWidth: '500px',
lPanelMinWidth: '200px',
rPanelInitWidth: '800px',
rPanelMaxWidth: '999px',
rPanelMinWidth: '500px',
init: function(config){
if(!config.id){
alert('Can not initialize splitter1.');
return;
}
if($(config.id)){
this.container = $(config.id);
if(!($('splitter_left_panel')&&$('splitter_right_panel')&&$('splitter_bar'))){
alert('Can not initialize splitter2.');
return;
}
else{
this.lPanel = $('splitter_left_panel');
this.rPanel = $('splitter_right_panel');
this.bar = $('splitter_bar');
}
}
if(config.lPanelMaxWidth){
this.lPanelMaxWidth = config.lPanelMaxWidth;
}
if(config.lPanelMinWidth){
this.lPanelMinWidth = config.lPanelMinWidth;
}
if(config.rPanelMaxWidth){
this.rPanelMaxWidth = config.rPanelMaxWidth;
}
if(config.rPanelMinWidth){
this.rPanelMinWidth = config.rPanelMinWidth;
}
if(config.lPanelInitWidth){
this.lPanelInitWidth = config.lPanelInitWidth;
}
if(config.rPanelInitWidth){
this.rPanelInitWidth = config.rPanelInitWidth;
}
var mask = document.createElement('div');
document.body.appendChild(mask);
with(mask.style){
position = 'absolute';
left = '0px';
top = '0px';
zIndex = 900;
width = '100%';
height = '100%';
//backgroundColor = 'green';
}
mask.style.display = 'none';
Splitter.mask = mask;
this.bar.onmousedown = Splitter.start;
},
start: function(){
var o = Splitter.container;
o.lastMouseX = event.x;
Splitter.mask.style.display = '';
var movingBar = document.createElement('div');
Splitter.container.appendChild(movingBar);
with(movingBar.style){
position = 'absolute';
left = Splitter.bar.offsetLeft + 'px';
top = '0px';
status = 'left: ' + left;
width = Splitter.bar.currentStyle.width;
height = '100%';
backgroundColor = 'blue';
zIndex = 999;
cursor = 'col-resize';
}
movingBar.dx = 0;
Splitter.movingBar = movingBar;
document.onmousemove = Splitter.move;
document.onmouseup = Splitter.end;
},
move: function(){
var o = Splitter.container;
var dx = event.x - o.lastMouseX;
status = new Date();
Splitter.movingBar.dx = Splitter.movingBar.dx + dx;
var left = parseInt(Splitter.movingBar.style.left) + dx;
Splitter.movingBar.style.left = left;
o.lastMouseX = event.x;
},
end: function(){
document.onmousemove = null;
document.onmouseup = null;
Splitter.mask.style.display = 'none';
var dx = Splitter.movingBar.dx;
status = 'dx:' + dx;
Splitter.container.removeChild(Splitter.movingBar);
status = "lPanel.currentStyle.width: " + Splitter.lPanel.currentStyle.width;
Splitter.lPanel.style.width = parseInt(Splitter.lPanel.currentStyle.width) + dx;
document.body.style.cursor = 'default';
//document.body.removeChild(Splitter.mask);
}
};
</script>
</head>
<body onload="Splitter.init({id: 'splitter_Container'});">
<div id="splitter_container">
<div id="splitter_left_panel">left</div>
<div id="splitter_bar"></div>
<div id="splitter_right_panel">
<iframe frameborder="0" height="100%" id="" width="100%" src="http://www.google.cn"></iframe>
</div>
</div>
</body>
</html>
<head>
<title>splitter</title>
<style>
body{
margin: 0px;
padding: 0px;
}
#splitter_container{
width: 100%;
height: 100%;
border: solid red 1px;
margin: 0px;
padding: 0px;
overflow: hidden;
}
#splitter_left_panel{
width: 300px;
height: 100%;
float: left;
border: solid blue 0px;
}
#splitter_bar{
width: 8px;
height: 100%;
float: left;
background-color: #ccc;
}
#splitter_right_panel{
height: 100%;
}
</style>
<script>
/** this is a helper function used to get the dom element specified by id **/
function $(id){return document.getElementById(id);}/** main functionality **/var Splitter = {
container: null,
lPanel: null,
rPanel: null,
bar: null,
movingBar: null,
lPanelInitWidth: '250px',
lPanelMaxWidth: '500px',
lPanelMinWidth: '200px',
rPanelInitWidth: '800px',
rPanelMaxWidth: '999px',
rPanelMinWidth: '500px',
init: function(config){
if(!config.id){
alert('Can not initialize splitter1.');
return;
}
if($(config.id)){
this.container = $(config.id);
if(!($('splitter_left_panel')&&$('splitter_right_panel')&&$('splitter_bar'))){
alert('Can not initialize splitter2.');
return;
}
else{
this.lPanel = $('splitter_left_panel');
this.rPanel = $('splitter_right_panel');
this.bar = $('splitter_bar');
}
}
if(config.lPanelMaxWidth){
this.lPanelMaxWidth = config.lPanelMaxWidth;
}
if(config.lPanelMinWidth){
this.lPanelMinWidth = config.lPanelMinWidth;
}
if(config.rPanelMaxWidth){
this.rPanelMaxWidth = config.rPanelMaxWidth;
}
if(config.rPanelMinWidth){
this.rPanelMinWidth = config.rPanelMinWidth;
}
if(config.lPanelInitWidth){
this.lPanelInitWidth = config.lPanelInitWidth;
}
if(config.rPanelInitWidth){
this.rPanelInitWidth = config.rPanelInitWidth;
}
var mask = document.createElement('div');
document.body.appendChild(mask);
with(mask.style){
position = 'absolute';
left = '0px';
top = '0px';
zIndex = 900;
width = '100%';
height = '100%';
//backgroundColor = 'green';
}
mask.style.display = 'none';
Splitter.mask = mask;
this.bar.onmousedown = Splitter.start;
},
start: function(){
var o = Splitter.container;
o.lastMouseX = event.x;
Splitter.mask.style.display = '';
var movingBar = document.createElement('div');
Splitter.container.appendChild(movingBar);
with(movingBar.style){
position = 'absolute';
left = Splitter.bar.offsetLeft + 'px';
top = '0px';
status = 'left: ' + left;
width = Splitter.bar.currentStyle.width;
height = '100%';
backgroundColor = 'blue';
zIndex = 999;
cursor = 'col-resize';
}
movingBar.dx = 0;
Splitter.movingBar = movingBar;
document.onmousemove = Splitter.move;
document.onmouseup = Splitter.end;
},
move: function(){
var o = Splitter.container;
var dx = event.x - o.lastMouseX;
status = new Date();
Splitter.movingBar.dx = Splitter.movingBar.dx + dx;
var left = parseInt(Splitter.movingBar.style.left) + dx;
Splitter.movingBar.style.left = left;
o.lastMouseX = event.x;
},
end: function(){
document.onmousemove = null;
document.onmouseup = null;
Splitter.mask.style.display = 'none';
var dx = Splitter.movingBar.dx;
status = 'dx:' + dx;
Splitter.container.removeChild(Splitter.movingBar);
status = "lPanel.currentStyle.width: " + Splitter.lPanel.currentStyle.width;
Splitter.lPanel.style.width = parseInt(Splitter.lPanel.currentStyle.width) + dx;
document.body.style.cursor = 'default';
//document.body.removeChild(Splitter.mask);
}
};
</script>
</head>
<body onload="Splitter.init({id: 'splitter_Container'});">
<div id="splitter_container">
<div id="splitter_left_panel">left</div>
<div id="splitter_bar"></div>
<div id="splitter_right_panel" style="background-color:red">
<div style="width:100%;height:100%;z-index:1000;position:absolute"></div>
<iframe frameborder="0" height="100%" id="" width="100%" src="http://www.google.cn"></iframe>
</div>
</div>
</body>
</html>
我只在IE8下测了
<head>
<title>splitter</title>
<style>
body{
margin: 0px;
padding: 0px;
}
#splitter_container{
width: 100%;
height: 100%;
border: solid red 1px;
margin: 0px;
padding: 0px;
overflow: hidden;
}
#splitter_left_panel{
width: 300px;
height: 100%;
float: left;
border: solid blue 0px;
}
#splitter_bar{
width: 8px;
height: 100%;
float: left;
background-color: #ccc;
}
#splitter_right_panel{
height: 100%;
}
</style>
<script>
/** this is a helper function used to get the dom element specified by id **/
function $(id){return document.getElementById(id);}/** main functionality **/var Splitter = {
container: null,
lPanel: null,
rPanel: null,
bar: null,
movingBar: null,
lPanelInitWidth: '250px',
lPanelMaxWidth: '500px',
lPanelMinWidth: '200px',
rPanelInitWidth: '800px',
rPanelMaxWidth: '999px',
rPanelMinWidth: '500px',
init: function(config){
if(!config.id){
alert('Can not initialize splitter1.');
return;
}
if($(config.id)){
this.container = $(config.id);
if(!($('splitter_left_panel')&&$('splitter_right_panel')&&$('splitter_bar'))){
alert('Can not initialize splitter2.');
return;
}
else{
this.lPanel = $('splitter_left_panel');
this.rPanel = $('splitter_right_panel');
this.bar = $('splitter_bar');
}
}
if(config.lPanelMaxWidth){
this.lPanelMaxWidth = config.lPanelMaxWidth;
}
if(config.lPanelMinWidth){
this.lPanelMinWidth = config.lPanelMinWidth;
}
if(config.rPanelMaxWidth){
this.rPanelMaxWidth = config.rPanelMaxWidth;
}
if(config.rPanelMinWidth){
this.rPanelMinWidth = config.rPanelMinWidth;
}
if(config.lPanelInitWidth){
this.lPanelInitWidth = config.lPanelInitWidth;
}
if(config.rPanelInitWidth){
this.rPanelInitWidth = config.rPanelInitWidth;
}
var mask = document.createElement('div');
document.body.appendChild(mask);
with(mask.style){
position = 'absolute';
left = '0px';
top = '0px';
zIndex = 900;
width = '100%';
height = '100%';
//backgroundColor = 'green';
}
mask.style.display = 'none';
Splitter.mask = mask;
this.bar.onmousedown = Splitter.start;
},
start: function(){
var o = Splitter.container;
o.lastMouseX = event.x;
Splitter.mask.style.display = '';
var movingBar = document.createElement('div');
Splitter.container.appendChild(movingBar);
with(movingBar.style){
position = 'absolute';
left = Splitter.bar.offsetLeft + 'px';
top = '0px';
status = 'left: ' + left;
width = Splitter.bar.currentStyle.width;
height = '100%';
backgroundColor = 'blue';
zIndex = 999;
cursor = 'col-resize';
}
movingBar.dx = 0;
Splitter.movingBar = movingBar;
document.onmousemove = Splitter.move;
document.onmouseup = Splitter.end;
},
move: function(){
var o = Splitter.container;
var dx = event.x - o.lastMouseX;
status = new Date();
Splitter.movingBar.dx = Splitter.movingBar.dx + dx;
var left = parseInt(Splitter.movingBar.style.left) + dx;
Splitter.movingBar.style.left = left;
o.lastMouseX = event.x;
},
end: function(){
document.onmousemove = null;
document.onmouseup = null;
Splitter.mask.style.display = 'none';
var dx = Splitter.movingBar.dx;
status = 'dx:' + dx;
Splitter.container.removeChild(Splitter.movingBar);
status = "lPanel.currentStyle.width: " + Splitter.lPanel.currentStyle.width;
Splitter.lPanel.style.width = parseInt(Splitter.lPanel.currentStyle.width) + dx;
document.body.style.cursor = 'default';
//document.body.removeChild(Splitter.mask);
}
};
</script>
</head>
<body onload="Splitter.init({id: 'splitter_Container'});">
<div id="splitter_container">
<div id="splitter_left_panel">left</div>
<div id="splitter_bar"></div>
<div id="splitter_right_panel" style="background-color:red">
<div style="width:120%;height:120%;z-index:1000;position:absolute;background-color:red;filter:alpha(opacity=60)"></div>
<iframe frameborder="0" height="100%" id="" width="100%" src="http://www.google.cn"></iframe>
</div>
</div>
</body>
</html>
<html>
<head>
<style></style>
<script language="javascript">
<!--
var bInDrag = false;
function $(id){return document.getElementById(id);}
function initDrag(obj) {
bInDrag = true; $('splitLine').style.background="#eee"; obj.setCapture();
}
function freeDrag(obj) {
bInDrag = false; $('splitLine').style.background="#aaa"; obj.releaseCapture();
}
function doDrag() {
if (!bInDrag) {return;}
$('left').style.width=event.clientX<150?150+"px":event.clientX +"px";
$('splitLine').style.left =$('left').offsetWidth+"px";
}window.onload=function(){
var h=document.body.offsetHeight +"px";
$("left").style.height=h;
$("splitLine").style.height=h;
$("right").style.height=h;
}
-->
</script>
<style type="text/css">
<!--
body { margin-left: 0px; margin-top: 0px;}
#left{overflow:auto; width:220px; height:100%; float:left;}
#splitLine{overflow:hidden; width:6px; height:100%; border:1px solid #eee ;background:aaa; float:left;cursor:col-resize}
#right{overflow:auto; height:100%;float:left}
-->
</style>
</head>
<body>
<div id="left">left</div>
<div id="splitLine" onmousedown="initDrag(this);" onmouseup="freeDrag(this);" onmousemove="doDrag();"></div>
<div id="right">
<iframe frameborder="0" height="100%" id="" width="100%" scrolling="auto" src="http://www.google.cn"></iframe>
</div>
</body>
</html>
<head>
<title>splitter</title>
<style>
body{
margin: 0px;
padding: 0px;
}
#splitter_container{
width: 100%;
height: 100%;
border: solid red 1px;
margin: 0px;
padding: 0px;
overflow: hidden;
}
#splitter_left_panel{
width: 300px;
height: 100%;
float: left;
border: solid blue 0px;
}
#splitter_bar{
width: 8px;
height: 100%;
float: left;
background-color: #ccc; }
#splitter_right_panel{
height: 100%;
} </style>
<script> /** this is a helper function used to get the dom element specified by id **/
function $(id){return document.getElementById(id);} /** main functionality **/ var Splitter = {
container: null,
lPanel: null,
rPanel: null,
bar: null,
movingBar: null,
lPanelInitWidth: '250px',
lPanelMaxWidth: '500px',
lPanelMinWidth: '200px',
rPanelInitWidth: '800px',
rPanelMaxWidth: '999px',
rPanelMinWidth: '500px',
init: function(config){
if(!config.id){
alert('Can not initialize splitter1.');
return;
}
if($(config.id)){
this.container = $(config.id);
if(!($('splitter_left_panel')&&$('splitter_right_panel')&&$('splitter_bar'))){
alert('Can not initialize splitter2.');
return;
}
else{
this.lPanel = $('splitter_left_panel');
this.rPanel = $('splitter_right_panel');
this.bar = $('splitter_bar');
}
}
if(config.lPanelMaxWidth){
this.lPanelMaxWidth = config.lPanelMaxWidth;
}
if(config.lPanelMinWidth){
this.lPanelMinWidth = config.lPanelMinWidth;
}
if(config.rPanelMaxWidth){
this.rPanelMaxWidth = config.rPanelMaxWidth;
}
if(config.rPanelMinWidth){
this.rPanelMinWidth = config.rPanelMinWidth;
}
if(config.lPanelInitWidth){
this.lPanelInitWidth = config.lPanelInitWidth;
}
if(config.rPanelInitWidth){
this.rPanelInitWidth = config.rPanelInitWidth;
}
this.bar.onmousedown = Splitter.start;
},
start: function(){
var o = Splitter.container;
o.lastMouseX = event.x;
document.body.style.cursor = 'col-resize';
var movingBar = document.createElement('div');
Splitter.container.appendChild(movingBar);
with(movingBar.style){
position = 'absolute';
left = Splitter.bar.offsetLeft + 'px';
top = '0px';
status = 'left: ' + left;
width = Splitter.bar.currentStyle.width;
height = '100%';
backgroundColor = 'blue';
zIndex = 999;
cursor = 'col-resize';
}
movingBar.dx = 0;
Splitter.movingBar = movingBar;
document.onmousemove = Splitter.move;
document.onmouseup = Splitter.end;
document.onmouseout=Splitter.out;
},
move: function(){
var o = Splitter.container;
var dx = event.x - o.lastMouseX;
Splitter.movingBar.dx = Splitter.movingBar.dx + dx;
var left = parseInt(Splitter.movingBar.style.left) + dx;
Splitter.movingBar.style.left = left;
o.lastMouseX = event.x;
},
end: function(){
document.onmousemove = null;
document.onmouseup = null;
document.onmouseout=null;
var dx = Splitter.movingBar.dx;
status = 'dx:' + dx;
Splitter.container.removeChild(Splitter.movingBar);
status = "lPanel.currentStyle.width: " + Splitter.lPanel.currentStyle.width;
Splitter.lPanel.style.width = parseInt(Splitter.lPanel.currentStyle.width) + dx;
document.body.style.cursor = 'default';
},
out:function(){ var wide=parseInt(Splitter.bar.currentStyle.width);
var o = Splitter.container;
var dx = event.x - o.lastMouseX+wide;
Splitter.movingBar.dx = Splitter.movingBar.dx + dx;
var left = parseInt(Splitter.movingBar.style.left) + dx;
Splitter.movingBar.style.left = left;
o.lastMouseX = event.x+wide;
}
}; </script>
</head>
<body onload="Splitter.init({id: 'splitter_Container'});">
<div id="splitter_container" >
<div id="splitter_left_panel">left</div>
<div id="splitter_bar"></div>
<div id="splitter_right_panel">
<iframe frameborder="0" height="100%" id="" width="100%" scrolling="auto" src="http://www.google.cn"></iframe></div>
</div>
</body>
</html>
继续改进中