2017-08-22 4 views
0

J'utilise le Isotope plugin pour la grille d'une page Wordpress. Je voudrais utiliser l'option imagesLoaded d'Isotope afin d'éviter que les images sur le chevauchement de page lorsque la page est chargée. Quelqu'un peut-il m'expliquer où et comment dans mon code existant je dois utiliser imagesLoaded?Isotope Plugin: Comment utiliser l'option imagesLoaded?

jQuery(function ($) { 

    var $container = $('#isotope-list');   
    $container.isotope({       
     itemSelector : '.item', 
     layoutMode : 'masonry', 
     percentPosition: true 
    }); 


    //Add the class selected to the item that is clicked, and remove from the others 
    var $optionSets = $('#filters'), 
    $optionLinks = $optionSets.find('a'); 

    $optionLinks.click(function(){ 
    var $this = $(this); 
    // don't proceed if already selected 
    if ($this.hasClass('selected')) { 
     return false; 
    } 
    var $optionSet = $this.parents('#filters'); 
    $optionSets.find('.selected').removeClass('selected'); 
    $this.addClass('selected'); 

    //When an item is clicked, sort the items. 
    var selector = $(this).attr('data-filter'); 
    $container.isotope({ filter: selector }); 

    return false; 
    }); 

}); 

MISE À JOUR:

J'ai essayé d'ajouter imagesLoaded mais il provoque le plugin Isotope d'arrêter de travailler complètement. Voici le code avec imagesLoaded ajouté:

jQuery(function ($) { 

    var $container = $('#isotope-list').imagesLoaded(function() { 
     $container.isotope({ 
      itemSelector : '.item', 
      layoutMode : 'masonry', 
      percentPosition: true 
     }); 
    }); 

    //Add the class selected to the item that is clicked, and remove from the others 
    var $optionSets = $('#filters'), 
    $optionLinks = $optionSets.find('a'); 

    $optionLinks.click(function(){ 
    var $this = $(this); 
    // don't proceed if already selected 
    if ($this.hasClass('selected')) { 
     return false; 
    } 
    var $optionSet = $this.parents('#filters'); 
    $optionSets.find('.selected').removeClass('selected'); 
    $this.addClass('selected'); 

    //When an item is clicked, sort the items. 
    var selector = $(this).attr('data-filter'); 
    $container.isotope({ filter: selector }); 

    return false; 
    }); 

}); 

Je suis un lien vers le script imagesLoaded dans l'en-tête de la page mais je reçois l'erreur suivante lors de l'inspection de la page dans Chrome:

Error

+0

Où avez-vous essayé d'ajouter jusqu'ici? Vous pouvez l'appeler avant ou après l'initialisation d'Isotope, alors lequel avez-vous essayé qui vous a causé les problèmes? – FluffyKitten

+0

Si vous [lisez les docs] (https://isotope.metafizzy.co/layout.html#imagesloaded), vous saurez comment le faire. Il vient même avec une démo éditable et etc. – Terry

+0

Copie possible de [Isotope ne fonctionne pas avec imagesLoaded?] (Https://stackoverflow.com/questions/23387010/isotope-not-working-with-imagesloaded) – Terry

Répondre

1

vous pouvez reporter initialisant Isotope jusqu'à ce que toutes vos images ont chargé en le faisant dans la fonction de rappel, par exemple:

var $container = $('#isotope-list').imagesLoaded(function() { 
    $container.isotope({ 
     itemSelector : '.item', 
     layoutMode : 'masonry', 
     percentPosition: true 
    }); 
}); 

Ou vous pouvez initialiser Isotope, puis déclencher la mise en page après le chargement des images.

// initialise Isotope 
var $container = $('#isotope-list');   
$container.isotope({       
    itemSelector : '.item', 
    layoutMode : 'masonry', 
    percentPosition: true 
}); 

// layout Isotope again after all images have loaded 
$container.imagesLoaded().progress(function() { 
    $container.isotope('layout'); 
}); 

Ref: https://isotope.metafizzy.co/faq.html

+0

Merci pour la réponse. Malheureusement, la mise en œuvre de votre première solution fait en sorte qu'Isotope ne fonctionne plus entièrement, mais je ne vois pas pourquoi. J'ai simplement ajouté .imagesLoaded au code existant (comme vous le suggérez dans votre réponse) – JoSch

+0

Et que s'est-il passé lorsque vous avez essayé la 2ème voie? Aussi, je présume que vous avez inclus la bibliothèque imageLoaded, comme vous avez dit que vous vouliez l'utiliser? – FluffyKitten

0

Sans un lien pour voir le reste de votre code, je fais une supposition basée sur votre erreur de journal de la console. La console montre que "imagesLoaded n'est pas une fonction" indiquant que le fichier imagesLoaded.js n'est pas chargé en tant que script ou chargé de manière incorrecte. Les premières versions d'isotope contenaient des imagesloaded mais la version actuelle ne le fait pas (v3), il faut donc le charger séparément. Assurez-vous que imagesLoaded.js et isotope.js sont chargés après jQuery.