首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >强制在加载包括JS文件在内的任何内容之前加载某些JS文件和图像

强制在加载包括JS文件在内的任何内容之前加载某些JS文件和图像
EN

Stack Overflow用户
提问于 2014-02-11 19:49:14
回答 6查看 1.3K关注 0票数 2

因为我的客户的页面有大量的Javascript,所以我为手机版添加的图像轮播在智能手机上的渲染耗时很长。我想加载轮播图像,然后轮播所需的文件(jQuery,carousel JS文件,carousell CSS文件)之前,任何其他包括JS,CSS等。

这是可能的吗?如果是的话,该怎么做?

EN

回答 6

Stack Overflow用户

发布于 2014-02-13 20:13:31

尝试这样做:

Load Image from javascript

如果您可以先加载图像,然后在任何地方使用它,则它们将在javascript加载时立即加载,并且您必须将此javascript放在其他所有内容之前(如您所要求的)。

而且,要首先加载JS,您只需要将它们放在第一位,例如:

JQuery必须在Bootstrap之前加载,否则将无法工作。

票数 6
EN

Stack Overflow用户

发布于 2014-02-20 14:13:33

您可以创建一个javascript方法来检查所有图像,无论它们是否已加载。

代码语言:javascript
运行
复制
var preLoadImages = function (arr) {
    var newImages = [], // temparary variable containing loaded images
        loadedImagesCount = 0; // 
    var postAction = function () {};
    var arr = (typeof arr != "object") ? [arr] : arr; // if a single image is sent, convert it into array

    function imageLoadPost() {
        loadedImagesCount++;
        if (loadedImagesCount == arr.length) {
            postAction(newImages) // postAction method
        }
    }
    for (var i = 0; i < arr.length; i++) {
        newImages[i] = new Image();
        newImages[i].src = arr[i];
        newImages[i].onload = function () { // call imageLoadPost when image is loaded
            imageLoadPost();
        }
        newImages[i].onerror = function () { // call imageLoadPost when error occurred because its also an success event which already checked whether mage is available or not
            imageLoadPost();
        }
    }
    return { //return blank object with done() method
        done: function (f) {
            postAction = f || postAction // user defined callback method to be called when all images are loaded
        }
    }
}

// image array contains all images which you want to preload - currently having sample images
var imgArr = ['http://doc.jsfiddle.net/_images/jsfiddle-logo-thumb.png', 'http://doc.jsfiddle.net/_images/jsfiddle-desktop-thumbnail-a.png'];
preLoadImages(imgArr).done(function (imgArr) {
    alert('all images loaded');
    // call your carousel here
})

在done方法中,您可以创建您的轮播。您需要将此方法添加到一个文件中,并将其放在加载javascript文件的堆栈的顶部。

JSFiddle link

票数 2
EN

Stack Overflow用户

发布于 2014-02-19 02:30:13

我有个主意:

  1. 首先加载jQuery。添加了
  2. ,不包括你想要延迟加载的js和css文件。
  3. 为你想要延迟加载的js和css编写一个javascript数组(按顺序)(见下文)。
  4. 在html属性中标识所有你想要稍后加载的属性。(只需使用任意属性)

  • on document complete,浏览所有lazyLoad图像,使用lazyload src重新分配src属性。

  • on dom ready,添加任意窗口事件侦听器,也许是"LoadNextScript",它将注入下一个来自数组的事件。

  • 在每个注入的js文件的末尾,添加一行以引发(任意) "LoadNextScript“事件。(注意:如果您同意异步加载脚本,则可以跳过此功能,只需像加载css文件一样加载它们。)

$(window).trigger( "LoadNextScript“);

  • 在文档完成时,引发第一个(任意) "LoadNextScript”事件。

  • 在文档完成时,从css数组中插入css文件。

JS:

代码语言:javascript
运行
复制
window.lazyLoad = {
    jsNextIndex: 0,
    jsFiles: ["_js/file1.js", "_js/file2.js"],
    cssFiles: ["_css/file1.css", "_css/file2.css"],
    loadLazyImages: function () {
        $('img[lazyLoad]').each(function () {
            var $img = $(this);
            $img.attr('src', $img.attr('lazyLoad'));
        });
    },
    loadNextScript: function () {
        // must add
        // $(window).trigger( "LoadNextScript" );
        // at the end of each js file to be lazy loaded.
        var sScriptSrc = window.lazyLoad.jsFiles[window.lazyLoad.jsNextIndex] || false;
        if (sScriptSrc) {
            $('<script type="text/javascript" src="' + sScriptSrc + '" />').appendTo($('body'));
        }
        window.lazyLoad.jsNextIndex++;
    },
    loadAllCss: function () {
        var $head = $('head');
        for (var i = 0; i < window.lazyLoad.cssFiles.length; i++) {
            $('<link rel="stylesheet" href="' + window.lazyLoad.cssFiles[i] + '" type="text/css" media="screen" />');
        }
    },
    domReady: function () {
        // wire Lazy Script Event
        $(window).bind('LoadNextScript', window.lazyLoad.loadNextScript);

        // on window load complete (all non-lazy images)
        $(window).load(function () {
            // load all lazy images
            window.lazyLoad.loadLazyImages();
            // load the css
            window.lazyLoad.loadAllCss();
            // load/trigger the first script
            window.lazyLoad.loadNextScript();
        });
    }
};

jQuery(function ($) {
    // init lazy loader
    window.lazyLoad.domReady();
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21701006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档