рдкреНрд░реАрдмреВрдЯ (https://github.com/angular/preboot) рдмрдирд╛рддрд╛ рд╣реИ рдкреВрд░рд╛ рдРрдк рд╢реБрд░реБрдЖрдд рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЖрд▓рд╕реА рд▓реЛрдб рдШрдЯрдХ рдХреЛ рдЫрд╡рд┐ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ - рдлрд╝рдВрдХреНрд╢рди isVisible
рдЭреВрдард╛ рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИред
fromElement
рдореЗрдВ rect.ts
getBoundingClientRect
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ 0 рдЖрдпрд╛рдо рджреЗрддрд╛ рд╣реИред
рддреНрд╡рд░рд┐рдд рд╕рдорд╛рдзрд╛рди offset
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 1
рдЬреЛ intersectsWith
true
рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рд╣рд╛рдп @ lares83 ,
рдореБрдЭреЗ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдХрд╛рдлреА рдкреЗрдЪреАрджрд╛ рдореБрджреНрджрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬрд╛рдирдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЫрд╡рд┐ рдХрдм рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред
рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░ offset=1
рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡рд┐рдХрдлрд┐рдХреНрд╕ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рд╕рднреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рднрд▓реЗ рд╣реА рд╡реЗ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдореЗрдВ рди рд╣реЛрдВред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ ng-lazyload-image
рдкрд╛рд╕ рдпрд╣ рдЬрд╛рдирдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЫрд╡рд┐ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╣рд╛рдВ рд╣реИ рдФрд░ рдЙрд╕ рд╕рдордп рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИ (рдЬрдм рддрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░реЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рддрдм рддрдХ рд╣рдореЗрдВ рдХреЛрдИ рдирдпрд╛ рдИрд╡реЗрдВрдЯ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛)ред
рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ PrebootComplete
рдИрд╡реЗрдВрдЯ рдХреЛ рд╕реБрдирдирд╛ рд╣реИ:
constructor() {
this.scrollAndPrebootComplete$ = Observable.merge(
Observable.fromEvent(window, 'scroll'),
Observable.fromEvent(window, 'PrebootComplete')
);
}
рдФрд░ рдлрд┐рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ:
<img [lazyLoad]="lazyLoadImage" [scrollObservable]="scrollAndPrebootComplete$" />
рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ lazyLoad
рд▓рдкреЗрдЯрддрд╛ рд╣реИ рдФрд░ scrollAndPrebootComplete$
рд╕рд╛рде рдЧреБрдЬрд░рддрд╛ рд╣реИред
рдПрдХ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди IntersectionObserver
рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП #304 рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рддреНрд╡рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдСрдлрд╕реЗрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 1 рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдХреЛ рд╕рд╣реА рдмрдирд╛рддрд╛ рд╣реИред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓реВрдВрдЧрд╛ред
рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдКрдкрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓реВрдВрдЧрд╛ред