在移动设备上滚动时调整触发器的大小&滚动布局回到顶部

时间:2017-01-06 15:25:28

标签: javascript jquery wordpress scroll resize

滚动时的热门大小调整:移动设备上存在一个着名的问题,即触发滚动页面resize事件并且有一个很好的解决方案here

我的场景:在我的情况下,我使用wordpress包含来自不同插件的大量脚本,并且不确定哪个插件/脚本触发滚动到页面滚动顶部我确信是因为调整大小事件触发器。

通常的解决方案:我可以转动每个脚本/插件来找出罪魁祸首&然后添加检查宽度更新的着名解决方案,但这将需要很多时间,我有一个不同的方法,我想在这里应用,不需要为每个插件单独调整调整大小功能。

解决方案:我想在jQuery resize函数中集成着名的解决方案,以检查天气页面宽度是否实际发生了变化,应该调整大小调整功能?

1 个答案:

答案 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事件。