推荐JS插件:imagesLoaded,监测图片加载状况并提供相应的事件(加载成功/失败)

惯例,首先贴上imagesLoaded的官方网址:http://imagesloaded.desandro.com/css

第一次知道imagesLoaded这个插件是在作瀑布流布局时,当时选用的是masonry这个老牌瀑布流插件,imagesLoaded这个插件也是masonry官方推荐的,多是同一伙人吧。具体场景是这样的,咱们的图片宽度都是固定的,但高度不固定(瀑布流都是这样的吧),但masonry在进行排列前就必须肯定图片的高度,而图片在还没有加载完成前是没法得知高度的(其实也不是绝对,我那时后期就改为在上传图片的时候就记录好图片的高度)。为了保证masonry在拿到图片高度,也即图片加载完成后再进行排列,我根据masonry的推荐,选用了这一款imagesLoaded插件。html

imagesLoaded能够搭配jquery使用,也能够用原生js来调用,这里方便起见(也比较直观)就直接上jquery版的:html5

$('#container').imagesLoaded()
.always( function( instance ) {    //always事件,在全部图片都加载完成(成功与否不论)时触发
  console.log('all images loaded');
})
.done( function( instance ) {    //done事件,在全部图片都加载成功时触发
  console.log('all images successfully loaded');
})
.fail( function() {    //fail事件,在全部图片都加载完成,而且至少有一张图片加载失败时触发
  console.log('all images loaded, at least one is broken');
})
.progress( function( instance, image ) {    //progress事件,在每一张图片加载完成时都触发一次
  var result = image.isLoaded ? 'loaded' : 'broken';    //判断当前图片加载成功与否
  console.log( 'image is ' + result + ' for ' + image.img.src );
});

imagesLoaded除了能监测<img>外,还能监测用css定义的background-image,具体见:http://imagesloaded.desandro.com/#backgroundjquery

除了瀑布流须要用到imagesLoaded,我最近还发如今利用html5 file api读取本地图片的时候也须要用到imagesLoaded,道理同瀑布流。另外,在作一些图片加载效果的时候也能够用到,好比说图片未加载完成以前放个loading图,加载失败时放个错误提示什么的都很方便呢。api

相关文章
相关标签/搜索