也许有人也会遇到问题,希望有所帮助。
如果不修改插件,就不可能使其与 WordPress photoswipe-masonry 主题一起使用。
next 与此修改有关,仅与砌体有关
a)lazyload 使用 data-original="xxx" 属性来设置图片 url 。不是 src 。你需要放置一些占位符。可能是 1x1 像素,将在没有延迟加载的情况下加载。
b) 这个占位符需要覆盖所有空间以供将来延迟加载的图像使用,或者砌体将使所有图像作为延迟加载视图可见。这是因为在加载图像之前它的大小为零 0px x 0px 。并且所有图像在加载前都适合可见区域。 Lazyload 将全部计数为可见并全部加载。
要为未来的图像安排所有空间,您需要一套
style="width:xxpx;height:xxpx;"
只有 width="xx" 和 height="xx" 是不够的
所以图片占位符变成了:
<img src="http:..1x1px" data-original="http://real_image" style="width:xxpx;height:xxpx;">
然后应用延迟加载正常方式和砌体。以任何顺序。
重要 - 砌体将宽度更新为其列大小,但不是高度,因此如果您的列大小 = 50px,那么您需要计算占位符的高度
new_height = 50 / actual_width * actual_height;
所以对于 WordPress 主题需要
$scaled_height =$options['thumbnail_width']/$full[1] * $full[2];
.....
<img src="http://xxxx/1x1px.jpg" data-original='. $thumb[0] .' itemprop="thumbnail" alt="'.$image_description.'" style="width:'.$full[1].'px;height:'.$scaled_height.'px;" width="'.$full[1].'" height="'.$full[2].'"/>
....
然后在砌体初始化下面添加新行
var reloading = false;
$.getScript('https://cdnjs.cloudflare.com/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js',function(){
$('.msnry_item img').lazyload({
effect: 'fadeIn',
//container: container,
threshold : 200,
skip_invisible : false,
failure_limit : 5,
load: function() {
if( ! reloading ) {
reloading = true;
setTimeout(function(){
container.masonry('reload');
reloading = false;
}, 500);
}
}
});
});