在 React 中创建滚动位置指标
Creating a scroll position indicator in React
我正在尝试在 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中这样做吗?有人告诉我,Jquery 不应该在 React 中使用。
这是你唯一使用JQuery的地方吗?如果是这样,我建议放弃它,改用纯javascript。你可以用 JQuery 做的所有事情,你也可以用 React 和纯 JavaScript 做,这里不值得开销。
这是handleScroll
函数的纯JavaScript版本。请注意,文档高度的计算是出了名的烦人,但我采用了这个问题的方法(它只是重现了 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;
回答你的第二个问题:在这种特殊情况下,你可以坚持使用jQuery(尽管我更喜欢vanilla javascript版本)。
使用 react,将 jQuery 用于以下用途是完全可以的:
- 从真实 DOM 中读取未知反应的信息(例如 DOM 中的组件高度或机箱中的滚动位置)
- 阿贾克斯的东西
使用 React,你不应该将 jQuery 用于:
- 直接操作 DOM:只通过 react 操作 DOM。(在 react 中使用 jQuery 操作 DOM 是大麻烦的保证)
- 读取可以并且应该知道做出反应的 DOM 信息,例如输入字段的值。(事情并没有真正中断,但是如果你使用 jQuery 来规避 React 的严格设计准则,它会让你的 react 代码更难调试)
相关文章:
- 固定位置菜单时滚动,直到它击中一个相对容器的底部
- jquery:将动画绑定到滚动条位置的更好方法
- 如何查明鼠标按下事件是否发生在滚动条上或元素中的其他任何位置
- 有没有一种方法可以直接从cordova获得滚动位置
- 根据滚动位置动态更改href
- css/js:通过滚动固定位置
- 是否可以使用flexbox显示模型设置元素的滚动位置
- 固定位置侧边栏不滚动-设置内容的高度
- 浏览器持续滚动位置
- 当静态元素与滚动上的固定元素位置重叠时进行检测
- javascript/获取滚动条位置的回调
- Sammy.js缓存和滚动位置时,返回历史
- 使用绝对位置时,jQuery向左滚动不起作用
- PHP保持滚动位置
- 按下后退按钮时,如何保持可滚动区域的滚动位置
- 刷新jqGrid;t在启用无限滚动的情况下保存当前页面位置
- 将滚动条移动到页面中间的控制位置
- 如何使用位置获取滚动功能获取 HTML 中的元素标签
- 滚动位置 (scrollTop) 硬件是否在浏览器中加速
- 鼠标位置滚动