我试图让鼠标滚轮滚动到页面上的锚点。我在这里用不同的帖子找到了这段代码,但是它没有用。我错过了什么吗?
(function() {
var delay = false;
jQuery(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.getElementsByClass ('anchor');
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) {
jQuery('html,body').animate({
scrollTop: a[i].offsetTop
});
}
});
})();
console.clear();
答案 0 :(得分:1)
在您的代码中我发现var a= document.getElementsByClass('anchor');
没有这种类型的功能,它应该是var a= document.getElementsByClassName('anchor');
(function() {
var delay = false;
jQuery(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.getElementsByClassName('anchor');
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) {
jQuery('html,body').animate({
scrollTop: a[i].offsetTop
});
}
});
})();
console.clear();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<br/>
<br/>
<br/>
<br/><br/>
<br/>
<br/>
<br/>
<br/>
<br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<a class="anchor">ganesh</a>
&#13;
答案 1 :(得分:0)
如果您尝试调试某些内容,请不要清除控制台,因为它还会清除控制台中的所有错误。如果要删除最后一串代码,您将看到错误
document.getElementsByClass is not a function
。
所以你需要使用getElementsByClassName。
你只需要改变
var a= document.getElementsByClass ('anchor');
至
var a = document.getElementsByClassName('anchor');