javascript - React - 滚动到某个目标元素时应用 CSS 类
问题描述
我正在尝试在用户滚动到特定目标元素时应用 CSS 类。我在这里写了一个辅助函数:
export function isTriggerElementInViewport(elementId) {
const element = document.getElementById(elementId)
const rect = element.getBoundingClientRect()
const viewportWidth = window.innerWidth || document.documentElement.clientWidth
const viewportHeight = window.innerHeight || document.documentElement.clientHeight
return (rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= viewportHeight &&
rect.right <= viewportWidth)
}
我的 React 组件是:
const MyComponent = () => {
const [elementVisible, setElementVisible] = useState(false)
const _handleScroll = elementId => {
console.log('Scrolling')
setElementVisible(isTriggerElementInViewport(elementId))
}
useEffect(() => {
window.addEventListener('scroll', () => _handleScroll('targetElementId'))
}, [])
return (
<div className={elementVisible ? 'special-class' : ''} id="targetElementId">
When this is visible, apply the special CSS class.
</div>
)
}
我在句柄滚动侦听器中编写了一个控制台日志,当我滚动时它不会被调用。澄清一下:我正在滚动页面的窗口,当我到达某个元素时,我希望应用一个 CSS 类。
我如何实现这种行为?
注意:我更喜欢不涉及 JQuery 或其他外部库的想法/解决方案,因为有关此问题的许多其他答案往往会这样做。
解决方案
我试图在代码沙箱中模拟你: https ://codesandbox.io/s/react-playground-forked-5tw7t?file =/index.js:0-1229
我看不出有什么问题。您可以检查控制台日志并在开发人员工具中进行检查,以查看当您在那里滚动时切换的类
推荐阅读
- git - 如何在不删除文件、数字和重复的情况下存储“git pull”的输出,以便在文本文件中列出新文件?
- c# - 使方法参数不合格
- scala - 如何在 udf 中使用数据框并在 spark scala 中解析数据
- mysql - 对话 SQL 结构(群聊)
- ghci - GHCi 中的 PrimOps
- java - Ubuntu 上的 JavaFX 媒体问题:无法创建播放器
- r - 创建循环或函数,通过每个观察进行计算,并根据第一次计算的结果执行另一次计算
- blazor - 在 Blazor ComponentBase 类中获取数据
- r - 在 R 中解析 HTML/XML 字符
- mongodb - $push 和 $addToSet 都没有按预期工作