Mauerwerk & LazyLoad nicht zusammen arbeiten wollen
Ich bin Einrichtung einer Website für einen Fotografen. Es sollte gebaut werden mit der Bootstrap-3-framework, und er will ein Mauerwerk mit über 400 Bildern auf einer Seite. Für diese Arbeit LazyLoad ist ein muss. Ich habe jetzt seit mehreren Tagen versuchen, LazyLoad arbeiten mit Desandros Mauerwerk, aber ohne Erfolg..
Ich habe versucht, die Beispiele, findet man googlen, aber die meisten Beiträge/Websites/Foren leitet nur Sie, oder kopiert diese stackoverflow-Antwort:
die Kombination von LazyLoad und Jquery Mauerwerk
Habe ich versucht, beide Methoden, aber leider bekomme ich nichts außer graue Haare..... 🙁
Hier ist eine vereinfachte Online-version der Seite im arbeiten auf:
http://nr.x10.mx
In diesem Beispiel habe ich einen fade-in auf die Seite laden, aber die Links die LazyLoad, seit ich es bekommen kann, zu arbeiten.
Und hier haben Sie eine GEIGE der folgenden
var container = document.querySelector('#ms-container');
imagesLoaded( container, function()
{
var msnry = new Masonry(container,
{ itemSelector: '.ms-item',
columnWidth: '.ms-item',});
});
Können Sie auch laden Sie das ganze pack hier, einschließlich der jquery.lazyload.js
HIER
Jede Hilfe wäre sehr geschätzt,
UPDATE
Hier können Sie 4 verschiedene Beispiele für die verschiedenen Probleme, die auftreten können.
Ich fand auch zu meiner Freude, dass die Bootstrap - .img-responsive
Klasse wird sich mit LazyLoad.
1 - Mauerwerk ohne LazyLoad
2 - Mauerwerk und Lazyload - Mauerwerk bricht und LazyLoad hat keine Auswirkungen
3 - LazyLoad ohne Mauerwerk - LazyLoad hat keine Auswirkungen
4 - LazyLoad ohne Mauerwerk und Bootsrap "img-responsive" entfernt
6 - Mauerwerk & LazyLoad mit der zweiten Methode, ALSO Antwort oben erwähnt
Die beiden letzten, gibt die folgende Fehlermeldung: [Fehler] TypeError: 'undefined' is not a function (evaluating '$container.imagesLoaded')
global code (5.html, Zeile 110)
Aktualisierte zip - HIER
Wieder, jeder asisstance wäre sehr geschätzt, danke
- Ich bin mir nicht ganz sehen, das problem. Sowohl die Geige und den link, den Sie arbeiten.
- wie erwähnt, habe ich "Links der LazyLoad, da kann ich es auf der Arbeit" in der live-link und der Geige
- Ich sehe. Es macht es schwer für uns zu bestimmen, was falsch gelaufen ist, wenn wir nicht wissen, was Sie versucht haben, obwohl.
- Bitte finden Sie meine aktuelle version oben. Danke
- das ist wie Sie gehen, um zu erreichen, imhonet.ru ? wenn dem so ist, werde ich zu teilen meine exp Gebäude dieser
- Vielen Dank Evgeniy, sieht beeindruckend aus. Aber ich sehe nicht die plugins bereits in meiner Frage..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machte ich Ihr 5.html die Arbeit mit dem javascript-Dateien von der fiddle präsentieren auf der SO link du gepostet hast, beantwortet Nathan Tun. So dass Sie wahrscheinlich nur schlechte Versionen des Skripts.
Die Skripte verlinkt auf dieser Seite:
http://cdn.jsdelivr.net/masonry/2.1.08/jquery.masonry.min.js
undhttp://cdn.jsdelivr.net/jquery.lazyload/1.8.4/jquery.lazyload.js
Hier ist Ihr original fiddle aktualisiert, die Seite ist Methode: http://jsfiddle.net/L9RLe/
width: 200px
mitwidth: 24%
In Ihrem Fall, wenn Sie sind erstellen von Mauerwerk und hinzufügen lazyload Wirkung, die Bilder werden überlappt.
Müssen Sie führen Sie die Schritte wie :
Erstellen Sie Dynamische HTML-Struktur für Bilder, die zusammen mit Ihren jeweiligen Seitenverhältnis von Höhe und Breite. Hinweis: sollen die Bilder mit den benötigten Attributen für die Anwendung von lazy load Effekt, d.h. class="lazy" data-original="eigentliche Bild-url" und src="dummy " imageurl".
Gelten lazy load Effekt.
Dann erstellen Mauerwerk.
Können Sie ein Beispiel :
Angenommen, ich habe ein javascript-array mit einem Bild bezogene Daten,
- Und unterhalb Prototyp für die Erstellung von dynamischen html-Anwendung lazyload-Effekt und erstellen von Mauerwerk-Effekt als :
Wenn Sie das problem Bilder werden überlappt, fand ich die Lösung auf der Webseite unten, es ist zwar in Japanisch.
http://www.webdesignleaves.com/wp/jquery/1340/
Der Punkt ist wie folgt;
$('img.lazy').load(function(){ ... })
HTML
jQuery
Nur dazu beitragen wollen, meine Lösung für dieses leidige problem.
Grundsätzlich müssen Sie rufen Mauerwerk ist
layout()
- Funktion jedes mal, wenn ein Bild lazyloaded, denn das ist, wenn Sie wissen, was Sie Dimensionen gehen werden. So dass Sie setup-lazyload istload()
- Funktion aufrufenmasonry.layout()
. Dies kann die Ursache für ein neues problem, denn auf der ersten Seite geladen, alle Ihre Bilder haben eine null oder nahe-null-Höhe (je nach css), und somit stapeln sich in den top viewport. Beim initialisieren lazyload, es sehen alle diese Bilder im Ansichtsfenster, und versuchen, laden Sie Sie alle auf einmal. Dies bewirkt, dass Sie zum download-Tonnen von Bildern, und noch schlimmer, ruft Mauerwerk Dutzende oder Hunderte Male. Nicht sehr schnell.Meine Lösung ist zu zwingen, eine minimale Höhe auf Bilder entladen, bis Sie lazyloaded. Dies schränkt die Anzahl der Bilder, die gefunden werden im Ansichtsfenster zunächst die Begrenzung der Anzahl von lazyload und Mauerwerk Anrufe auf einen angemessenen Betrag.
Sobald ein Bild geladen ist, entfernen Sie die
.unloaded
- Klasse, um deconstrict die Höhe und ermöglichen es entspricht der Höhe des Bildes.HTML -
CSS
JS