Ng-lazyload-image: Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ изобраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² области просмотра

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 29 ΠΌΠ°Ρ€. 2019  Β·  5ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: tjoskar/ng-lazyload-image

ΠΊΠΎΠ³Π΄Π° страница Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π°, изобраТСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° Π»Π΅Π½ΠΈΠ²Ρ‹Π΅ Π² области просмотра, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° начинаСтся ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠ°, изобраТСния ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ, ΠΊΠ°ΠΊ я ΠΌΠΎΠ³Ρƒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ изобраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² области просмотра? Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ @zieka!

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ скрыто, ΠΊΠΎΠ³Π΄Π° ng-lazyload-image запускаСтся, ΠΈ поэтому Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ³Ρ€ΠΎΠΆΠ°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ области просмотра (ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Π½Π΅ отобраТаСтся, ΠΈ Π½Π΅Ρ‚ способа ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ станСт Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ, ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅, Ссли ΠΎΠ½ находится Π² области просмотра).

Однако Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ способа Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

  1. ИспользованиС IntersectionObserver (Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ способ)
    ΠŸΡ€ΠΎΡΡ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ intersectionObserverPreset Π² свой ΠΌΠΎΠ΄ΡƒΠ»ΡŒ:
import { LazyLoadImageModule, intersectionObserverPreset } from 'ng-lazyload-image';

...
LazyLoadImageModule.forRoot({
  preset: intersectionObserverPreset
})
...
  1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ вмСсто скрытого. Если ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ всС Π΅Ρ‰Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ свою ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, Ссли ΠΎΠ½ΠΎ Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ.
  2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ свой собствСнный scrollObservable ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ события ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ ΠΈ событиС, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π΅Π΅ activeRecipeIndex (Π² вашСм случаС). Π― ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Ρ‚Π΅Π±Π΅ с этим, Ссли Ρ…ΠΎΡ‡Π΅ΡˆΡŒ.

ВсС 5 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π—Π²ΡƒΡ‡ΠΈΡ‚ странно. ΠšΠ°ΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ 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 запускаСтся, ΠΈ поэтому Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ³Ρ€ΠΎΠΆΠ°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ области просмотра (ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Π½Π΅ отобраТаСтся, ΠΈ Π½Π΅Ρ‚ способа ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ станСт Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ, ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅, Ссли ΠΎΠ½ находится Π² области просмотра).

Однако Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ способа Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

  1. ИспользованиС IntersectionObserver (Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ способ)
    ΠŸΡ€ΠΎΡΡ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ intersectionObserverPreset Π² свой ΠΌΠΎΠ΄ΡƒΠ»ΡŒ:
import { LazyLoadImageModule, intersectionObserverPreset } from 'ng-lazyload-image';

...
LazyLoadImageModule.forRoot({
  preset: intersectionObserverPreset
})
...
  1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ вмСсто скрытого. Если ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ всС Π΅Ρ‰Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ свою ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, Ссли ΠΎΠ½ΠΎ Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ.
  2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ свой собствСнный scrollObservable ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ события ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ ΠΈ событиС, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π΅Π΅ activeRecipeIndex (Π² вашСм случаС). Π― ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Ρ‚Π΅Π±Π΅ с этим, Ссли Ρ…ΠΎΡ‡Π΅ΡˆΡŒ.

ΠΏΡ€ΠΈΠ²Π΅Ρ‚, @tjoskar, я Π²Ρ€ΠΎΠ΄Π΅ Ρ€Π΅ΡˆΠΈΠ» эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ [offset]=800 , Π½ΠΎ я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ это Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящий способ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это, ΠΊΠ°ΠΊ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅?

Бпасибо @tjoskar, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ :) Π’Ρ‹Π±ΠΈΡ€Π°ΡŽ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ :)

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ