2011-12-24 17 views
14

Parece que solo ocurre en Chrome y Safari ... no en Firefox. Lo estoy usando con el marco sensible de la base, así que no estoy seguro de qué hacer para establecer la altura. También parece que no hay suficiente espacio entre las imágenes en Chrome/Safari ...Imágenes superpuestas de isótopos?

¿Cómo puedo solucionar esto?

Editar: Aquí es un violín http://jsfiddle.net/TLjay/

El problema con esto es que no parece estar mostrando el problema que estoy teniendo .. así que no estoy seguro de qué hacer al respecto .. Intenté desactivar todo pero isotopo ... todo jquery/css y aún reduce las imágenes en Chrome/Safari, pero está bien en Firefox.

Además, si me golpeó el "Todo" debajo del filtro se extiende la página a la manera en que su supone que debe mirar por lo que podría ser útil en calcular esto

lo tengo para trabajar con imagesLoaded, por lo que su dándole bastante espacio, pero el espacio de la izquierda y derecha de las imágenes todavía no es donde su supone que debe ser .. mi guión está por debajo

<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> 
+0

Agregue el código a su pregunta por favor. – Abbas

+0

@Abbas pregunta actualizada con un violín –

Respuesta

24

actualización (respuesta original estaba mal ya que el navegador utiliza imágenes en caché ..)

El problema parece ser que las imágenes no se cargan y los cálculos fallan.

Si envuelve el código isótopo en $(window).load(function(){ ..... }); parece que funciona como se esperaba ..

Ver http://jsfiddle.net/TLjay/2/


No estoy seguro de por qué sucede, pero una solución sencilla consiste en ( ya que se pone solucionado una vez que cambie el tamaño de la ventana) para llamar manualmente a resize.

tan sólo añadir $(window).resize(); al final de su código arregla ..

demo en http://jsfiddle.net/TLjay/1/

+3

Sería mejor utilizar el [plugin imagesLoaded incluido] (http://isotope.metafizzy.co/docs/help.html#images). – thirtydot

+0

@thirtydot, cierto ... no soy muy * íntimo * con el complemento 'isotope' .. –

+0

@thirtydot actualizó la publicación principal con imagesLoaded, pero las canalizaciones aún son delgadas, ¿cómo puedo arreglar esa parte? –

7

imagesLoaded funciona al verificar las imágenes que se encuentran actualmente en el elemento contenedor. Entonces, en su caso, en realidad no se hace nada en $ (ventana) .load() ya que no hay elementos en ese elemento. En cambio, recomendaría disparar imagesLoaded nuevamente, después de que los artículos se hayan insertado con $ .ajax.success

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'); 
     }); 
    } 
}); 
+1

Es una buena idea volver a llamar a la retransmisión una vez que se carguen las imágenes. ¡Esto funcionó para mí! – gray

+0

Hola, estoy teniendo el mismo problema, así que me gustaría probar su solución, pero no estoy seguro de dónde poner el código. ¿Después de un código que usa ImagesLoaded? –

+0

añadir este código en tu jQuery llamada AJAX, así: $ .ajax ({ caché: falso, url: getQuery, éxito: function (datos) { $ container.append (divs) .isotope (' anexas', divs, function() {$ container.isotope ('la redistribución'); }); si stButtons() {stButtons.locateElements();}} }); –

Cuestiones relacionadas