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

网站开发:如何修改jQuery代码实现鼠标滚轮触发锚点瞬移而非滚动过渡?

实现鼠标滚轮触发锚点瞬移跳转的修改方案

嗨,我完全懂你想要的是瞬间跳转到对应锚点区块而非平滑过渡的效果,其实改起来超简单!原代码里的平滑滚动是靠animate()方法实现的,我们只要把这部分换成直接设置滚动位置的代码,就能搞定瞬移效果。

修改核心说明

原代码里负责滚动过渡的是这一行:

$('html,body').animate({ scrollTop: a[i].offsetTop });

animate()方法会自动添加渐变过渡动画,我们把它替换成直接设置scrollTop的语句,就能实现瞬间跳转:

$('html,body').scrollTop(a[i].offsetTop);

你也可以用原生JS写法,效果完全一致:

window.scrollTo(0, a[i].offsetTop);

完整修改后的代码

(function() { 
  var delay = false; 
  $(document).on('mousewheel DOMMouseScroll', function(event) { 
    event.preventDefault(); 
    if(delay) return; 
    delay = true; 
    setTimeout(function(){delay = false},200) 
    
    var wd = event.originalEvent.wheelDelta || -event.originalEvent.detail; 
    var a= document.getElementsByTagName('a'); 
    
    if(wd < 0) { 
      for(var i = 0 ; i < a.length ; i++) { 
        var t = a[i].getClientRects()[0].top; 
        if(t >= 40) break; 
      } 
    } else { 
      for(var i = a.length-1 ; i >= 0 ; i--) { 
        var t = a[i].getClientRects()[0].top; 
        if(t < -20) break; 
      } 
    } 
    
    if(i >= 0 && i < a.length) { 
      // 替换为直接设置滚动位置,移除过渡动画
      $('html,body').scrollTop(a[i].offsetTop); 
    } 
  }); 
})(); 
console.clear();

额外小提醒

如果你的锚点是用id属性定义的区块(比如<div id="section1"></div>),建议把代码里获取a标签的逻辑改成获取对应id的元素,这样定位会更精准。不过如果你的锚点本身就是用a标签实现的,当前代码完全可以正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:57:35