如何解决懒加载与ScrollTo锚点滚动冲突、锚点链接仅二次点击生效问题?
懒加载与锚点滚动冲突的解决方案(锚点需二次点击生效问题)
针对懒加载导致锚点链接仅二次点击才生效、滚动中途停止的问题,这里提供一个可运行的完整JavaScript解决方案,融合了该问题下的部分解决思路。
const arrAnchor = Array.from(document.querySelectorAll('.c-ultro-blocks a')).filter(t => t.href.includes('#')) if(arrAnchor.length > 0) { let elemTarget = null let offsetElement = 0 let tmOutObserver = null let prevPosition = null const goLink = (evt) => { const id = evt.target.href.split('#').pop() elemTarget = document.getElementById(id) if(!elemTarget) { return } offsetElement = elemTarget.offsetTop window.scrollTo({ top: offsetElement - 120, left: 0, behavior: "smooth" }) tmOutObserver = setTimeout(checkScroll, 20) } const scrollDone = () => { offsetElement = elemTarget.offsetTop if (offsetElement > window.scrollY + 120) { window.scrollTo({ top: offsetElement - 120, left: 0, behavior: "smooth" }) prevPosition = null checkScroll() } } const checkScroll = () => { if (window.scrollY === prevPosition) { scrollDone() return } prevPosition = window.scrollY tmOutObserver = setTimeout(checkScroll, 20) } arrAnchor.forEach(aElem => { aElem.addEventListener('click', goLink) }) }
- 此为该问题的一种可行解决方案
内容的提问来源于stack exchange,提问作者Olivier Heimerdinger
相关产品推荐
相关产品推荐

