分享一个jQuery的预加载插件,这个插件通过检查页面中的所有元素来提前加载所有包含的图片(包括背景图片),这个版本的插件是原来版本的一个更新,更容易使用。
Queryloader目前需要jQuery1.7,并且支持IE>7, Chrome, Safari和Firefox。
引入类库
<script src="path/to/file/jquery.queryloader2.js"
type="text/javascript"></script>
当然你必须在以上代码之前引入jQuery类库,然后调用如下代码:
$(document).ready(function () {
$("body").queryLoader2();
});
如果你在iOS上使用,请调用如下:
window.addEventListener('DOMContentLoaded', function() {
$("body").queryLoader2();
});
backgroundColor
(string) 加载的背景颜色
barColor
(string) 加载条背景颜色
barHeight
(int) 加载条高度,缺省为1
deepSearch
(boolean) 设置为“true“来找到所有的指定元素对应图片。如果你不希望查找子元素,可以设置为false。
percentage
(boolean) 设置为"true"来启用百分比展示,缺省为false
completeAnimation
(string) 设定结束的动画类型,”grow“或者为"fade",缺省为fade
onLoadComplete
(function) 加载完毕后调用的方法。对于修改动画非常实用
onComplete
(function) 这个方法在完成加载和动画后调用
/*
* QueryLoader v2 - A simple script to create a preloader for images
*
* For instructions read the original post:
* http://www.gayadesign.com/diy/queryloader2-preload-your-images-with-ease/
*
* Copyright (c) 2011 - Gaya Kessler
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* Version: 2.1
* Last update: 11-1-2011
*
*/
(function($) {
var qLimages = new Array;
var qLdone = 0;
var qLimageContainer = "";
var qLoverlay = "";
var qLbar = "";
var qLpercentage = "";
var qLimageCounter = 0;
var qLoptions = {
onComplete: function () {},
backgroundColor: "#000",
barColor: "#fff",
barHeight: 1,
percentage: false,
deepSearch: true,
completeAnimation: "fade",
onLoadComplete: function () {
if (qLoptions.completeAnimation == "grow") {
$(qLbar).stop().css("width", "100%").animate({
top: "0%",
height: "100%"
}, 500, function () {
$(qLoverlay).fadeOut(500, function () {
$(this).remove();
qLoptions.onComplete();
})
});
} else {
$(qLoverlay).fadeOut(500, function () {
$(qLoverlay).remove();
qLoptions.onComplete();
});
}
}
}
var afterEach = function () {
createPreloadContainer();
createOverlayLoader();
}
var createPreloadContainer = function() {
qLimageContainer = $("<div></div>").appendTo("body").css({
display: "none",
width: 0,
height: 0,
overflow: "hidden"
});
for (var i = 0; qLimages.length > i; i++) {
$.ajax({
url: qLimages[i],
type: 'HEAD',
success: function(data) {
qLimageCounter++;
addImageForPreload(this['url']);
}
});
}
}
var addImageForPreload = function(url) {
var image = $("<img />").attr("src", url).bind("load", function () {
completeImageLoading();
}).appendTo(qLimageContainer);
}
var completeImageLoading = function () {
qLdone++;
var percentage = (qLdone / qLimageCounter) * 100;
$(qLbar).stop().animate({
width: percentage + "%"
}, 200);
if (qLoptions.percentage == true) {
$(qLpercentage).text(Math.ceil(percentage) + "%");
}
if (qLdone == qLimageCounter) {
destroyQueryLoader();
}
}
var destroyQueryLoader = function () {
$(qLimageContainer).remove();
qLoptions.onLoadComplete();
}
var createOverlayLoader = function () {
qLoverlay = $("<div id='qLoverlay'></div>").css({
width: "100%",
height: "100%",
backgroundColor: qLoptions.backgroundColor,
backgroundPosition: "fixed",
position: "fixed",
zIndex: 666999,
top: 0,
left: 0
}).appendTo("body");
qLbar = $("<div id='qLbar'></div>").css({
height: qLoptions.barHeight + "px",
marginTop: "-" + (qLoptions.barHeight / 2) + "px",
backgroundColor: qLoptions.barColor,
width: "0%",
position: "absolute",
top: "50%"
}).appendTo(qLoverlay);
if (qLoptions.percentage == true) {
qLpercentage = $("<div id='qLpercentage'></div>").text("0%").css({
height: "40px",
width: "100px",
position: "absolute",
fontSize: "3em",
top: "50%",
left: "50%",
marginTop: "-" + (59 + qLoptions.barHeight) + "px",
textAlign: "center",
marginLeft: "-50px",
color: qLoptions.barColor
}).appendTo(qLoverlay);
}
}
var findImageInElement = function (element) {
var url = "";
if ($(element).css("background-image") != "none") {
var url = $(element).css("background-image");
} else if (typeof($(element).attr("src")) != "undefined" && element.nodeName.toLowerCase() == "img") {
var url = $(element).attr("src");
}
if (url.indexOf("gradient") == -1) {
url = url.replace(/url\(\"/g, "");
url = url.replace(/url\(/g, "");
url = url.replace(/\"\)/g, "");
url = url.replace(/\)/g, "");
var urls = url.split(", ");
for (var i = 0; i < urls.length; i++) {
if (urls[i].length > 0) {
var extra = "";
if ($.browser.msie && $.browser.version < 9) {
extra = "?" + Math.floor(Math.random() * 3000);
}
qLimages.push(urls[i] + extra);
}
}
}
}
$.fn.queryLoader2 = function(options) {
if(options) {
$.extend(qLoptions, options );
}
this.each(function() {
findImageInElement(this);
if (qLoptions.deepSearch == true) {
$(this).find("*:not(script)").each(function() {
findImageInElement(this);
});
}
});
afterEach();
return this;
};
})(jQuery);