【问题标题】:Smooth scrolling to next class element jquery平滑滚动到下一个类元素jquery
【发布时间】:2014-09-13 18:08:33
【问题描述】:

我想使用 html 和 jQuery 在标题之间准备一个平滑的滚动效果。通过按下“下一个”按钮,用户将移动到最近的下一个标题。

简化我的代码如下所示:

<div class="article-content">
    <div class="title">
        <a href="#" id="next">next</a>
        <h2>Title1</h2>
    </div>        
       some text goes here        
    <div class="title">
        <a href="#" id="next">next</a>
        <h2>Title2</h2>
    </div>      
    <div class="title">
        <a href="#" id="next">next</a>
       <h2>Title3</h2>
    </div>      
</div>

我尝试使用下面的jQuery代码,但它不起作用:

$("#next").click(function() {
      var next;
      next = $(this).parent().next().find(".title");
       $('html,body').animate({ scrollTop: next.offset().top
            }, 1000);
});

【问题讨论】:

  • 同一页面中不能有多个具有相同 id 的元素。您应该使用data-idclass 来区分您的“下一个”链接。
  • 可能存在冲突。尝试将类分配给这些按钮,而不是使用 id。
  • 哦,是的 :) 我已经在链接中添加了类,但它仍然不起作用:/

标签: javascript jquery css class scroll


【解决方案1】:

此代码可能对您有所帮助

$('html,body').animate({ scrollTop: $(".title").offset().top}, 'slow');

【讨论】:

  • 谢谢,但我需要一些可以使用 10 个或更多标题元素的东西。你的代码只有在我有一个链接时才有效。
  • foreach 链接,你定义一个像这样$("#link1").click(function(){ // code that scrolls }); 的函数并为link2 link3 定义其他函数...
  • 我知道这种方式可以做到,但是代码太多,必须有更短的版本。我在这里找到了一些代码link,但它在我的网页上不起作用。
【解决方案2】:

Demo

在 html 中将 id 更改为类

<div class="title">
    <a href="#" class="next">next</a>
    <h2>title5</h2>
</div>

在 JavaScript 中

$(".next").click(function() {
   $('html,body').animate({ scrollTop:$(this).parent().next().offset().top}, 'slow');});

---更新

您在更新中遇到了问题,即您使用了

在 div 之外,因此 jquery 无法访问它。

应该是这样的

<div class="title">
<a href="#" class="next">next</a>
<h2>title1</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus mauris augue, molestie sit amet eros ac, tempus euismod justo. Donec faucibus sapien et lacus blandit sodales vitae vitae orci. Pellentesque aliquam suscipit purus. Fusce quis urna non arcu congue vulputate quis quis nunc. Praesent erat libero, porta eget lorem vitae, pretium sollicitudin felis. Pellentesque ultrices cursus lectus vel sodales. Fusce sodales ac dolor vel pretium. Nullam suscipit euismod nisi eu ullamcorper. Mauris consectetur urna accumsan nulla convallis, nec sagittis est faucibus. Nulla quis consectetur velit.

update

【讨论】:

  • 有效!您知道如何将其更改为“上一个按钮”吗?只需将 next() 更改为 prev()?
  • 请针对同一问题发布单独的问题。谢谢
  • 是的,只需将其更改为 prev 即可,但我建议您将类名从 Next 更改为其他名称,以保持一致性
  • 我已经用一些文本更新了你的 jsFiddle - updated - 文件,我注意到它现在不能正常工作。有什么办法可以解决吗?
  • 首先你需要用问题更新你的问题,这样我就可以回答它并且人们不必通过评论,其次因为你想要一个新事物而取消标记问题真的很粗鲁,你'将在答案中的更新中找到答案。
【解决方案3】:

要平滑滚动到特定 div,请使用以下代码:

$("a").on('click', function(e) {
  // prevent default anchor click behavior
  e.preventDefault();
  $('html, body').animate({
    scrollTop: $(this.hash).offset().top
  }, 1000, function() {
    window.location.hash = this.hash;
  });
});

另外,请注意以下示例演示中为标题 div 和href 位置链接新添加的id

DEMO HERE

希望这能解决您的问题。

【讨论】:

  • 是否有任何选项可以在不为下一个标题添加“id”的情况下做到这一点?
【解决方案4】:

这是一个使用的版本:

$(document).on("click", ".clicker", function() { 
// do things
}); 

previousnext 链接带有一点样式。

$(document).on("click", ".clicker", function(e) {

  e.preventDefault();

  var $this = $(this);

  if ($this.hasClass("next")) {
    $('html, body').animate({
      'scrollTop': $(this).closest(".container").next().offset().top
    }, 'slow');

  } else if ($this.hasClass("previous")) {
    $('html, body').animate({
      'scrollTop': $(this).closest(".container").prev().offset().top
    }, 'slow');
  }

});
.container {
  padding: 20px;
  border-bottom: 1px solid #ccc;
}

.container:first-child {
  border-top: 1px solid #ccc;
}

.container a {
  font-weight: normal;
  font-family: arial;
  font-size: 14px;
}

.links {
  text-align: right;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
  <div class="section">
    <p>01. lorem ipsum </p>
    <div class="links">
      <a href="#" class="clicker next"> next </a>
    </div>
  </div>
</div>

<div class="container">
  <div class="section">
    <p>02. lorem ipsum </p>
    <div class="links">
      <a href="#" class="clicker previous"> previous </a> | <a href="#" class="clicker next"> next </a>
    </div>
  </div>
</div>

<div class="container">
  <div class="section">
    <p>03. lorem ipsum </p>
    <div class="links">
      <a href="#" class="clicker previous"> previous </a> | <a href="#" class="clicker next"> next </a>
    </div>
  </div>
</div>

<div class="container">
  <div class="section">
    <p>04. lorem ipsum </p>
    <div class="links">
      <a href="#" class="clicker previous"> previous </a> | <a href="#" class="clicker next"> next </a>
    </div>
  </div>
</div>

<div class="container">
  <div class="section">
    <p>05. lorem ipsum </p>
    <div class="links">
      <a href="#" class="clicker previous"> previous </a> | <a href="#" class="clicker next"> next </a>
    </div>
  </div>
</div>

<div class="container">
  <div class="section">
    <p>06. lorem ipsum </p>
    <div class="links">
      <a href="#" class="clicker previous"> previous </a> | <a href="#" class="clicker next"> next </a>
    </div>
  </div>
</div>

<div class="container">
  <div class="section">
    <p>07. lorem ipsum </p>
    <div class="links">
      <a href="#" class="clicker previous"> previous </a> | <a href="#" class="clicker next"> next </a>
    </div>
  </div>
</div>

<div class="container">
  <div class="section">
    <p>08. lorem ipsum </p>
    <div class="links">
      <a href="#" class="clicker previous"> previous </a> | <a href="#" class="clicker next"> next </a>
    </div>
  </div>
</div>

<div class="container">
  <div class="section">
    <p>09. lorem ipsum </p>
    <div class="links">
      <a href="#" class="clicker previous"> previous </a> | <a href="#" class="clicker next"> next </a>
    </div>
  </div>
</div>

<div class="container">
  <div class="section">
    <p>10. lorem ipsum </p>
    <div class="links">
      <a href="#" class="clicker previous"> previous </a> | <a href="#" class="clicker next"> next </a>
    </div>
  </div>
</div>

<div class="container">
  <div class="section">
    <p>11. lorem ipsum </p>
    <div class="links">
      <a href="#" class="clicker previous"> previous </a> | <a href="#" class="clicker next"> next </a>
    </div>
  </div>
</div>

<div class="container">
  <div class="section">
    <p>12. lorem ipsum </p>
    <div class="links">
      <a href="#" class="clicker previous"> previous </a> | <a href="#" class="clicker next"> next </a>
    </div>
  </div>
</div>

<div class="container">
  <div class="section">
    <p>13. lorem ipsum </p>
    <div class="links">
      <a href="#" class="clicker previous"> previous </a> | <a href="#" class="clicker next"> next </a>
    </div>
  </div>
</div>

<div class="container">
  <div class="section">
    <p>14. lorem ipsum </p>
    <div class="links">
      <a href="#" class="clicker previous"> previous </a> | <a href="#" class="clicker next"> next </a>
    </div>
  </div>
</div>

<div class="container">
  <div class="section">
    <p>15. lorem ipsum </p>
    <div class="links">
      <a href="#" class="clicker previous"> previous </a>
    </div>
  </div>
</div>

【讨论】:

    猜你喜欢
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 2023-03-23
    • 2012-05-20
    相关资源
    最近更新 更多