jQuery手动可调整大小的DIV

时间:2009-02-09 09:03:45

标签: javascript jquery resize

我正在尝试创建一个可调整大小的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中。

3 个答案:

答案 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;
}