如何用jquery做行预加载器
How to do line preloader with jquery
我尝试了这个代码的行预加载器,但它没有工作,我不知道问题在哪里。
var $preload = $("<div class='preloader'><div class='percent'></div><div class='line-parent'><div class='line'></div></div></div>");
$("body").prepend($preload);
var $imgs = $("img");
var imgsLoaded = 0;
var ratio = 0;
$imgs.each(function(){
$this = $(this);
$this.load(function(){
imgsLoaded++;
ratio = imgsLoaded / $imgs.length;
$(".percent").html(ratio / 0.01 + "%");
$(".line").animate({
width : ratio / 0.01 + "%"
});
}, function(){
if(ratio === 1){
$(".preloader").fadeOut();
}
});
});
我相信您想要在所有图像加载并执行一些操作时显示100%。如果在图像已经加载后附加第一次加载事件,将无法工作。
我建议检查每个img complete和naturalWidth属性每100毫秒(setInterval)。
Loader = (function() {
var list, img_length, loaded, interval;
function _check_one(i) { o = list[i]; if (o.complete == true && o.naturalWidth > 0) { loaded++; delete list[i]; } };
function _procent(l, a) { console.log((100*loaded/img_length) + '%'); }
function _check_list() { for(var i in list) {_check_one(i)};_procent();_kill(); };
function _kill() { if(img_length <= loaded) clearInterval(interval); }
function _start() { loaded = 0; list = $('img'); img_length = list.length;
if(img_length != loaded) interval = setInterval(_check_list, 100); }
return { start: _start }
})();
现在在正文的末尾或者$(document).ready(…)中你需要调用Loader.start();
或将所有图像源(src)放在data-src attribite中,附加加载事件并复制data-scr到src attribite。在正文中,所有相关图像看起来像这样:
<img data-src="some url">...
脚本标签:
$('img').on('load', function() {
// Your action.
}).each(function() { var img = $(this); img.attr('src', img.attr('data-src')); });
相关文章:
- 分页:如何用AJAX加载第一个页面
- 如何用Javascript加载本地文件
- 如何用ajax实现加载显示
- 如何用JavaScript中的Ajax调用代替加载脚本文件(将YQL与JavaScript一起使用)
- 如何用数据预加载表单(新操作),然后在Ruby on Rails中提交
- 如何用从另一个struts2 jquery自动补全器Y中选择的值重新加载struts2 jquery自动补全机X
- 如何用oclazyload加载的外部模块加载Angular translate
- 如何用d3加载两次相同的更新csv
- 如何用Javascript加载页面并对其进行MD5哈希处理,以确保它是我们要查找的页面
- 如何用JavaScript加载外部文件
- 如何用JSPM加载RaphaelJS
- 如何用javascript编写有条件地加载两个不同css文件的代码
- 如何用javascript加载html页面
- 如何用文档加载脚本.用javascript编写
- 如何用three.js从MySql数据库加载纹理
- 如何用JavaScript在加载视图中删除所有Chrome通知
- 如何用jquery加载动画
- 如何用JSONLoader改变在js中加载的对象的颜色
- 如何用Javascript自动加载NSTableView
- 如何用数据URI延迟图像加载