如果大于x像素(jQuery),则使用resize to getScript

时间:2012-07-09 01:47:40

标签: jquery load resize window getscript

所以这个脚本有问题。它主要是在任何resize事件上加载脚本。

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中执行任何操作。混乱?

2 个答案:

答案 0 :(得分:0)

我只是从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
});

如您所见,标志的初始状态必须设置为OUTSIDE resize事件!

答案 1 :(得分:0)

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

此处https://stackoverflow.com/a/11400128/1065573