Gio*_*nni 8 javascript reactjs
document.querySelectorAll('.classname')React 中的等价物是什么?我知道我应该使用 Refs,但是我如何观察多个 RefsonScroll呢?
我通常使用类似下面这样的函数来检查页面中多个元素的视口位置,并在每个元素进入视口时触发不同的css动画:
HTML
<ul>
<li data-position="below-viewport"></li>
<li data-position="below-viewport"></li>
<li data-position="below-viewport"></li>
<li data-position="below-viewport"></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
Javascript
getPosition: function (element) {
const rect = element.getBoundingClientRect();
if ((rect.top > -1) && (rect.top < (window.innerHeight * 0.75))) {
element.setAttribute('data-js-position','in-viewport');
} else if ((rect.top > 0) && (rect.top < window.innerHeight)) {
element.setAttribute('data-js-position','entering-viewport');
} else if (rect.top > window.innerHeight) {
element.setAttribute('data-js-position','below-viewport');
} else if (rect.bottom < 0) {
element.setAttribute('data-js-position','above-viewport');
}
}
window.addEventListener('scroll', function() {
[].forEach.call(document.querySelectorAll('[data-js-position]'), el => {
positionChecker.getPosition(el);
})
});
Run Code Online (Sandbox Code Playgroud)
我将如何在 React 中实现类似的东西?你能举一个在 React 中观察多个 div 的函数的例子吗?
更好的是:我怎样才能在 中抽象这个函数App.js,以便我也可以在子组件中使用它?
使每个lihtml 元素成为其自己的组件,并ref在其自己的状态下保存对它的引用。
class LiElement extends React.Component {
componentDidMount() {
this.ref.getPosition()
}
render() {
return (
<li ref={(ctx) => this.ref = ctx}>
</li>
)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19245 次 |
| 最近记录: |