网站开发:如何修改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
相关产品推荐
相关产品推荐

