Ng-lazyload-image: λ·°ν¬νŠΈμ— λ‚˜νƒ€λ‚˜λŠ” 이미지 λ‘œλ“œ

에 λ§Œλ“  2019λ…„ 03μ›” 29일  Β·  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. 슀크둀 μ΄λ²€νŠΈμ™€ activeRecipeIndex (κ·€ν•˜μ˜ 경우)λ₯Ό λ³€κ²½ν•˜λŠ” 이벀트λ₯Ό λ³‘ν•©ν•˜λŠ” μžμ‹ λ§Œμ˜ scrollObservable λ₯Ό λ§Œλ“­λ‹ˆλ‹€. μ›ν•˜μ‹œλ©΄ λ„μ™€λ“œλ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  5 λŒ“κΈ€

μ΄μƒν•˜κ²Œ λ“€λ¦¬λ„€μš”. μ–΄λ–€ λ²„μ „μ˜ ng-lazyload-image λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? μ–΄λ–€ λΈŒλΌμš°μ €λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? 이것은 λ‹€λ₯Έ λΈŒλΌμš°μ €(firefox/chrome/safari/edige/ios/android)μ—μ„œλ„ λ™μΌν•œ λ™μž‘μž…λ‹ˆκΉŒ? μŠ€ν¬λ‘€μ„ μ‹œμž‘ν•  λ•ŒκΉŒμ§€ 이미지가 λ‘œλ“œλ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆκΉŒ?
였λ₯˜λ₯Ό μž¬ν˜„ν•˜κΈ° μœ„ν•΄ μž‘μ€ μ €μž₯μ†Œλ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆκΉŒ? μ•„λ‹ˆλ©΄ gif/λ™μ˜μƒμ„ λ…Ήν™”ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

Chrome, Firefox 및 Edgeμ—μ„œ λ™μΌν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 지연 λ‘œλ“œλœ 이미지가 μžˆλŠ” ꡬ성 μš”μ†Œμ—μ„œ [hidden](기본적으둜 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. 슀크둀 μ΄λ²€νŠΈμ™€ activeRecipeIndex (κ·€ν•˜μ˜ 경우)λ₯Ό λ³€κ²½ν•˜λŠ” 이벀트λ₯Ό λ³‘ν•©ν•˜λŠ” μžμ‹ λ§Œμ˜ scrollObservable λ₯Ό λ§Œλ“­λ‹ˆλ‹€. μ›ν•˜μ‹œλ©΄ λ„μ™€λ“œλ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”, @tjoskar μ €λŠ” [offset]=800 λ₯Ό μ‚¬μš©ν•˜μ—¬ 이 문제λ₯Ό ν•΄κ²° ν–ˆμ§€λ§Œ 이것이 ν•΄κ²°ν•˜λŠ” κ°€μž₯ μ μ ˆν•œ 방법인지 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. μ–΄λ–»κ²Œ μƒκ°ν•˜μ‹œλ‚˜μš”?

κ°μ‚¬ν•©λ‹ˆλ‹€ @tjoskar μž‘λ™ν•©λ‹ˆλ‹€ :) 첫 번째 μ˜΅μ…˜μ„ μ„ νƒν•©λ‹ˆλ‹€ :)

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰