jquery 同位素重叠图像?

nukf8bse  于 2022-11-29  发布在  jQuery
关注(0)|答案(5)|浏览(140)

看起来只有Chrome和Safari才会出现这种情况,而Firefox不会。我使用的是基础响应框架,所以我不知道该怎么设置高度。而且Chrome/Safari中的图片之间似乎没有足够的间距。
我该如何解决这个问题?
编辑:这里是一个小提琴http://jsfiddle.net/TLjay/
它的问题是,它似乎没有显示的问题,我有..所以我不知道该怎么办..我已经尝试禁用一切,但同位素..所有jquery/css和它仍然缩小图像在Chrome/Safari,但它的罚款在火狐。
此外,如果我点击“所有”下的过滤器,它拉伸页面,以如何它的假设看起来,这样可能有助于弄清楚这一点
我让它与imagesLoaded一起工作,所以它给了足够的空间,但图像的左边和右边的空间仍然不在它应该在的地方。我的脚本如下

<script type="text/javascript">
    var $container = $('.isosort')
    // initialize Isotope
        $container.isotope({
            // options...
            resizable: false, // disable normal resizing
            layoutMode : 'fitRows',
            animationEngine : 'best-available',

            // set columnWidth to a percentage of container width
            masonry: { columnWidth: $container.width() / 5 }
        });

        // update columnWidth on window resize
        $(window).smartresize(function(){
            $container.isotope({
            // update columnWidth to a percentage of container width
            masonry: { columnWidth: $container.width() / 5 }
            });
        });
        $container.imagesLoaded( function(){

                $container.isotope({
            // options...
                });
        });

        $('#filters a').click(function(){
            var selector = $(this).attr('data-filter');
            $container.isotope({ filter: selector });
            return false;
        });
    </script>
1aaf6o9v

1aaf6o9v1#

更新(* 原始答案错误,因为浏览器使用了缓存图像..*)

问题似乎是图像未加载,计算失败。
如果您将isotop代码 Package 在$(window).load(function(){ ..... });中,它似乎可以按预期工作。
请参阅http://jsfiddle.net/TLjay/2/
不知道为什么会发生这种情况,但一个简单的解决办法是(* 因为一旦调整窗口大小,它就会得到修复 *)手动调用resize
因此只需在代码末尾添加$(window).resize();即可修复它。
http://jsfiddle.net/TLjay/1/上演示

ljsrvy3e

ljsrvy3e2#

imagesLoaded的工作原理是检查当前包含元素中的图像。所以在您的例子中,它实际上并没有在$(window).load()中做任何事情,因为该元素中没有任何项。相反,我建议在用$. AJAX .success插入项后再次触发imagesLoaded

success: function(data){
    // Update isotope container with new data. 
    $container.isotope('remove', $container.data('isotope').$allAtoms )
    $container.isotope('insert', $(data) )
      // trigger isotope again after images have been loaded
      .imagesLoaded( function() {
        $container.isotope('reLayout');
      });
    }
});
eoigrqb6

eoigrqb63#

如果您有可用的图像尺寸,则可以使用SVG占位符来解决此问题。
例如:使用图元素并使用“position:绝对”。
这样,isotope使用SVG渲染网格元素,SVG占据空间并将img放在其上。

<figure>
<svg xmlns="http://www.w3.org/2000/svg"
  width="[inputKnownImageWidth]"
  height="[inputKnownImageHeight]"
></svg>
<img src="" alt="">
</figure>
neekobn8

neekobn84#

在调用同位素方法之前,您应该确保预加载所有图像,以下是该方法的真实的演示:http://gbin1.com/gb/demoviewer/360/06242ba0-40a1-45fd-946f-cc89e0df64c9/index.html.htm,您使用jquery.imagesloaded.min.js插件预加载图像,然后调用isotope,内容不会重叠。

qv7cva1a

qv7cva1a5#

这里有同位素重叠的解决方案。也为同位素过滤器与搜索和加载更多的代码。
该代码在WEBFLOW中也能正常工作

<script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.js"></script>
<script>

$(window).on('load', function(){
setTimeout(function(){ 
        //Isotope Code place here 
     
 // external js: isotope.pkgd.js

  // store filter for each group
  var buttonFilters = {};
  var buttonFilter;
  // quick search regex
  var qsRegex;

  // init Isotope
 
  var $grid = $('.mentor-lisitng').isotope({
    itemSelector: '.mentor-col',
    layoutMode: 'fitRows',
    filter: function() {
      var $this = $(this);
      var searchResult = qsRegex ? $this.text().match( qsRegex ) : true;
      var buttonResult = buttonFilter ? $this.is( buttonFilter ) : true;
      return searchResult && buttonResult;
    },

  });
 

  // use value of search field to filter
  var $quicksearch = $('.quicksearch').keyup( debounce( function() {
    qsRegex = new RegExp( $quicksearch.val(), 'gi' );
    $grid.isotope();
  }) );
  // use value of search field to filter
var $quicksearch = $('.iso-search button').on( 'click',function() {

    qsRegex = new RegExp( document.getElementById('quicksearch').value, 'gi' );
  $grid.isotope();
});

// Search when someone pushes enter in the text field
$("#quicksearch").click(function(e){ 
     if(e.key === 16 || e.key === 13 || e.key === 'Enter') {
qsRegex = new RegExp( document.getElementById('quicksearch').value, 'gi' );
  $grid.isotope();
     }
});


  $('.filter-dropdown').on( 'click', '.w-dyn-item', function() {
    //   loadMore(initShow);
    //   $('#load-more').show();
    var $this = $(this);
    // get group key
    var $buttonGroup = $this.parents('.w-dyn-items');
    var filterGroup = $buttonGroup.attr('data-filter-group');
    // set filter for group
    buttonFilters[ filterGroup ] = $this.attr('data-filter');
    // combine filters
    buttonFilter = concatValues( buttonFilters );
    // Isotope arrange
    $grid.isotope();
    $('.filter-dropdown .w-dyn-items > .w-dyn-item:first-child').each(function(){
      if($('.filter-dropdown .w-dyn-items > .w-dyn-item:first-child').hasClass('is-checked') && $('.ui-group:nth-child(2) .button-group > button:first-child').hasClass('is-checked') && $('.ui-group:nth-child(3) .button-group > button:first-child').hasClass('is-checked') && $('.filter-dropdown .w-dyn-items > .w-dyn-item:first-child').hasClass('is-checked')){
        loadMore(initShow);
        $('#load-more').show();
      }else{
        $('#load-more').hide();
      }
    });
    loadMore(initShow);
  });

  

  // change is-checked class on buttons
  $('.filter-dropdown .w-dyn-items').each( function( i, buttonGroup ) {
    var $buttonGroup = $( buttonGroup );
    $buttonGroup.on( 'click', '.w-dyn-item', function() {

      $buttonGroup.find('.is-checked').removeClass('is-checked');
      $( this ).addClass('is-checked');

      if ($(".filter-dropdown .w-dyn-items").length > 0) {
        $(".mentor-col").removeClass("hidden");
        $("#load-more").hide();
        //       $(".noResult").show();
      }

    });

  });

  // flatten object by concatting values
  function concatValues( obj ) {
    var value = '';
    for ( var prop in obj ) {
      value += obj[ prop ];
    }
    return value;
  }

  // debounce so filtering doesn't happen every millisecond
  function debounce( fn, threshold ) {
    var timeout;
    threshold = threshold || 100;
    return function debounced() {
      clearTimeout( timeout );
      var args = arguments;
      var _this = this;
      function delayed() {
        fn.apply( _this, args );
      }
      timeout = setTimeout( delayed, threshold );
    };
  }

//   $('.video-library .ui-group h3, .case-studies-filters .ui-group h3').on('click', function() {
//     $(this).parent().toggleClass('filter-open');
//   });

  
 


  
  // init Isotope
  var $container = $('.mentor-lisitng').isotope({
    itemSelector: '.mentor-col',
    layoutMode: 'fitRows',
  });


  //****************************
  // Isotope Load more button
  //****************************
  
  var initShow = 8; //number of images loaded on init & onclick load more button
  var counter = initShow; //counter for load more button
  var iso = $container.data('isotope'); // get Isotope instance

  loadMore(initShow); //execute function onload

  //append load more button
  $container.after('<div class="fullwidth load-btn"><button id="load-more" class="link-19">See more</button></div>');
  function loadMore(toShow) {
    $container.find(".hidden").removeClass("hidden");

    var hiddenElems = iso.filteredItems.slice(toShow, iso.filteredItems.length).map(function(item) {
      return item.element;
    });
    var count_items = $(hiddenElems).length;
    $(hiddenElems).addClass('hidden');
    $container.isotope('layout');

    //when no more to load, hide show more button
    if (count_items > 0) {
      $("#load-more").show();
    } 
    else {
      $("#load-more").hide();
    };
    
  }


  //when load more button clicked
  $("#load-more").click(function() {
    if ($('.filter-dropdown .w-dyn-items').data('clicked')) {
      //when filter button clicked, set initial value for counter
      counter = initShow;
      $('.filter-dropdown .w-dyn-items').data('clicked', false);
    } else {
      counter = counter;
    };
 
    counter = counter + initShow;

    loadMore(counter);
  });

  $(".filter-dropdown .w-dyn-items").click(function() {
    $(this).data('clicked', true);
    loadMore(initShow);
  });
  // Show message if there were no results
  $container.on( 'layoutComplete', function( event, laidOutItems ) {
    if ( laidOutItems.length == 0 ) {
      $(".no-results").show();
    } else if ( $(".no-results").length ) {
      $(".no-results").hide();
    }
  });
  
   
 $('.filter-dropdown').on('click', function() {
    $(this).toggleClass('filter-open');
  }); 
  $('.filter-dropdown .w-dyn-item').on('click', function() {
    $(this).parents().find('filter-open').removeClass('filter-open');
  });

  var seen = {};
  $('.filter-dropdown .w-dyn-item>div').each(function() {
    var txt = $(this).text();
    if (seen[txt])
      $(this).remove();
    else
      seen[txt] = true;
  });

  $('.filter-dropdown').on('click', '.w-dyn-item', function() {
    $(".dropdown-btns-mobile>div").text($(this).text().replace('.', ' '));

  });
  $grid.isotope('layout');
    return false;
    }, 3000);
  });
  
 

 </script>

相关问题