滚动时的热门大小调整:移动设备上存在一个着名的问题,即触发滚动页面resize
事件并且有一个很好的解决方案here。
我的场景:在我的情况下,我使用wordpress包含来自不同插件的大量脚本,并且不确定哪个插件/脚本触发滚动到页面滚动顶部我确信是因为调整大小事件触发器。
通常的解决方案:我可以转动每个脚本/插件来找出罪魁祸首&然后添加检查宽度更新的着名解决方案,但这将需要很多时间,我有一个不同的方法,我想在这里应用,不需要为每个插件单独调整调整大小功能。
解决方案:我想在jQuery resize函数中集成着名的解决方案,以检查天气页面宽度是否实际发生了变化,应该调整大小调整功能?
答案 0 :(得分:0)
在jQuery v1.12.4中,我添加了一些代码,用于检查已触发的事件,如果'调整大小'然后检查宽度和高度是否已更改,然后仅触发事件,否则忽略。
在全局变量的文件顶部添加了这个:
var gWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
var gHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
在jQuery文件中间:
if ( !( eventHandle = elemData.handle ) ) {
eventHandle = elemData.handle = function( e ) {
// Discard the second event of a jQuery.event.trigger() and
// when an event is called after a page has unloaded
// Custom code for detecting and pausing resize
if(e.type == 'resize'){
var tempHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
var tempWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
if(Math.abs(gHeight - tempHeight) > 100 || gWidth != tempWidth){
gWidth = tempWidth;
gHeight = tempHeight;
return typeof jQuery !== "undefined" &&
( !e || jQuery.event.triggered !== e.type ) ?
jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
undefined;
}else{
return false;
}
}else{
return typeof jQuery !== "undefined" &&
( !e || jQuery.event.triggered !== e.type ) ?
jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
undefined;
}
// Custom code end.
};
请注意,我正在使用Math.abs
查看新高度是否至少相差100px,因为大部分高度因地址栏的出现和消失而发生变化。
坦率地说,jQuery至少应该在其中进行宽度更改检查以调整resize事件。