因为我的客户的页面有大量的Javascript,所以我为手机版添加的图像轮播在智能手机上的渲染耗时很长。我想加载轮播图像,然后轮播所需的文件(jQuery,carousel JS文件,carousell CSS文件)之前,任何其他包括JS,CSS等。
这是可能的吗?如果是的话,该怎么做?
发布于 2014-02-13 20:13:31
尝试这样做:
如果您可以先加载图像,然后在任何地方使用它,则它们将在javascript加载时立即加载,并且您必须将此javascript放在其他所有内容之前(如您所要求的)。
而且,要首先加载JS,您只需要将它们放在第一位,例如:
JQuery必须在Bootstrap之前加载,否则将无法工作。
发布于 2014-02-20 14:13:33
您可以创建一个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
发布于 2014-02-19 02:30:13
我有个主意:
$(window).trigger( "LoadNextScript“);
JS:
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();
});https://stackoverflow.com/questions/21701006
复制相似问题