私はいくつかのReact.jsコンポーネントをビューポート内の位置に基づいてアニメーション化しています。コンポーネントがビューポート内にある場合は、不透明度を1にアニメーション化し、ビューポートにない場合は不透明度を0にアニメーションします。コンポーネントがビューポート内にあるかどうかを判断するのにgetBoundingClient()
のtop
およびbottom
プロパティを使用しています。React.jsコンポーネントからのウィンドウイベントのリスニングに関するベストプラクティス
コンポーネントAは、他のB、C、およびDコンポーネントのパターンIを示しています。彼らはそれぞれwindow
スクロールイベントを待ち受けています。
これは、各コンポーネントがイベントリスナーをwindow
に追加する必要があることによってこれを行うための「リアクション」方法ですか?同じウィンドウ上の複数のスクロールイベントリスナー?
または、スクロールイベントリスナーをHome
所有者コンポーネントのウィンドウに一度追加すると良いでしょうか?次に、所有者の子コンポーネントは、getBoundingClient()
を使用してDOM内のどこにいるかを知ることができますか?
Home = React.createClass({
render: function() {
<div>
<ComponentA />
<ComponentB />
<ComponentC />
<ComponentD />
</div>
};
});
ComponentA = React.createClass({
componentDidMount: function() {
window.addEventListener('scroll', this.handleScroll);
},
componentWillUnmount: function() {
window.removeEventListener('scroll', this.handleScroll);
},
handleScroll: function() {
var domElement = this.refs.domElement.getDOMNode();
this.inViewPort(domElement);
},
inViewPort: function(element) {
var elementBounds = element.getBoundingClientRect();
(elementBounds.top <= 769 && elementBounds.bottom >= 430) ? TweenMax.to(element, 1.5, { opacity: 1 }) : TweenMax.to(element, 1.5, { opacity: 0 });
},
render: function() {
return (/* html to render */);
}
});
に動作するはずされ、それが反応し、ルータや再来のような高レベルのコンポーネントが実行可能に接続することを願って? – earthdan