滚动到下一个元素

2023-12-19

我正在努力解决 jquery 或 javascript 问题。

它已经很烦人了,这告诉我我可能把这个问题想得太复杂了。

所以我的标记(简单的)看起来像这样:

<div class="container">
    My Content
<a href="#" class="button">scroll down</a>
</div>


<div class="container">
    My Content
<a href="#" class="button">scroll down</a>
</div>


<div class="container">
    My Content
<a href="#" class="button">scroll down</a>
</div>


<div class="container">
    My Content
<a href="#" class="button">scroll down</a>
</div>

基本上只是一些容器。

每个都包含不同的内容和一个按钮。


计划:

1) 单击按钮后,窗口应向下滚动到下一个容器.

2)最后一个按钮滚动到第一个再次容器。所以我需要一个loop.

3) The numbers容器的数量可能会因页面而异。

EDIT:4)容器之间可能并不总是直接兄弟(参见下面的标记)


问题:

我可以通过给每个容器一个唯一的 ID 作为滚动效果的目标来实现此目的。

这样做的问题是它很快就会变得太混乱。

我可以以某种方式瞄准“具有该类的下一个对象:容器”,然后滚动到那个?


我不确定 js 或 jquery 是否是正确的方法。我对这两方面的了解都有些有限。

我真的很感激能朝着正确的方向推动。


EDIT:容器可能并不总是彼此的直接兄弟姐妹。

<div class="row">
        <div class="container">
            My Content
        <a href="#" class="button">scroll down</a>
        </div>


        <div class="container">
            My Content
        <a href="#" class="button">scroll down</a>
        </div>
</div>        

        <div class="container">
            My Content
        <a href="#" class="button">scroll down</a>
        </div>


        <div class="container">
            My Content
        <a href="#" class="button">scroll down</a>
        </div>

<div class="row">
        <div class="container">
            My Content
        <a href="#" class="button">scroll down</a>
        </div>


        <div class="container">
            My Content
        <a href="#" class="button">scroll down</a>
        </div>
</div>  

简单的解决方案:

要获取下一个容器,请尝试使用next() http://api.jquery.com/next/.

基本上,<div>容器是彼此的兄弟,所以调用.next()在一个 div 容器上将为您提供下一个。

$(".button").on("click", function(e) {
    $(document).scrollTop($(this).parent().next().offset().top);
    // $(this).parent().next() // this is the next div container.
    return false; // prevent anchor
});

http://jsfiddle.net/Pm3cj/1/ http://jsfiddle.net/Pm3cj/1/

你只需使用$(this)获取链接对象,.parent()获取链接的父级,即<div>, then .next()获取下一个同级(注意它会自动换行,因此最后一个之后的同级<div> is the first <div>!),。抵消()to get its position relative to the page,.top` 使其相对于上边框。

然后你只需使用$(document).scrollTop()滚动到该位置。


对于完全通用的解决方案,请使用:

$(".button").on("click", function(e) {
    container = $(this).parent();

    // if I am the last .container in my group...
    while (    document != container[0] // not reached root
            && container.find('~.container, ~:has(.container)').length == 0)
        container = container.parent(); // search siblings of parent instead

    nextdiv = container.nextAll('.container, :has(.container)').first();

    // no next .container found, go back to first container
    if (nextdiv.length==0) nextdiv = $(document).find('.container:first');

    $(document).scrollTop(nextdiv.offset().top);
    // $(this).parent().next() // this is the next div container.
    return false;
});

​代码基本使用了container.find('~.container, ~:has(.container)')找到任何有或正在的兄弟姐妹.container。如果没有,则沿 DOM 树向上 1 步。

当它发现某个东西是或有一个.container,它抓住它nextdiv = container.nextAll('.container, :has(.container)').first();.

最后,如果没有发现任何问题,则检查nextdiv.length==0,只需抓住第一个.container在整个页面中。

然后滚动到任何内容.container被抓住了。

http://jsfiddle.net/Pm3cj/3/ http://jsfiddle.net/Pm3cj/3/


要使滚动动画化,请将scrollTop财产在animate功能:

// $(document).scrollTop(nextdiv.offset().top); // snaps to new scroll position
$('body').animate({scrollTop:nextdiv.offset().top},300); // animates scrolling

http://jsfiddle.net/Pm3cj/4/ http://jsfiddle.net/Pm3cj/4/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

滚动到下一个元素 的相关文章

随机推荐

  • 尝试使用 maven 编译 JavaFX 项目时断言失败

    我正在开发一个 javaFX 项目 我想使用 maven 在终端中编译它 但我无法让它工作 它在 IntelliJ 中编译得很好 但当我在终端中时却编译不好 我正在使用编译脚本来运行它 我使用的是 M2 MacBook Air 这是我的 J
  • 奇怪的 Linq 错误

    我正在使用 Linq 将任何对象的数组转换为 CSV 列表 String Join From item In objectArray Select item ToString ToArray 这给了我一个奇怪的错误 范围变量名称不能与 Ob
  • 如何在IOS中制作慢动作视频

    我要做 慢动作 在视频文件和音频中 在一些帧之间 需要store将渐变视频作为新视频 Ref http www youtube com watch v BJ3 xMGzauk http www youtube com watch v BJ3
  • 如何使用 jquery 在 bootstrap 中激活导航栏

    我想让导航栏在我单击时处于活动状态 这是我使用的jquery document ready function navbar li click function e navbar li removeClass active var this
  • 如何使用 Python 和 OpenCV 从左到右、从上到下对轮廓进行排序

    我正在寻找带有数字和字符的图像的轮廓 用于 OCR 因此 我需要将轮廓从左到右排序 同时逐行排序 即从上到下 现在 轮廓不是这样排序的 例如 上面图像的轮廓是随机排序的 我需要的是排序为 D o y o u k n o w s o m e
  • android - FileProvider - 名称不能为空

    我的清单中有以下 FileProvider
  • 使用 BATCH 脚本检查目录中是否存在任何类型的文件

    您好 我正在编写一个批处理文件来检查给定文件夹内是否有任何类型的文件 到目前为止我已经尝试过以下方法 if EXIST FOLDERNAME echo Files Exist ELSE echo Empty 如果我知道文件扩展名 例如带有以
  • 正确使用AddClipboardFormatListener并订阅WM_CLIPBOARDUPDATE消息

    我当前正在尝试在我的应用程序中使用 Windows 剪贴板及其通知 具体来说 我正在尝试订阅WM CLIPBOARDUPDATE https learn microsoft com en us windows win32 dataxchg
  • 使用默认值python设置字典的缺失值

    我有一个 defaultdict list 和其他普通字典 A 1 blah nire 2 fooblah 3 blahblah B 1 something 2 somethingsomething 现在假设我有这样的东西 missing
  • 如何从命令行关闭 Rserve

    这个问题涉及到紧密联系 https stackoverflow com questions 23264328 connection of java and r with rserve或许也与此有关关闭预订 https stackoverfl
  • 在 mac osx 上启动应用程序的多个进程

    我在 mac osx 10 9 上使用 python 2 7 来创建应用程序 该应用程序将文件名作为参数 然后打开文件 并继续监视文件的更改 直到文件关闭 对于单个文件来说它工作得很好 我使用 py2app 和 platypus 将 pyt
  • PHP/Angularjs/发布数据为空

    我确实选择了两个字段 month and origin 以表格形式提交给AngularJS控制器 我使用的是与 Ionic 框架打包的 1 3 13 版本 观看一个console log inside then方法值已正确填充 The q
  • 在 Amazon EC2 上构建 gRPC 服务器

    当我尝试在 Amazon EC2 实例上构建 gRPC 服务器 客户端时遇到问题 我有一个实例 A 具有私有 ip 例如 1 2 3 4 服务器代码就像 from concurrent import futures import time
  • 没有共享窗口的山狮上的 NSSharingService

    在山狮上 我尝试使用 AppKit framework 的 NSSharingService 类来实现新的共享可能性 这种代码一切顺利 NSArray array myText NSImage imageNamed myImageFile
  • 扫描上传的文件 C# ASP.net

    我正在尝试对上传的文件进行病毒扫描 我无法控制已安装的病毒扫描程序 该产品由多方使用不同的扫描程序托管 我尝试了以下库 但它总是在 eicar 文件上返回 VirusNotFound https antivirusscanner codep
  • 如何设置MigraDoc的页面大小?

    抱歉 我只是 PDFsharp 的初学者 如何设置文档的PageSize 就说A4吧 怎么设置呢 这是我的代码 谢谢 Document document new Document Add a section to the document
  • 重复 UIAnimation 块,以及再次停止它的方法

    我想做一个小的加载器动画来放入我的应用程序中 我之前用 CGAnimations 做过重复动画 没有任何问题 这次我采用块方法 我正在做一个小测试 但可以重复以下代码 void startLoading block int count 0
  • 为什么 IE9/Firefox 显示的字体大小与其他浏览器不同?

    我正在对一个网站的 CSS 进行编程 并意识到 Internet Explorer 9 显示的字体大小与其他浏览器 Firefox Chrome Safari IE7 和 IE8 不同 我尝试过使用一些重置 并且我在中指定字体px 但IE9
  • 如何打印类型(Either String (IO String))?

    这是一个非常非常长的故事 我不会让你厌烦 但基本上 我设法让自己处于一种需要能够打印该类型的情况Either String IO String 有什么帮助吗 解决方案是单衬 either print print lt lt 如果你想区分它是
  • 滚动到下一个元素

    我正在努力解决 jquery 或 javascript 问题 它已经很烦人了 这告诉我我可能把这个问题想得太复杂了 所以我的标记 简单的 看起来像这样 div class container My Content a href class