我正在寻找一个听众来调整身体大小。我需要与身体类似的东西$(window).resize()
。
为什么我的身体需要它?我使用 ajax 添加内容,它可能会改变正文大小(取决于用户的分辨率)。
我怎样才能让身体调整大小的听众/我在哪里可以找到一个?
编辑:
除了 ajax,我有手风琴。
每个项目都有不同的高度,因此会导致身体调整大小......
谢谢。
没有可靠的方法来收听身体调整大小,但是您可以收听手风琴中发生的动画。有两种方法可以做到这一点,但其中一种更酷。
在您的手风琴脚本的某个地方,您有一个 jQuery.animate
语句。如果您不使用并且正在使用类似.show(200)
or的快捷方式.fadeIn
,则需要将其转换为.animate
语句。.animate
无论如何,所有这些命令实际上只是快捷方式。如果您正在使用slideUp
和slideDown
。初始化滑块以供以后使用时,您必须保存元素的高度(顺便说一句,这是 jQuery 在幕后所做的)。
接下来,您将要使用 .animate 的 step 属性来监听滚动条的存在:
$(accordionSlideToShow).animate({
height : 200
step : function(){
//scrollbar checking and css control script here
}
}, 2000);
但是如果你想要更酷,你可以在你的小部件中添加自定义事件。通过这种方式,未来的开发可以作为免费功能与这些事件联系起来。
$(accordionSlideToShow).trigger('ron-accordion-slideWillShow').animate({
height : 200
step : function(){
$(accordionParentElement).trigger('ron-accordion-animationOccurring');
}
}, 2000, function(){
$(this).trigger('ron-accordion-slideDidShow');
});
现在您可以绑定到您的小部件的新事件模型并监听动画和滚动条,如下所示:
$(accordionInstance).on('ron-accordion-animationOccurring', function(){
//test for scroll bars and add css if needed
});
当 body 元素改变大小时不会触发这样resize
的事件 - 您可以分配一个resize
事件处理程序,但这只会在窗口调整大小时触发。有几种方法可以逼近元素调整大小事件,但正如 Fresheyeball 所说,尝试从不同的角度解决问题可能会更好。话虽如此,您可以:
创建一个经常调用的函数,该函数setInterval
将密切关注主体的width
/height
或scrollWitdth
/ scrollHeight
,并在发生变化时触发一个方法。
在支持此功能的浏览器中,您可以查看使用DOMAttrModified
事件或可能使用MutationObserver
. 但话又说回来,这些只得到一小部分用户代理的支持。