我正在尝试创建一个可调整大小的div,而不使用jQuery的接口库。
var myY = 0;
var mouseDown = false;
var originalHeight = 0;
function resize(e){
if(mouseDown == true){
$("#cooldiv").height(originalHeight+e.pageY-myY);
}
}
$(document).ready(function(){
$().mouseup(function(e){
myY = 0;
mouseDown = false;
originalHeight = 0;
$().unbind("mousemove", resize);
});
$("#resizeBar").mousedown(function(e){
myY = e.pageY;
originalHeight = $("#cooldiv").height();
mouseDown = true;
$().bind("mousemove", resize);
});
});
...
<div id="cooldiv" style="width: 500px; height: 300px; background-color: #cccccc; position: relative;">
<div id="resizeBar" style="height: 10px; width: 500px; background-color: #aaaaaa; position: absolute; bottom: 0;"></div>
</div>
第一个调整大小正常(即mousedown,mousemove然后mouseup),但在后续(mousedown + mousemove)s上,浏览器尝试拖动整个resizeBar div而不是正确调整其父容器的大小。在mouseup上,然后div开始在mousemove上调整“cooldiv”,而不需要任何mousedown,直到再次单击鼠标。
这些问题未显示在Internet Explorer中。
答案 0 :(得分:1)
尝试添加
$("#cooldiv").focus();
到鼠标功能结束。
答案 1 :(得分:1)
我偶尔能够打破调整大小的功能,我会得到“不允许”的光标,并且该框不会动态调整大小,但是当我放开鼠标时它会适当调整大小并保持这种状态。
将return false;
添加到resize
函数的末尾似乎会阻止浏览器尝试选择/拖动调整大小栏。我在有限的环境中工作,所以我只能用ie8(和ie7模式的ie8)进行测试。
我必须将$()
的来电替换为$(document)
以使其正常运行。我还建议将mousemove
绑定移出mousedown
处理程序,并删除解除绑定的调用。
答案 2 :(得分:1)
这是一个以“hr”标签作为分隔符(两个div之间)的示例:
<div>Text here</div>
<hr />
<div>Other text</div>
Javascript :(使用JQuery):
var hr = null;
$("hr").mousedown(function(e) {
hr = {
y : e.pageY,
p : $(this).prev(),
n : $(this).next(),
ph: $(this).prev().height(),
nh: $(this).next().height()
};
e.preventDefault();
});
$(document).mousemove(function(e) {
if(hr) {
hr.p.height(hr.ph+(e.pageY - hr.y));
hr.n.height(hr.nh-(e.pageY - hr.y));
}
e.preventDefault();
}).mouseup(function(e) {
hr = null;
e.preventDefault();
});
CSS(可选):
hr {
background-color: #DDD;
border: 1px solid #AAA;
cursor: n-resize;
height: 10px;
}