我一直在拼湊砌體和moo工具lazyload,但是他們都不似乎一起走得很好,雖然它可能只是因爲我在編碼時稍微沒有用處!結合LazyLoad和Jquery砌體
磚石工程this page。
但是,當我試圖把它放在一起lazyload它似乎完全搞砸了。有沒有人有任何想法如何實現兩個插件在一起?
我花了6天試圖找出它,這是我最後的希望哈!
感謝
我一直在拼湊砌體和moo工具lazyload,但是他們都不似乎一起走得很好,雖然它可能只是因爲我在編碼時稍微沒有用處!結合LazyLoad和Jquery砌體
磚石工程this page。
但是,當我試圖把它放在一起lazyload它似乎完全搞砸了。有沒有人有任何想法如何實現兩個插件在一起?
我花了6天試圖找出它,這是我最後的希望哈!
感謝
的原因是,砌體需要知道圖像的尺寸,以便正確地鋪陳項目。然而,LazyLoad會延遲加載圖像直到圖像在視口中,這意味着圖像將沒有尺寸(或者將您設置的img /佔位符圖像的尺寸設置爲img src)。
最近,我得爲我的一個網站解決這個問題。我嘗試了幾種方法,似乎有效。
1.第一種方法:在項目
var $container = $('#container');
$container.imagesLoaded(function(){
$container.masonry({
itemSelector: '.item',
columnWidth: function(containerWidth){
return containerWidth/12;
}
});
$('.item img').addClass('not-loaded');
$('.item img.not-loaded').lazyload({
effect: 'fadeIn',
load: function() {
// Disable trigger on this image
$(this).removeClass("not-loaded");
$container.masonry('reload');
}
});
$('.item img.not-loaded').trigger('scroll');
});
這種方法很好,但它有一個缺點。網格佈局可能無法維持,因爲masonry.reload()的時間取決於每個圖像的加載時間(即一個應該被首先加載可能只是後來完成)
2.第二種方法是相同的: 看看像pinterest這樣的網站,我認爲它不遵循第一種方法,因爲它們甚至在加載任何圖像之前都已經排列了容器盒,因此,我試圖實現的是僅顯示與圖像相同比例的盒子。步驟如下:
{image1: [300,400],image2: [400,500]}
一個JSON)http://jsfiddle.net/nathando/s3KPn/4/
var $container = $('#container');
$container.imagesLoaded(function(){
$container.masonry({
itemSelector: '.item',
columnWidth: function(containerWidth){
return containerWidth/12;
}
});
$('.item img').lazyload({
effect: 'fadeIn'
});
$('.item img').trigger('scroll');
});
[編輯,以添加第二種方法的jsfiddle]
說明:
/*display: none */
和#container.fluid .item img
乾杯
@Nathan_Do你可以把這個jsfiddle – adit 2013-05-19 04:11:17
@adit:添加了新的jsfiddle作爲要求,但因爲我不能複製服務器的行爲,有點做手動。 – 2013-05-28 17:22:12
@NathanDo如果我有一個pinterest卡布局與評論,我不得不計算div的高度以及根據評論? – aherlambang 2013-06-07 04:11:40
評論display: block
我張貼在其他同樣的問題相同的答案文章。如果您的圖片重疊出現問題,我在下面的網站上找到了解決方案,儘管它是日文版。
http://www.webdesignleaves.com/wp/jquery/1340/
希望這會有所幫助。
重點是使用以下;
$('img.lazy').load(function(){ ... })
HTML
<div id="works_list">
<div class="work_item">
<img class="lazy" src="images/dummy.gif" data-original="images/works/thumb/001.jpg" alt="">
<p>title 1</p>
</div><!-- end of .work_item-->
<div class="work_item">
<img class="lazy" src="images/dummy.gif" data-original="images/works/thumb/002.jpg" alt="">
<p>title 2</p>
</div><!-- end of .work_item-->
....
</div><!-- end of #works_list -->
jQuery的
$("img.lazy").lazyload({
effect: 'fadeIn',
effectspeed: 1000,
threshold: 200
});
$('img.lazy').load(function() {
masonry_update();
});
function masonry_update() {
var $works_list = $('#works_list');
$works_list.imagesLoaded(function(){
$works_list.masonry({
itemSelector: '.work_item',
isFitWidth: true,
columnWidth: 160
});
});
}
謝謝!這幫了我很多。 – 2015-05-26 23:52:41
你救了我的一天:)非常感謝! – 2017-08-11 21:14:42
可能有人會也有問題,希望幫助。
使它與wordpress photoswipe-masonry主題是可行的,沒有插件修改是不可能的。
下一個是有關本變形例,只是有磚石
一個)lazyload使用的數據原始=「XXX」屬性來設置圖像的URL。不是src。給你需要放置一些佔位符。可能是1x1像素,將在沒有延遲加載的情況下加載。
b)這個佔位符需要覆蓋所有空間供未來的lazyloaded圖像使用,或者masonry會使所有的圖像都顯示爲lazyloading視圖。這是因爲在加載圖像之前它的大小爲0px x 0px。並且所有圖像在加載前都適合可見區域。 Lazyload將全部計爲可見並加載全部。
安排你需要設置
風格=未來圖像中的所有空間 「寬:xxpx;高度:xxpx;」
只是寬度= 「XX」 和高度= 「xx」 是不夠
所以圖像佔位符作爲成爲:
<img src="http:..1x1px" data-original="http://real_image" style="width:xxpx;height:xxpx;">
然後應用延遲加載正常的方式,和砌築。以任何順序。
重要 - 砌築更新寬度,以它的列的大小,而不是高度,所以如果你的列大小= 50像素,那麼你需要計算佔位
的HEIGHnew_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);
}
}
});
});
softk5答案不適合我並導致大部分瀏覽器凍結。這是我的以下代碼和它爲我工作。
jQuery(document).ready(function(){
jQuery("img.lazy").lazyload({
effect: 'fadeIn',
effectspeed: 1000,
threshold: 200,
load:function(){
var $container = jQuery('.is_masonry');
$container.masonry({
}).imagesLoaded(function() { $container.masonry(); });
}
});
});
你可以做一樣的lazyload所以我可以看到它搞砸了嗎? – 2012-04-10 20:57:56
是的,我剛剛放入惰性負載 - 它在鉻中工作,它只是完全混亂! – user554954 2012-04-10 21:06:35
好的,我剛剛注意到它似乎現在可以在Chrome中完美工作,但是在opera和firefox中奇怪的加載會發生同樣的奇怪效果! – user554954 2012-04-10 21:28:58