【发布时间】:2014-08-15 10:45:12
【问题描述】:
窗口调整大小有一个事件。
$(window).resize(function() {
...
});
但是如果我想在任何类型的 DOM 对象上触发事件会是什么,例如:
$('div#myDiv').resize(function() {
...
));
但上述方法似乎不起作用。这可能和方便吗?还是有什么好办法?
【问题讨论】:
标签: javascript jquery
窗口调整大小有一个事件。
$(window).resize(function() {
...
});
但是如果我想在任何类型的 DOM 对象上触发事件会是什么,例如:
$('div#myDiv').resize(function() {
...
));
但上述方法似乎不起作用。这可能和方便吗?还是有什么好办法?
【问题讨论】:
标签: javascript jquery
这是不可能的——但也不应该真的有必要。如果您的 div 正在根据窗口大小更改大小,即通过媒体查询,只需使用 $(window).resize()。如果它是通过其他一些 javascript 代码更改的,您应该只使用该代码。
如果您愿意,您可以在 div 上触发调整大小事件并收听该事件,但您仍需手动触发该事件 - 即
$('div#myDiv').on('custom_resize', function() {
...
));
// whenever you change div size
$('div#myDiv').trigger('custom_resize');
如果您无权访问更改 div 的代码,则可以轮询宽度/高度的变化 - 例如(仅用于宽度):
var div_width = $('div#myDiv').width();
setInterval(function() {
if (div_width != $('div#myDiv').width()) {
div_width = $('div#myDiv').width();
$('div#myDiv').trigger('custom_resize');
}
}, 1);
如果您要动态添加图像,这应该可以:
$('<img>').on('load', function() { ... })
.attr('src', {img url})
.appendTo({container})
【讨论】:
$('img').on('load', function() {...})
$('img').load() 似乎并不是每张图片都会触发。
$(window).on('load', ...)?
这个插件提供了基于元素创建调整大小事件的能力:
一种跨浏览器、基于事件的元素调整大小检测。
简而言之,这个实现不使用内部定时器来检测 大小变化(就像我发现的大多数实现一样)。它使用滚动 大多数浏览器上的事件,以及 IE10 及以下版本的 onresize 事件。
使用的方法不仅检测 javascript 生成的 resize 变化 还有从 CSS 伪类进行的更改,例如:悬停,CSS 动画等。
【讨论】: