ΠΊΠΎΠ³Π΄Π° ΡΡΡΠ°Π½ΠΈΡΠ° Π·Π°Π³ΡΡΠΆΠ΅Π½Π°, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅ ΠΌΠ΅Π½ΡΡΡΡΡ Π½Π° Π»Π΅Π½ΠΈΠ²ΡΠ΅ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°, ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠ°, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ, ΠΊΠ°ΠΊ Ρ ΠΌΠΎΠ³Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°? ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ½ΠΎΡΡΡ
ΠΠ²ΡΡΠΈΡ ΡΡΡΠ°Π½Π½ΠΎ. ΠΠ°ΠΊΡΡ Π²Π΅ΡΡΠΈΡ ng-lazyload-image
Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅? ΠΠ°ΠΊΠΎΠΉ Π±ΡΠ°ΡΠ·Π΅Ρ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅? Π’Π°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π΄ΡΡΠ³ΠΈΡ
Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ
(firefox / chrome / safari / edige / ios / android)? ΠΡ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ, ΠΏΠΎΠΊΠ° Π²Ρ Π½Π΅ Π½Π°ΡΠ½Π΅ΡΠ΅ ΠΏΡΠΎΠΊΡΡΡΠΊΡ?
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠ΅ΠΏΠΎ Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ? ΠΠ»ΠΈ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π³ΠΈΡΠΊΡ / Π²ΠΈΠ΄Π΅ΠΎ?
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Chrome, Firefox ΠΈ Edge. Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ [ΡΠΊΡΡΡΡΠΉ] (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ true) Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
ΠΠΎΠ³Π΄Π° ΡΠΊΡΡΡΠΎ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° false, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³, Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ), ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠΊΡΡΡΠΊΠ° Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ.
ΠΠΎΠΉ ΡΠ΅Π³ img Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅:
<img [lazyLoad]="recipe.image"
[offset]="100"
src="ng-assets/animations/recipe-loader.gif">
Π ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ:
<app-recipe *ngFor="let recipe of recipes; let i = index;"
[hidden]="activeRecipeIndex !== i"
[recipe]="recipe">
</app-recipe>
ΠΡΠΈΠ²Π΅Ρ @zieka!
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΊΡΡΡΠΎ, ΠΊΠΎΠ³Π΄Π° ng-lazyload-image
Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΡΠ³ΡΠΎΠΆΠ°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° (ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ, ΠΈ Π½Π΅Ρ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ·Π½Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ ΡΡΠ°Π½Π΅Ρ Π²ΠΈΠ΄ΠΈΠΌΡΠΌ, ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΠ΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°).
ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡΡ ΡΡΠΈ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
intersectionObserverPreset
Π² ΡΠ²ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ:import { LazyLoadImageModule, intersectionObserverPreset } from 'ng-lazyload-image';
...
LazyLoadImageModule.forRoot({
preset: intersectionObserverPreset
})
...
scrollObservable
ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ ΠΈ ΡΠΎΠ±ΡΡΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠ΅Π΅ activeRecipeIndex
(Π² Π²Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅). Π― ΠΌΠΎΠ³Ρ ΠΏΠΎΠΌΠΎΡΡ ΡΠ΅Π±Π΅ Ρ ΡΡΠΈΠΌ, Π΅ΡΠ»ΠΈ Ρ
ΠΎΡΠ΅ΡΡ.ΠΏΡΠΈΠ²Π΅Ρ, @tjoskar, Ρ Π²ΡΠΎΠ΄Π΅ ΡΠ΅ΡΠΈΠ» ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ [offset]=800
, Π½ΠΎ Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ, ΠΊΠ°ΠΊ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅?
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @tjoskar, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ :) ΠΡΠ±ΠΈΡΠ°Ρ ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ :)
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΈΠ²Π΅Ρ @zieka!
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΊΡΡΡΠΎ, ΠΊΠΎΠ³Π΄Π°
ng-lazyload-image
Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΡΠ³ΡΠΎΠΆΠ°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° (ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ, ΠΈ Π½Π΅Ρ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ·Π½Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ ΡΡΠ°Π½Π΅Ρ Π²ΠΈΠ΄ΠΈΠΌΡΠΌ, ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΠ΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°).ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡΡ ΡΡΠΈ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅
intersectionObserverPreset
Π² ΡΠ²ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ:scrollObservable
ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ ΠΈ ΡΠΎΠ±ΡΡΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠ΅Π΅activeRecipeIndex
(Π² Π²Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅). Π― ΠΌΠΎΠ³Ρ ΠΏΠΎΠΌΠΎΡΡ ΡΠ΅Π±Π΅ Ρ ΡΡΠΈΠΌ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠ΅ΡΡ.