|
73 | 73 | '_scrollTargetChanged(scrollTarget, isAttached)'
|
74 | 74 | ],
|
75 | 75 |
|
| 76 | + /** |
| 77 | + * True if the event listener should be installed. |
| 78 | + */ |
| 79 | + _shouldHaveListener: true, |
| 80 | + |
76 | 81 | _scrollTargetChanged: function(scrollTarget, isAttached) {
|
77 |
| - var eventTarget; |
| 82 | + var eventTarget, hasListener = this._shouldHaveListener; |
78 | 83 |
|
79 | 84 | if (this._oldScrollTarget) {
|
80 |
| - eventTarget = this._oldScrollTarget === this._doc ? window : this._oldScrollTarget; |
81 |
| - eventTarget.removeEventListener('scroll', this._boundScrollHandler); |
| 85 | + this._enableScrollListener(false, this._oldScrollTarget); |
82 | 86 | this._oldScrollTarget = null;
|
83 | 87 | }
|
84 | 88 |
|
|
97 | 101 |
|
98 | 102 | } else if (this._isValidScrollTarget()) {
|
99 | 103 |
|
100 |
| - eventTarget = scrollTarget === this._doc ? window : scrollTarget; |
101 | 104 | this._boundScrollHandler = this._boundScrollHandler || this._scrollHandler.bind(this);
|
102 | 105 | this._oldScrollTarget = scrollTarget;
|
| 106 | + this._enableScrollListener(hasListener, scrollTarget); |
103 | 107 |
|
104 |
| - eventTarget.addEventListener('scroll', this._boundScrollHandler); |
105 | 108 | }
|
106 | 109 | },
|
107 | 110 |
|
|
228 | 231 | */
|
229 | 232 | _isValidScrollTarget: function() {
|
230 | 233 | return this.scrollTarget instanceof HTMLElement;
|
| 234 | + }, |
| 235 | + |
| 236 | + /** |
| 237 | + * Enables or disables the scroll event listener |
| 238 | + * |
| 239 | + * @param {boolean} yes True to add the event, False to remove it |
| 240 | + * @param {HTMLElement} scrollTarget The scroll target |
| 241 | + */ |
| 242 | + _enableScrollListener: function(yes, scrollTarget) { |
| 243 | + if (!this._boundScrollHandler) { |
| 244 | + return; |
| 245 | + } |
| 246 | + var eventTarget = scrollTarget === this._doc ? window : scrollTarget; |
| 247 | + |
| 248 | + if (yes) { |
| 249 | + eventTarget.addEventListener('scroll', this._boundScrollHandler); |
| 250 | + } else { |
| 251 | + eventTarget.removeEventListener('scroll', this._boundScrollHandler); |
| 252 | + } |
| 253 | + this._shouldHaveListener = yes; |
231 | 254 | }
|
| 255 | + |
232 | 256 | };
|
233 | 257 |
|
234 | 258 | </script>
|
0 commit comments