window.scrollTo 不滚动到提供的 id

问题描述

我正在处理单个文档文件。当单击 id="about" 的锚点时,我想滚动到 id="projectpage" 所需的部分。

<a class="nav-link page-scroll"  href="" id="about">About Me</a>

<section id="aboutpage">

我尝试使用

$('a#about').click(function(){
    $(window).scrollTo(0,document.getElementById('projectpage').offsetTop);
    
  });

甚至

$('#about').click(function(){
    $(window).scrollTo(0,document.getElementById('projectpage').offsetTop);
    
  });

但没有任何效果

当我点击带有 id="about" 的锚点时,它只会将我重定向到 index.html(包含所有文档的主 HTML)文件本身,而不是转到 id="projectpage" 的 offsetTop。>

解决方法

您需要阻止锚点的默认行为.... 使用 .preventDefault()

$(window) 替换为 window...当您希望在其上应用原生 JS 方法时,您不需要 jQuery 来查找窗口。

$('#about').click(function(e) {
  e.preventDefault()
  window.scrollTo(0,document.getElementById('aboutpage').offsetTop);
});
section{
  height: 200px;
  border-top: 2px solid grey;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a class="nav-link page-scroll" href="" id="about">About Me</a>

<section id="somethingElse1">...</section>
<section id="somethingElse2">...</section>
<section id="somethingElse3">...</section>
<section id="aboutpage">About</section>
<section id="somethingElse4">...</section>
<section id="somethingElse5">...</section>

,

我使用 scrollIntoView() 为您制作了一个小示例。此外,请考虑需要 event.preventDefault() 禁用点击标签 a 的默认功能。

另外,scrollIntoView() 有一个带动画过渡效果的参数:

behavior: "smooth"

注意:由于您使用的是 jquery,因此我认为强制转换为如下元素毫无意义:

document.getElementById('aboutpage')

上诉,如jquery

$("#aboutpage")[0]

$('a#about').click(function(event){
  event.preventDefault();
    $("#aboutpage")[0].scrollIntoView({
    behavior: "smooth"
  }); 
});
#first {
  width: 100%;
  height: 1000px;
  background-color: green;
}

#aboutpage {
  width: 100%;
  height: 1000px;
  background-color: blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a class="nav-link page-scroll"  href="" id="about">About Me</a>

<section id="first"></section>
<section id="aboutpage"></section>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...