【问题标题】:Using resize to getScript if above x pixels (jQuery)如果高于 x 像素(jQuery),则使用调整大小来获取脚本
【发布时间】:2012-07-09 01:47:39
【问题描述】:

所以我对这个脚本有疑问。它基本上是在任何调整大小事件上加载脚本。

I have it working if lets say...
- User has window size above 768 (getScipt() and content by .load() in that script)
- Script will load (and content)
- User for some reason window size goes below 768 (css hides #div)
- User re-sizes again above 768, And does not load the script again! (css displays the div)

太好了。工作正常。

Now.. (for some cray reason)
- User has window size below 768 (Does NOT getScript() or nothing)
- User re-sizes above 768 and stops at any px (getScript and content)
- User re-sizes again anything above 768 (It getScript AGAIN)

我需要它只获取一次脚本。 我使用了这里的一些代码

jQuery: How to detect window width on the fly?

(编辑 - 我发现了这个,他遇到了加载脚本一次的同样问题。)

Problem with function within $(window).resize - using jQuery 而其他人我失去了链接:/

当我第一次发现这个问题时,我使用的是这样的东西,然后我添加了 allcheckWidth() 来解决问题。但事实并非如此。

var $window = $(window);
function checkWidth() {
    var windowsize = $window.width();
////// LETS GET SOME THINGS IF IS DESKTOP 
var $desktop_load = 0;
    if (windowsize >= 768) {
    if (!$desktop_load) {

            // GET DESKTOP SCRIPT TO KEEP THINGS QUICK
            $.getScript("js/desktop.js", function() { 
            $desktop_load = 1;
    });

    } else {
    }
    }
////// LETS GET SOME THINGS IF IS MOBILE
    if (windowsize < 768) { 
    } 
}
checkWidth();

function allcheckWidth () {
var windowsize = $window.width();
//// IF WINDOW SIZE LOADS < 768 THEN CHANGES >= 768 LOAD ONCE
var $desktop_load = 0;
    if (!$desktop_load) {
    if (windowsize < 768) {
            if ( $(window).width() >= 768) { 

        $.getScript("js/desktop.js", function() { 
            $desktop_load = 1;
        });

            }
    }   
        }

}
$(window).resize(allcheckWidth);

现在我使用这样的东西更有意义?

$(function() {   
    $(window).resize(function() {
var $desktop_load = 0;
    //Dekstop
    if (window.innerWidth >= 768) {
    if (!$desktop_load) {
            // GET DESKTOP SCRIPT TO KEEP THINGS QUICK
            $.getScript("js/desktop.js", function() { 
            $desktop_load + 1;
    });
    } else {
    }
    }
if (window.innerWidth < 768) {
    if (window.innerWidth >= 768) {
    if (!$desktop_load) {
                // GET DESKTOP SCRIPT TO KEEP THINGS QUICK
                $.getScript("js/desktop.js", function() { 
        $desktop_load + 1;
        });
    } else {
        }
    }
    }
    }) .resize(); // trigger resize event
})

Ty 以备将来回复。

编辑 - 举个例子,在 desktop.js 中,我有一个在“abc”内容之前加载的 gif,它由 .load() 插入。调整大小时,此 gif 将显示,并且 desktop.js 中的 .load() 将再次触发。因此,如果 getScript 只被调用一次,它不应该在 desktop.js 中再次执行任何操作。令人困惑?

【问题讨论】:

    标签: jquery load resize window getscript


    【解决方案1】:

    我只是从 jQuery 文档中复制我的答案:

    默认情况下,$.getScript() 将缓存设置为 false。这 将时间戳查询参数附加到请求 URL 以确保 每次请求时浏览器都会下载脚本。你 可以通过使用全局设置缓存属性来覆盖此功能 $.ajaxSetup():

    $.ajaxSetup({
      cache: true
    });
    

    如果你让浏览器缓存检索到的脚本,这应该不是问题,但要确保它没有得到它已经得到的脚本,你可以设置一个标志:

    $(function() {   
        var gotscript=false;
        $(window).resize(function() {
            if (window.innerWidth >= 768) {
                if (!gotscript) {
                    $.getScript("js/desktop.js", function() { 
                        gotscript=true;
                    });
                }
            }
            if (window.innerWidth < 768) {
                if (window.innerWidth >= 768) {
                    if (!gotscript) {
                        $.getScript("js/desktop.js", function() { 
                            gotscript=true;
                        });
                    }
                }
            }
        }).resize(); // trigger resize event
    });
    

    如您所见,标志的初始状态必须设置在调整大小事件之外!

    【讨论】:

    • 我有 ajaxSetup 就像上面所有的代码一样,只是没有在示例中显示。它实际上是重新加载脚本,缓存只是重新加载它..faster?
    • 那你使用flag方法避免多次运行getScript。
    • 我打算编辑最后一条评论,但我无法解释上面的推理。我尝试了标志方法。它仍在任何调整大小事件上运行。
    【解决方案2】:

    所以我昨晚解决了这个问题。我在另一个问题上回答了它

    这里https://stackoverflow.com/a/11400128/1065573

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 2016-02-29
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多