【问题标题】:Jquery scroll animation scrolles to bottom of div instead of topJquery 滚动动画滚动到 div 的底部而不是顶部
【发布时间】:2019-01-31 11:08:20
【问题描述】:

我正在制作一个带有导航栏的网站。单击导航栏中的项目时,它应该滚动到特定的 div。但它滚动到 div 的底部而不是顶部。

我找不到错误,谁能帮帮我?

欢迎任何帮助。

我的代码:

* {box-sizing: border-box;}
body { 
  margin: 0;
  font-family: Arial, Helvetica, sans-serif;
  background-color: #10171e;
  color: white;
}
img{
  width: 100%;
}
.header {
  margin-bottom: 100px;
  position: fixed;
  width: 100%;
  overflow: hidden;
  background-color: #15202b;
  padding: 20px 10px;
}
.header a {
  float: left;
  color: white;
  text-align: center;
  padding: 12px;
  text-decoration: none;
  font-size: 18px; 
  line-height: 25px;
  border-radius: 4px;
}
.header a:hover {
  background-color: #ddd;
  color: black;
}
.header-right {
  float: left;
}

.home{
  /*margin-bottom: 500px;*/
}
.about{
  background: red;
  /*height: 1000px;*/
  /*margin-top: 500px;*/
  /*margin-bottom: 500px;*/
  width: 60%;
  margin-left: 20%;
}
.contact{
  background-color: blue;
  height: 1000px;
  /*margin-top: 500px;*/
  /*margin-bottom: 500px;*/
  width: 60%;
  margin-left: 20%;
}
}
@media screen and (max-width: 500px) {
  .header a {
    float: none;
    display: block;
    text-align: left;
  }
  
  .header-right {
    float: none;
  }
}
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<link rel="stylesheet" type="text/css" href="style.css">
	<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></script>
	<title>Jurjen</title>
</head>
<body>
	<div class="home">
		<div class="header">
    		<a class="nav" href="#" id="home">Home</a>
    		<a class="nav" href="#" id="about">About</a>
    		<a class="nav" href="#" id="contact">Contact</a>
		</div>
		<img src="img/programmer1.png" alt="programmer"> 
		<a id="button" class="arrow bounce" href="#"></a>
	</div>
	<div class="about">
		<p class="P1">Waarom gebruiken we het?	Het is al geruime tijd een bekend gegeven dat een lezer, tijdens het bekijken van de layout van een pagina, afgeleid wordt door de tekstuele inhoud. Het belangrijke punt van het gebruik van Lorem Ipsum is dat het uit een min of meer normale verdeling van letters bestaat, in tegenstelling tot "Hier uw tekst, hier uw tekst" wat het tot min of meer leesbaar nederlands maakt. Veel desktop publishing pakketten en web pagina editors gebruiken tegenwoordig Lorem Ipsum als hun standaard model tekst, en een zoekopdracht naar "lorem ipsum" ontsluit veel websites die nog in aanbouw zijn. Verscheidene versies hebben zich ontwikkeld in de loop van de jaren, soms per ongeluk soms expres (ingevoegde humor en dergelijke).</p>
	</div>
	<div class="contact">
		<p>Waarom gebruiken we het?Het is al geruime tijd een bekend gegeven dat een lezer, tijdens het bekijken van de layout van een pagina, afgeleid wordt door de tekstuele inhoud. Het belangrijke punt van het gebruik van Lorem Ipsum is dat het uit een min of meer normale verdeling van letters bestaat, in tegenstelling tot "Hier uw tekst, hier uw tekst" wat het tot min of meer leesbaar nederlands maakt. Veel desktop publishing pakketten en web pagina editors gebruiken tegenwoordig Lorem Ipsum als hun standaard model tekst, en een zoekopdracht naar "lorem ipsum" ontsluit veel websites die nog in aanbouw zijn. Verscheidene versies hebben zich ontwikkeld in de loop van de jaren, soms per ongeluk soms expres (ingevoegde humor en dergelijke).
		</p>
	</div>
</body>
<footer></footer>
</html>
<script type="text/javascript">
$("#button").click(function() {
	$('html,body').animate({
    	scrollTop: $(".P1").offset().top},
    	'slow');
});
$("#home").click(function() {
    $('html,body').animate({
        scrollTop: $(".home").offset().top},
        'slow');
});
$("#about").click(function() {
    $('html,body').animate({
        scrollTop: $(".about").offset().top},
        'slow');
});
$("#contact").click(function() {
    $('html,body').animate({
        scrollTop: $(".contact").offset().top},
        'slow');
});
</script>

如您所见。当您单击导航按钮时,它会滚动但不会滚动到 div 的顶部,它会滚动到 div 的中间。这是什么原因?

【问题讨论】:

    标签: javascript jquery html css


    【解决方案1】:

    问题是因为offset().top 没有考虑.header 元素的高度,所以内容在其下方对齐。

    要解决此问题,只需检索 .headerouterHeight() 并将其从 offset().top 中减去。

    还请注意,您可以通过使用单个选择器来检索多个单击处理程序,然后通过链接单击的a 元素的id 来定位要滚动到的元素。试试这个:

    var navHeight = $('.header').outerHeight();
    
    $(".header a").click(function() {
      $('html,body').animate({
        scrollTop: $("." + this.id).offset().top - navHeight
      }, 'slow');
    });
    * {
      box-sizing: border-box;
    }
    
    body {
      margin: 0;
      font-family: Arial, Helvetica, sans-serif;
      background-color: #10171e;
      color: white;
    }
    
    img {
      width: 100%;
    }
    
    .header {
      margin-bottom: 100px;
      position: fixed;
      width: 100%;
      overflow: hidden;
      background-color: #15202b;
      padding: 20px 10px;
    }
    
    .header a {
      float: left;
      color: white;
      text-align: center;
      padding: 12px;
      text-decoration: none;
      font-size: 18px;
      line-height: 25px;
      border-radius: 4px;
    }
    
    .header a:hover {
      background-color: #ddd;
      color: black;
    }
    
    .header-right {
      float: left;
    }
    
    .home {
      /*margin-bottom: 500px;*/
    }
    
    .about {
      background: red;
      /*height: 1000px;*/
      /*margin-top: 500px;*/
      /*margin-bottom: 500px;*/
      width: 60%;
      margin-left: 20%;
    }
    
    .contact {
      background-color: blue;
      height: 1000px;
      /*margin-top: 500px;*/
      /*margin-bottom: 500px;*/
      width: 60%;
      margin-left: 20%;
    }
    
    
    }
    @media screen and (max-width: 500px) {
      .header a {
        float: none;
        display: block;
        text-align: left;
      }
      
      .header-right {
        float: none;
      }
    }
    <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></script>
    
    <div class="home">
      <div class="header">
        <a class="nav" href="#" id="home">Home</a>
        <a class="nav" href="#" id="about">About</a>
        <a class="nav" href="#" id="contact">Contact</a>
      </div>
      <img src="img/programmer1.png" alt="programmer">
      <a id="button" class="arrow bounce" href="#"></a>
    </div>
    <div class="about">
      <p class="P1">Waarom gebruiken we het? Het is al geruime tijd een bekend gegeven dat een lezer, tijdens het bekijken van de layout van een pagina, afgeleid wordt door de tekstuele inhoud. Het belangrijke punt van het gebruik van Lorem Ipsum is dat het uit een min
        of meer normale verdeling van letters bestaat, in tegenstelling tot "Hier uw tekst, hier uw tekst" wat het tot min of meer leesbaar nederlands maakt. Veel desktop publishing pakketten en web pagina editors gebruiken tegenwoordig Lorem Ipsum als hun
        standaard model tekst, en een zoekopdracht naar "lorem ipsum" ontsluit veel websites die nog in aanbouw zijn. Verscheidene versies hebben zich ontwikkeld in de loop van de jaren, soms per ongeluk soms expres (ingevoegde humor en dergelijke).</p>
    </div>
    <div class="contact">
      <p>Waarom gebruiken we het?Het is al geruime tijd een bekend gegeven dat een lezer, tijdens het bekijken van de layout van een pagina, afgeleid wordt door de tekstuele inhoud. Het belangrijke punt van het gebruik van Lorem Ipsum is dat het uit een min
        of meer normale verdeling van letters bestaat, in tegenstelling tot "Hier uw tekst, hier uw tekst" wat het tot min of meer leesbaar nederlands maakt. Veel desktop publishing pakketten en web pagina editors gebruiken tegenwoordig Lorem Ipsum als hun
        standaard model tekst, en een zoekopdracht naar "lorem ipsum" ontsluit veel websites die nog in aanbouw zijn. Verscheidene versies hebben zich ontwikkeld in de loop van de jaren, soms per ongeluk soms expres (ingevoegde humor en dergelijke).
      </p>
    </div>

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多