Я оживляю несколько компонентов React.js на основе их положения в окне просмотра. Если компонент находится в области просмотра, анимируйте непрозрачность до 1, если она не находится в окне просмотра, анимируйте ее непрозрачность до 0. Я использую свойства getBoundingClient()
top
и bottom
, чтобы определить, находится ли компонент в области просмотра.
ComponentA показывает шаблон, который я использовал для других компонентов B, C и D. Каждый из них прослушивает событие прокрутки window
.
Является ли это способом "Реакт" для этого каждым компонентом, имеющим необходимость добавить прослушиватель событий в window
? Несколько прослушивателей событий прокрутки в одном окне?
Или есть ли лучший способ, добавив прослушиватель событий прокрутки к окну один раз в компоненте владельца Home
? Затем дочерние компоненты-пользователи еще смогут узнать, где они находятся в DOM, используя getBoundingClient()
?
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 */);
}
});