Jquery通过按下按钮向下滚动到每个部分的顶部

Posted

技术标签:

【中文标题】Jquery通过按下按钮向下滚动到每个部分的顶部【英文标题】:Jquery to scroll down to top of each section with button press 【发布时间】:2014-08-24 09:23:02 【问题描述】:

这是我的代码:Js Fiddle

如您所见,我有几个部分相互重叠,高度为 100%。我想知道如何获取它,这样当用户点击“了解更多”时,他们会滚动到下一部分,因此该部分的顶部位于页面顶部。

通常我可以这样做很简单:

$('body').animate(
scrollTop:$(document).height()
);

但是,如果用户已经将部分滚动到一半,然后点击按钮,这将不起作用。如果我可以在每次按下按钮时使用相同的功能,而不是使用三个不同的功能,每个不同的部分一个,那也很好。

我猜代码会类似于(伪):scroll to top sectiona + 1

【问题讨论】:

你希望它以这种方式运行jsfiddle.net/niranjan_borawake/9uxGq/11 ? 点击时该部分应该移动到页面顶部还是应该滚动到视口顶部? 为什么需要jquery?在您的网址中使用锚标记名称,以指出特定部分。 效果很好,但我希望能顺利过渡 【参考方案1】:

使用 jQuery 和平滑滚动

 $('a').click(function()
        var nextSection = $(this).closest('section').next('section');
        $('html, body').animate(
            scrollTop: $(nextSection).offset().top
        , 2000);
    );

【讨论】:

这是一个很好的干净答案,但我如何让它在我的小提琴中工作? jsfiddle.net/9uxGq/20 1.您的文档中有未关闭的元素。 2.您的 id 不是唯一的 3.在您的情况下,定义类以在没有锚点的情况下导航会更容易jsfiddle.net/9uxGq/22【参考方案2】:

为什么不将 id 传递给每个部分,并在 href 中引用该 id,如

<section id="sectionOne">
  <a href="#sectionTwo">Move to section two</a>
</section>

<section id="sectionTwo">
  <a href="#sectionOne">Move to section one</a>
</section>

【讨论】:

使用这个 $("html, body").animate( scrollTop: $('#sectionNo').offset().top , 1000); ***.com/questions/6682451/… 这将以 1 秒的速度滚动到特定部分的顶部。 1000 是以毫秒为单位的动画速度。 但这需要为每个按钮提供不同的功能,以便硬编码下一个部分编号? 我不知道如何循环执行...但我认为它需要硬编码:(【参考方案3】:

您也可以尝试以下方法。

var amount_to_scroll_by = $(document).scrollTop() + element_to_scroll.getBoundingClientRect().top);

$(document).scrollTop(amount_to_scroll_by); // animate this scroll

希望这会有所帮助:)

【讨论】:

我很感激,但我不确定如何实现【参考方案4】:

使用jquery,可以平滑滚动到目标。

这是SAMPLE

JS:

$("a").click(function(e) 
    e.preventDefault();
    var target = $(this).attr('href');   
    $('html, body').animate( scrollTop : $(target).offset().top + "px");    
);

【讨论】:

【参考方案5】:

您应该首先修复锚点并使用散列片段来允许锚点之间的本地导航。

我创建了一个非常简单的演示让您理解这一点(不使用您的标记来保持简单)。

演示:http://jsfiddle.net/abhitalks/9uxGq/15/

(另一个带有您的标记的演示:http://jsfiddle.net/abhitalks/9uxGq/19/)

您需要两个锚点,一个作为点击链接,另一个将目标位置标记为锚点。

例如

<div>
    <a id="LearnMore1"></a> <!-- Used for marking the anchor with hash fragment -->
    <h2>Sub Heading 2</h2>
    <p>
        Some text content here
    </p>
    <a href="#LearnMore2">Learn More</a> <!-- Used to click to got to next anchor -->
</div>

注意:当然,您可以使用div(或者在您的情况下为section)和@,而不是使用第二个锚点作为标记987654327@。但是,a 更好,因为它对内容导航更具语义,并且意味着 anchor

一旦完成,这将成为您的后备方案。现在您可以使用 jQuery 等轻松实现动画了。

就这么简单:

// bind click on anchors (use selectors as per your requirements)
$("a").on("click", function(e)  
    e.preventDefault(); // prevent the default behaviour
    var nextAnchor = this.hash.replace("#", ""); // get the next marker anchor 
    var gotoPoint = $("#" + nextAnchor).position().top; // get the position of marker
    $('body').animate( scrollTop: gotoPoint , 'normal'); // animate the body
);

或者:

// bind click on anchors (use selectors as per your requirements)
$("a").on("click", function(e)  
    e.preventDefault(); // prevent the default behaviour
    var nextAnchor = $(this).attr('href'); // get the next marker anchor 
    var gotoPoint = $(nextAnchor).position().top; // get the position of marker
    $('body').animate( scrollTop: gotoPoint , 'normal'); // animate the body
);

现在将它应用到您的用例中,演示变为:http://jsfiddle.net/abhitalks/9uxGq/19/

希望对您有所帮助,您可以在标记和用例中解决它。 .

【讨论】:

以上是关于Jquery通过按下按钮向下滚动到每个部分的顶部的主要内容,如果未能解决你的问题,请参考以下文章

仅通过按下按钮滚动 UICollectionView

如何在 react-native 中的 onPress 按钮上滚动顶部?

使用按钮滚动后如何返回活动顶部?

Internet Explorer 8 到 11 中的滚动条按钮大小

使用 jquery 修复顶部的菜单。向下滚动时以后不会出现菜单?

向上滚动和向下滚动时导航按钮的颜色变化