From 01d4acb7a9b030be3552b4ca19b4e899dc2bb7c7 Mon Sep 17 00:00:00 2001 From: afc163 Date: Thu, 17 Aug 2017 11:45:46 +0800 Subject: [PATCH] Attach more events for Affix display --- components/affix/index.tsx | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/components/affix/index.tsx b/components/affix/index.tsx index 3877ef1331..5a6ec8c635 100644 --- a/components/affix/index.tsx +++ b/components/affix/index.tsx @@ -73,6 +73,18 @@ export default class Affix extends React.Component { fixedNode: HTMLElement; }; + events = [ + 'resize', + 'scroll', + 'touchstart', + 'touchmove', + 'touchend', + 'pageshow', + 'load', + ]; + + eventHandlers = {}; + constructor(props) { super(props); this.state = { @@ -190,7 +202,7 @@ export default class Affix extends React.Component { componentWillReceiveProps(nextProps) { if (this.props.target !== nextProps.target) { - this.clearScrollEventListeners(); + this.clearEventListeners(); this.setTargetEventListeners(nextProps.target); // Mock Event object. @@ -199,7 +211,7 @@ export default class Affix extends React.Component { } componentWillUnmount() { - this.clearScrollEventListeners(); + this.clearEventListeners(); clearTimeout(this.timeout); (this.updatePosition as any).cancel(); } @@ -209,15 +221,18 @@ export default class Affix extends React.Component { if (!target) { return; } - this.clearScrollEventListeners(); - this.scrollEvent = addEventListener(target, 'scroll', this.updatePosition); - this.resizeEvent = addEventListener(target, 'resize', this.updatePosition); + this.clearEventListeners(); + + this.events.forEach(eventName => { + this.eventHandlers[eventName] = addEventListener(target, eventName, this.updatePosition); + }); } - clearScrollEventListeners() { - ['scrollEvent', 'resizeEvent'].forEach((name) => { - if (this[name]) { - this[name].remove(); + clearEventListeners() { + this.events.forEach(eventName => { + const handler = this.eventHandlers[eventName]; + if (handler && handler.remove) { + handler.remove(); } }); }