| OLD | NEW |
| 1 /** | 1 /** |
| 2 * `Polymer.IronScrollTargetBehavior` allows an element to respond to scroll e
vents from a | 2 * `Polymer.IronScrollTargetBehavior` allows an element to respond to scroll e
vents from a |
| 3 * designated scroll target. | 3 * designated scroll target. |
| 4 * | 4 * |
| 5 * Elements that consume this behavior can override the `_scrollHandler` | 5 * Elements that consume this behavior can override the `_scrollHandler` |
| 6 * method to add logic on the scroll event. | 6 * method to add logic on the scroll event. |
| 7 * | 7 * |
| 8 * @demo demo/scrolling-region.html Scrolling Region | 8 * @demo demo/scrolling-region.html Scrolling Region |
| 9 * @demo demo/document.html Document Element | 9 * @demo demo/document.html Document Element |
| 10 * @polymerBehavior | 10 * @polymerBehavior |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 value: function() { | 52 value: function() { |
| 53 return this._defaultScrollTarget; | 53 return this._defaultScrollTarget; |
| 54 } | 54 } |
| 55 } | 55 } |
| 56 }, | 56 }, |
| 57 | 57 |
| 58 observers: [ | 58 observers: [ |
| 59 '_scrollTargetChanged(scrollTarget, isAttached)' | 59 '_scrollTargetChanged(scrollTarget, isAttached)' |
| 60 ], | 60 ], |
| 61 | 61 |
| 62 /** |
| 63 * True if the event listener should be installed. |
| 64 */ |
| 65 _shouldHaveListener: true, |
| 66 |
| 62 _scrollTargetChanged: function(scrollTarget, isAttached) { | 67 _scrollTargetChanged: function(scrollTarget, isAttached) { |
| 63 var eventTarget; | 68 var eventTarget; |
| 64 | 69 |
| 65 if (this._oldScrollTarget) { | 70 if (this._oldScrollTarget) { |
| 66 eventTarget = this._oldScrollTarget === this._doc ? window : this._oldSc
rollTarget; | 71 this._toggleScrollListener(false, this._oldScrollTarget); |
| 67 eventTarget.removeEventListener('scroll', this._boundScrollHandler); | |
| 68 this._oldScrollTarget = null; | 72 this._oldScrollTarget = null; |
| 69 } | 73 } |
| 70 | |
| 71 if (!isAttached) { | 74 if (!isAttached) { |
| 72 return; | 75 return; |
| 73 } | 76 } |
| 74 // Support element id references | 77 // Support element id references |
| 75 if (scrollTarget === 'document') { | 78 if (scrollTarget === 'document') { |
| 76 | 79 |
| 77 this.scrollTarget = this._doc; | 80 this.scrollTarget = this._doc; |
| 78 | 81 |
| 79 } else if (typeof scrollTarget === 'string') { | 82 } else if (typeof scrollTarget === 'string') { |
| 80 | 83 |
| 81 this.scrollTarget = this.domHost ? this.domHost.$[scrollTarget] : | 84 this.scrollTarget = this.domHost ? this.domHost.$[scrollTarget] : |
| 82 Polymer.dom(this.ownerDocument).querySelector('#' + scrollTarget); | 85 Polymer.dom(this.ownerDocument).querySelector('#' + scrollTarget); |
| 83 | 86 |
| 84 } else if (this._isValidScrollTarget()) { | 87 } else if (this._isValidScrollTarget()) { |
| 85 | 88 |
| 86 eventTarget = scrollTarget === this._doc ? window : scrollTarget; | |
| 87 this._boundScrollHandler = this._boundScrollHandler || this._scrollHandl
er.bind(this); | 89 this._boundScrollHandler = this._boundScrollHandler || this._scrollHandl
er.bind(this); |
| 88 this._oldScrollTarget = scrollTarget; | 90 this._oldScrollTarget = scrollTarget; |
| 91 this._toggleScrollListener(this._shouldHaveListener, scrollTarget); |
| 89 | 92 |
| 90 eventTarget.addEventListener('scroll', this._boundScrollHandler); | |
| 91 } | 93 } |
| 92 }, | 94 }, |
| 93 | 95 |
| 94 /** | 96 /** |
| 95 * Runs on every scroll event. Consumer of this behavior may override this m
ethod. | 97 * Runs on every scroll event. Consumer of this behavior may override this m
ethod. |
| 96 * | 98 * |
| 97 * @protected | 99 * @protected |
| 98 */ | 100 */ |
| 99 _scrollHandler: function scrollHandler() {}, | 101 _scrollHandler: function scrollHandler() {}, |
| 100 | 102 |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 return 0; | 209 return 0; |
| 208 }, | 210 }, |
| 209 | 211 |
| 210 /** | 212 /** |
| 211 * Returns true if the scroll target is a valid HTMLElement. | 213 * Returns true if the scroll target is a valid HTMLElement. |
| 212 * | 214 * |
| 213 * @return {boolean} | 215 * @return {boolean} |
| 214 */ | 216 */ |
| 215 _isValidScrollTarget: function() { | 217 _isValidScrollTarget: function() { |
| 216 return this.scrollTarget instanceof HTMLElement; | 218 return this.scrollTarget instanceof HTMLElement; |
| 219 }, |
| 220 |
| 221 _toggleScrollListener: function(yes, scrollTarget) { |
| 222 if (!this._boundScrollHandler) { |
| 223 return; |
| 224 } |
| 225 var eventTarget = scrollTarget === this._doc ? window : scrollTarget; |
| 226 |
| 227 if (yes) { |
| 228 eventTarget.addEventListener('scroll', this._boundScrollHandler); |
| 229 } else { |
| 230 eventTarget.removeEventListener('scroll', this._boundScrollHandler); |
| 231 } |
| 232 }, |
| 233 |
| 234 /** |
| 235 * Enables or disables the scroll event listener. |
| 236 * |
| 237 * @param {boolean} yes True to add the event, False to remove it. |
| 238 */ |
| 239 toggleScrollListener: function(yes) { |
| 240 this._shouldHaveListener = yes; |
| 241 this._toggleScrollListener(yes, this.scrollTarget); |
| 217 } | 242 } |
| 243 |
| 218 }; | 244 }; |
| OLD | NEW |