我有一个非常简单的问题,或者至少看起来是这样。
我有一个 DIV 元素,它会立即调整大小。我希望能够捕捉到调整大小的时刻。
像这样的东西:
function myFunction(){
alert('The DIV was resized');
}
divElement.addEventListener("resize", myFunction, false);
有人知道答案吗?
谢谢
我有一个非常简单的问题,或者至少看起来是这样。
我有一个 DIV 元素,它会立即调整大小。我希望能够捕捉到调整大小的时刻。
像这样的东西:
function myFunction(){
alert('The DIV was resized');
}
divElement.addEventListener("resize", myFunction, false);
有人知道答案吗?
谢谢
截至 2011 年 12 月,没有内置事件可以检测 div 何时调整大小,仅当窗口调整大小时。
查看这个相关问题:Detecting when a div's height changes using jQuery,以及该问题的解决方案中的这个插件:http: //benalman.com/projects/jquery-resize-plugin/
使用 jQuery 调整大小事件,您现在可以将调整大小事件处理程序绑定到窗口以外的元素,以获得超棒的调整大小!
为什么调整大小事件需要插件?
很久以前,当权者决定 resize 事件只会在浏览器的 window 对象上触发。不幸的是,这意味着如果您想知道另一个元素何时调整大小,则需要定期手动测试其宽度和高度以进行更改。虽然这个插件在内部并没有做任何花哨的事情来避免这种方法,但它提供的用于绑定事件的接口与 window 已经存在的接口完全相同。
对于所有元素,将启动一个内部轮询循环,该循环会定期检查元素大小的变化并在适当的时候触发事件。轮询循环仅在事件实际绑定到某处时运行,并在所有调整大小事件都未绑定时停止。
示例代码
// You know this one already, right?
$(window).resize(function(e){
// do something when the window resizes
});
// Well, try this on for size!
$("#unicorns").resize(function(e){
// do something when #unicorns element resizes
});
// And of course, you can still use .bind with namespaces!
$("span.rainbows").bind( "resize.rainbows", function(e){
// do something when any span.rainbows element resizes
});
你可以试试这个插件 - http://benalman.com/code/projects/jquery-resize/examples/resize/
有各种各样的例子。尝试调整窗口大小并查看容器元素内的元素如何调整。
在那个 resize() 事件绑定到具有类“test”的元素以及窗口对象,并且在窗口对象的调整大小回调中调用 $('.test').resize()。
例如
$('#test_div').bind('resize', function(){
console.log('resized');
});
$(window).resize(function(){
$('#test_div').resize();
});
有一种非常有效的方法可以确定元素的大小是否已更改。
http://marcj.github.io/css-element-queries/
这个库有一个类 ResizeSensor 可用于调整大小检测。它使用基于事件的方法,因此速度非常快并且不会浪费 CPU 时间。
请不要使用jQuery onresize 插件,因为它使用setTimeout()
循环来检查更改。这是非常缓慢且不准确的。
我的第一个想法是使用自定义事件系统。你可以在这里找到一个纯 javascript ( http://www.nczonline.net/blog/2010/03/09/custom-events-in-javascript/ )
包含他的代码后,您可以执行以下操作:
function myFunction(){
alert('The DIV was resized');
}
div_elm = document.getElmentById('div-to-resize');
EventTarget.call(div_elm);
div_elm.addListener("resize", myFunction);
然后,只需在要调整 div 大小的任何位置添加一行。
div_elm.width += 100 //or however you are resizing your div
div_elm.fire("resize");
我认为这应该对你有用。
编辑:
如果您不是编码调整大小的人,那么我的第一个想法是这样的:
var resizeScannerInterval_id = (function(div) {
var width = div.offsetWidth;
var height = div.offsetHeight;
var interval_id = setInterval(function() {
if( div.offsetWidth != width || div.offsetHeight != height )
width = div.offsetWidth;
height = div.offsetHeight;
div.fire();
}
},250);
})(document.getElementById('div-id'))