You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何点击锚点链接时scroll-behavior: smooth与Lenis库无法正常工作?

为什么scroll-behavior: smooth和Lenis无法协同工作?

核心原因

Lenis作为自定义平滑滚动库,会完全接管页面的滚动控制逻辑——它通过requestAnimationFrame模拟滚动动画,直接替代了浏览器原生的滚动行为。启用Lenis后,浏览器原生的scroll-behavior: smooth会被Lenis的自定义逻辑覆盖,导致原生锚点的平滑滚动失效。

解决方法

1. 移除原生scroll-behavior配置

直接删掉CSS里的scroll-behavior: smooth,Lenis本身已经提供了平滑滚动能力,留着反而会引发冲突。

2. 用Lenis API处理锚点滚动

修改锚点的点击逻辑,阻止原生跳转行为,改用Lenis的scrollTo方法实现平滑滚动。修改后的代码如下:

JavaScript 代码

const lenis = new Lenis({
  duration: 2.5
})

// 处理锚点点击事件
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
  anchor.addEventListener('click', (e) => {
    e.preventDefault()
    const targetId = anchor.getAttribute('href')
    const targetElement = document.querySelector(targetId)
    if (targetElement) {
      lenis.scrollTo(targetElement)
    }
  })
})

function raf(time) {
  lenis.raf(time)
  requestAnimationFrame(raf)
}
requestAnimationFrame(raf)

lenis.on('scroll', ScrollTrigger.update)

gsap.ticker.add((time) => {
  lenis.raf(time * 1000)
})

CSS 代码

html {
  /* 移除原生平滑滚动配置 */
  /* scroll-behavior: smooth; */
}

HTML 代码(无需修改)

<h2><a class="c-btn" href="#pages-main">scroll down</a></h2>
 
<section id="pages-main"></section>

修改后,点击锚点会通过Lenis实现平滑滚动,同时和Lenis的全局滚动逻辑保持一致。

内容的提问来源于stack exchange,提问作者blosiu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:13:15