鼠标滚轮滚动到锚点

时间:2018-02-22 06:31:58

标签: jquery

我试图让鼠标滚轮滚动到页面上的锚点。我在这里用不同的帖子找到了这段代码,但是它没有用。我错过了什么吗?

(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();

2 个答案:

答案 0 :(得分:1)

在您的代码中我发现var a= document.getElementsByClass('anchor');没有这种类型的功能,它应该是var a= document.getElementsByClassName('anchor');

&#13;
&#13;
(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;
&#13;
&#13;

答案 1 :(得分:0)

如果您尝试调试某些内容,请不要清除控制台,因为它还会清除控制台中的所有错误。如果要删除最后一串代码,您将看到错误 document.getElementsByClass is not a function。 所以你需要使用getElementsByClassName。

你只需要改变 var a= document.getElementsByClass ('anchor');var a = document.getElementsByClassName('anchor');