Autor | Zpráva | ||
---|---|---|---|
4li1985 Profil |
Zdravím.
Chcem vás skúsenejších poprosiť o radu, keďže neovládam JS, neviem si rady a potrebujem vyriešiť jeden problém. Za pomoc viem zaplatiť. Na stránke používam Masonry / Isotope skript (isotope.metafizzy.co), ktorým dosiahnem to, že sa mi jednotlivé divs na stránka zarovnajú pod seba - Pinterest efekt: Zároveň chcem použit Lazyload skript (github.com/aFarkas/lazysizes), ktorý načítava obrázky postupne pri scrollovaní, tj. až keď sú viditeľné. Zrýchli sa tým načítanie stránky. Problém je, že keď sa tieto dva skripty použijú, tak Isotope nefunguje správne (jednotlivé divs sa zobrazujú cez seba a celý layout je tzv. scrambled) Dole je môj kód. Samostatne každý skript funguje, ale dokopy to robí problém. Našiel som na stackoverflow nejaké riešenia, ale neovládam JS a neviem si s tým pomôcť. Za riešenie viem zaplatiť. Ďakujem. Edit: Riešenie som našiel tu, ale neviem to aplikovať na môj web. <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="/js/jquery.isotope.min.js" ></script> <script> $.Isotope.prototype._getCenteredMasonryColumns = function() { this.width = this.element.width(); var parentWidth = this.element.parent().width(); // i.e. options.masonry && options.masonry.columnWidth var colW = this.options.masonry && this.options.masonry.columnWidth || // or use the size of the first item this.$filteredAtoms.outerWidth(true) || // if there's no items, use size of container parentWidth; var cols = Math.floor( parentWidth / colW ); cols = Math.max( cols, 1 ); // i.e. this.masonry.cols = .... this.masonry.cols = cols; // i.e. this.masonry.columnWidth = ... this.masonry.columnWidth = colW; }; $.Isotope.prototype._masonryReset = function() { // layout-specific props this.masonry = {}; // FIXME shouldn't have to call this again this._getCenteredMasonryColumns(); var i = this.masonry.cols; this.masonry.colYs = []; while (i--) { this.masonry.colYs.push( 0 ); } }; $.Isotope.prototype._masonryResizeChanged = function() { var prevColCount = this.masonry.cols; // get updated colCount this._getCenteredMasonryColumns(); return ( this.masonry.cols !== prevColCount ); }; $.Isotope.prototype._masonryGetContainerSize = function() { var unusedCols = 0, i = this.masonry.cols; // count unused columns while ( --i ) { if ( this.masonry.colYs[i] !== 0 ) { break; } unusedCols++; } return { height : Math.max.apply( Math, this.masonry.colYs ), // fit container to columns that have been used; width : (this.masonry.cols - unusedCols) * this.masonry.columnWidth }; }; $('#container').isotope({ // options itemSelector: '.box', layoutMode: 'masonry', }); // scroll event to fire masonry $(document).ready(function(){ $(window).scroll(function(){ if ($(window).scrollTop() > 300){ $grid.masonry('layout'); } }); }); </script> <script src="/js/lazysizes.min.js" ></script> |
||
Kajman Profil |
Tipuji, že tu není důležitý javasript, ale css. V první řadě musíte těm divům určit výslednou velikost, i když obrázek není určen (načten). V html je tedy potřeba označit divy, jaký mají poměr a v css si např. nachystat všechny varianty poměrů. Buď podle ukázky, co jste poslal nebo např. podle www.vzhurudolu.cz/prirucka/pruzna-media
Edit: Poměr se tuším u nových verzí prohlížečů určí i podle atributů width a height u img, takže pokud je příliš moc poměrů a nevadí nefunkčnost ve starých prohlížečích, mohlo by stačit toto. |
||
Časová prodleva: 13 dní
|
|||
4li1985 Profil |
Kajman:
Ďakujem za radu. Išiel som to riešiť, ale v tom ma napadlo veľmi jednoduché riešenie. Problém bol v tom, že Lazysizes skript požaduje, aby bol zdroj obrázku uvedený ako <img data-src=".....">, ale Isotope skript hladá zdrojový obrázok štandardne v src="", a keďže nebol určený, tak nefungoval správne. Pridal som teda src atribút a do neho URL na transparentný obrázok, ktorý sa natiahne podľa potreby. Vďaka Lazysizes skripte sa transparentný obrázok zmení na požadovaný hneď ako je viditeľný vo viewporte. Hope it make sense ;) |
||
Kajman Profil |
#4 · Zasláno: 22. 4. 2021, 15:36:22
A funguje to dobře, i když má černý obrázek jiný poměr než později načtený?
|
||
Časová prodleva: 4 dny
|
|||
4li1985 Profil |
#5 · Zasláno: 26. 4. 2021, 06:09:49
Kajman:
Prekvapivo to funguje. |
||
Časová prodleva: 3 roky
|
0