Masonry 事件:在 imagesLoaded 和 layoutComplete 之后调用事件
Masonry Events: Call event after imagesLoaded and layoutComplete
这就是我想要做的。我有一个包含大量图像的网格,所以我将 imagesLoaded 库与砌体一起使用。
这是我的 CSS:
.grid {
opacity:0;
}
和HTML:
<div class="grid">
<div class="grid-sizer"></div>
<div class="gutter-sizer"></div>
<div class="item">image</div>
<div class="item">image</div>
<div class="item">image</div>
</div>
这是我的 JS:
var $container = $('.grid');
// initialize Masonry after all images have loaded
$container.imagesLoaded( function() {
$container.masonry({
columnWidth: '.grid-sizer',
itemSelector: '.item',
gutter: '.gutter-sizer'
});
$container.masonry('on', 'layoutComplete', function(){
console.log('got here');
$container.animate({'opacity':1});
});
});
我的目标是隐藏网格,直到加载所有图像且布局完成,然后淡入。由于某些原因,在我上面的代码中,它永远不会进入 on layoutComplete 块。
如果我将该块移到 imagesLoaded 之外,则 $container.masonry 未定义该点。
有什么想法吗?
如果将网格不透明度更改为 1,您可以看到一切都布置得很好。只是想弄清楚如何让 layoutComplete 调用以将不透明度设置为 1。
您不需要在砌体上使用 layoutComplete
事件。因为你可以在砌体初始化下添加你的动画代码。
当所有图片加载完成后,imageLoaded 函数将执行。然后,您可以像这样创建砖石对象并立即设置动画:
var $grid = $('.grid').imagesLoaded( function() {
// init Masonry after all images have loaded
$grid.masonry({
columnWidth: 200,
itemSelector: '.item',
gutter: 10
});
console.log('got here');
$('.grid').animate({'opacity':1});
});
这是一个 jsfiddle 证明
jQuery(document).ready(function($){
var wdm_wait = function(){
jQuery("body").find("img").each(function(i) {
if(!this.complete)
{
return false;
}
});
// when code reaches here Its assured that all the images are loaded
clearInterval(waiting);
console.log('got here');
var $container = $('.grid');
// initialize Masonry after all images have loaded
$container.masonry({
columnWidth: 100,
itemSelector: '.item',
gutter: 10
});
$container.animate({'opacity':1});
}
waiting = setInterval(wdm_wait,100);
});
这肯定会确保您的 js 代码仅在所有图像都已加载(呈现)后执行
希望对您有所帮助! :)
你试过这个吗,我想这就是你的答案
var $container = $('.grid').masonry({
columnWidth: 200,
itemSelector: '.item',
gutter: 10
});
$container.masonry( 'on', 'layoutComplete', function() {
$container.animate({'opacity':1});
});
$container.masonry();
这就是我想要做的。我有一个包含大量图像的网格,所以我将 imagesLoaded 库与砌体一起使用。
这是我的 CSS:
.grid {
opacity:0;
}
和HTML:
<div class="grid">
<div class="grid-sizer"></div>
<div class="gutter-sizer"></div>
<div class="item">image</div>
<div class="item">image</div>
<div class="item">image</div>
</div>
这是我的 JS:
var $container = $('.grid');
// initialize Masonry after all images have loaded
$container.imagesLoaded( function() {
$container.masonry({
columnWidth: '.grid-sizer',
itemSelector: '.item',
gutter: '.gutter-sizer'
});
$container.masonry('on', 'layoutComplete', function(){
console.log('got here');
$container.animate({'opacity':1});
});
});
我的目标是隐藏网格,直到加载所有图像且布局完成,然后淡入。由于某些原因,在我上面的代码中,它永远不会进入 on layoutComplete 块。
如果我将该块移到 imagesLoaded 之外,则 $container.masonry 未定义该点。
有什么想法吗?
如果将网格不透明度更改为 1,您可以看到一切都布置得很好。只是想弄清楚如何让 layoutComplete 调用以将不透明度设置为 1。
您不需要在砌体上使用 layoutComplete
事件。因为你可以在砌体初始化下添加你的动画代码。
当所有图片加载完成后,imageLoaded 函数将执行。然后,您可以像这样创建砖石对象并立即设置动画:
var $grid = $('.grid').imagesLoaded( function() {
// init Masonry after all images have loaded
$grid.masonry({
columnWidth: 200,
itemSelector: '.item',
gutter: 10
});
console.log('got here');
$('.grid').animate({'opacity':1});
});
这是一个 jsfiddle 证明
jQuery(document).ready(function($){
var wdm_wait = function(){
jQuery("body").find("img").each(function(i) {
if(!this.complete)
{
return false;
}
});
// when code reaches here Its assured that all the images are loaded
clearInterval(waiting);
console.log('got here');
var $container = $('.grid');
// initialize Masonry after all images have loaded
$container.masonry({
columnWidth: 100,
itemSelector: '.item',
gutter: 10
});
$container.animate({'opacity':1});
}
waiting = setInterval(wdm_wait,100);
});
这肯定会确保您的 js 代码仅在所有图像都已加载(呈现)后执行
希望对您有所帮助! :)
你试过这个吗,我想这就是你的答案
var $container = $('.grid').masonry({
columnWidth: 200,
itemSelector: '.item',
gutter: 10
});
$container.masonry( 'on', 'layoutComplete', function() {
$container.animate({'opacity':1});
});
$container.masonry();