@@ -14,27 +14,26 @@ let observedNodes = new Map<HTMLElement, RectProps>();
1414let rafId : number ;
1515
1616let run = ( ) => {
17- observedNodes . forEach ( state => {
18- if ( state . hasRectChanged ) {
19- state . callbacks . forEach ( cb => cb ( state . rect ) ) ;
20- state . hasRectChanged = false ;
17+ const changedStates : RectProps [ ] = [ ] ;
18+ observedNodes . forEach ( ( state , node ) => {
19+ let newRect = node . getBoundingClientRect ( ) ;
20+ if ( rectChanged ( newRect , state . rect ) ) {
21+ state . rect = newRect ;
22+ changedStates . push ( state ) ;
2123 }
2224 } ) ;
2325
24- window . setTimeout ( ( ) => {
25- observedNodes . forEach ( ( state , node ) => {
26- let newRect = node . getBoundingClientRect ( ) ;
27- if ( rectChanged ( newRect , state . rect ) ) {
28- state . hasRectChanged = true ;
29- state . rect = newRect ;
30- }
31- } ) ;
32- } , 0 ) ;
26+ changedStates . forEach ( state => {
27+ state . callbacks . forEach ( cb => cb ( state . rect ) ) ;
28+ } ) ;
3329
3430 rafId = window . requestAnimationFrame ( run ) ;
3531} ;
3632
37- export default ( node : HTMLElement , cb : Function ) => {
33+ export default function observeRect (
34+ node : HTMLElement ,
35+ cb : ( rect : DOMRect ) => void
36+ ) {
3837 return {
3938 observe ( ) {
4039 let wasEmpty = observedNodes . size === 0 ;
@@ -65,7 +64,7 @@ export default (node: HTMLElement, cb: Function) => {
6564 }
6665 }
6766 } ;
68- } ;
67+ }
6968
7069export type PartialRect = Partial < DOMRect > ;
7170
0 commit comments