我试图在React中编写滚动指示器进度条。我有它与Jquery合作,但想知道如何使用纯Javascript。
componentDidMount() {
window.addEventListener('scroll', this.handleScroll);
}
handleScroll() {
var winHeight = $(window).height(),
docHeight = $(document).height(),
value = $(window).scrollTop(),
max, percent;
max = docHeight - winHeight;
percent = (value / max) * 100;
this.props.updatePercent(percent);
}
另外,我应该在纯Javascript中打扰这个吗?我被告知不应该在React中使用Jquery。
答案 0 :(得分:14)
这是你使用JQuery的唯一地方吗?如果是这样,我建议抛弃纯粹的javascript。你可以用JQuery做的一切,你也可以用React和纯JavaScript做,而且这里的开销不值得。
这是handleScroll
函数的纯JavaScript版本。请注意,计算文档高度非常令人讨厌,但我采用了this question的方法(它只是重现了JQuery的实现)。
handleScroll() {
var winHeight = window.innerHeight;
// Annoying to compute doc height due to browser inconsistency
var body = document.body;
var html = document.documentElement;
var docHeight = Math.max( body.scrollHeight, body.offsetHeight,
html.clientHeight, html.scrollHeight, html.offsetHeight );
var value = document.body.scrollTop;
...
}
<强>更新强>
如果你想获得元素中的滚动位置,你需要像
这样的东西var el = document.getElementById('story_body');
var minPixel = el.offsetTop;
var maxPixel = minPixel + el.scrollHeight;
var value = document.body.scrollTop;
// respect bounds of element
var percent = (value - minPixel)/(maxPixel - minPixel);
percent = Math.min(1,Math.max(percent, 0))*100;
答案 1 :(得分:8)
回答你的第二个问题:在这个特殊情况下,你可以坚持使用jQuery(虽然我更喜欢vanilla javascript版本)。
使用react,使用jQuery完全可以:
使用React,你不应该使用jQuery: