用ajax调用项目后的同位素重叠

时间:2015-04-27 21:38:35

标签: jquery ajax jquery-isotope jquery-masonry fullpage.js

我在网站上工作并使用fullpage.js,有两个部分,我添加了一个链接,根据点击的图库链接使用ajax打开第二部分的图库,所以内容发生了变化..我使用同位素进行图像布局,但问题是在ajax调用后图像重叠,即使我使用$container.isotope( 'layout' );

index.php

<div class="section">
    <div class="slide">
      <a href="#" class="gallery-link" data-id="1"></a>
      <a href="#" class="gallery-link" data-id="2"></a>
      <a href="#" class="gallery-link" data-id="3"></a>
    </div>
    <div class="slide"></div>
    ...
</div>
<div class="section">
    <div class="ajax_content"></div>
</div>

现在当我点击一个链接时,它应该调用ajax请求并从另一个页面获取数据(ajax.php

<?php foreach( $images as $image ): ?>
       <div class="item">
          <a class="fancylink" rel="sketch" href="<?php echo $image['url']; ?>">
             <img class="img-responsive" src="<?php echo $image['sizes']['large']; ?>"/>
          </a>
       </div>
<?php endforeach; ?>

和点击这样的调用方法。

$('.slide').on('click','a',function(){

        var url = "ajax.php";
        var gid = $(this).data('id');
            $.ajax({
                 type : 'post',
                 url : url,
                 data : {
                     galleryid: gid
                 },
                 success : function( response ) {

                   $('.ajax_content').html('<div class="content" id="gallery-container">'
                   +'<div class="isotope">'+response+'</div></div>');

                   var $container = $('.isotope');

                   $container.isotope({
                         itemSelector: '.item',
                         masonry: {
                             columnWidth: 160,
                             isFitWidth: true
                         }
                   });

                   setTimeout(function(){
                        $container.isotope( 'layout' );
                   },100);

                       $.fn.fullpage.moveTo(3,0);
                   },

                       error: function( message ){
                            console.log(message);
                       }
                    });
                    return false;
 });

2 个答案:

答案 0 :(得分:3)

你需要使用imagesloaded.js,它允许在同位素激发之前加载所有图像。如果您使用的是同位素v2(图像加载不包含在v1.56中),请下载并将脚本添加到您的页面,然后像这样调用同位素:

 var $container = $('.isotope');
 $container.imagesLoaded( function() {
  $container.isotope({
      itemSelector: '.item',
      masonry: {
        columnWidth: 160,
        isFitWidth: true
    }
      });
});

答案 1 :(得分:2)

如果您隐藏图像并在加载(单独)时逐步显示图像

,该怎么办?

让我给你举个例子:

您的HTML将是这样的

<div class="grid">
    <div class="item"> <img src="test.jpg"> </div>
    <div class="item"> <img src="test.jpg"> </div>
    <div class="item"> <img src="test.jpg"> </div>
    <div class="item"> <img src="test.jpg"> </div>
</div>

然后用CSS隐藏你的图像

.item img {
   display: none;
}

现在你初始化Isotope

$('.grid').isotope({
    itemSelector: '.item',
    percentPosition: true,
});

最后在imagesLoaded插件的帮助下显示您的图片,因为它们会像您一样加载到您的页面中

$('.grid').imagesLoadedMB().progress( function(instance, imageObj) {
    $(imageObj.img).fadeIn(300);
    $('.grid').isotope('layout');
});