使用 jQuery 滚动到一个元素

IT技术 javascript jquery scroll
2021-01-06 15:52:44

我有这个input元素:

<input type="text" class="textfield" value="" id="subject" name="subject">

然后我还有一些其他元素,比如其他文本输入、文本区域等。

当用户点击它input#subject,页面应该滚动到页面的最后一个元素,并带有漂亮的动画。它应该是滚动到底部而不是顶部。

页面的最后一项是一个submit按钮,带有#submit

<input type="submit" class="submit" id="submit" name="submit" value="Ok, Done.">

动画不应该太快并且应该是流畅的。

我正在运行最新的 jQuery 版本。我更喜欢不安装任何插件,而是使用默认的 jQuery 功能来实现这一点。

6个回答

假设您有一个带有 id 的按钮button,请尝试以下示例:

$("#button").click(function() {
    $([document.documentElement, document.body]).animate({
        scrollTop: $("#elementtoScrollToID").offset().top
    }, 2000);
});

我从文章Smoothly scroll to an element without a jQuery plugin 中得到了代码我已经在下面的示例中对其进行了测试。

<html>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
    <script>
        $(document).ready(function (){
            $("#click").click(function (){
                $('html, body').animate({
                    scrollTop: $("#div1").offset().top
                }, 2000);
            });
        });
    </script>
    <div id="div1" style="height: 1000px; width 100px">
        Test
    </div>
    <br/>
    <div id="div2" style="height: 1000px; width 100px">
        Test 2
    </div>
    <button id="click">Click me</button>
</html>

这不会在所有情况下都有效。参见stackoverflow.com/questions/2905867/...
2021-02-08 15:52:44
如果您正在尝试阅读那篇文章,这里有一个工作链接:Smoothly scroll to an element without a jQuery plugin
2021-02-25 15:52:44
如果您不想要动画,而是想要立即跳转到元素,请使用.scrollTop(…)代替.animate({scrollTop: …}, …)
2021-03-06 15:52:44

jQuery .scrollTo() 方法

jQuery .scrollTo():查看 - 演示、API、源代码

我编写了这个轻量级插件来使页面/元素滚动更容易。您可以灵活地传入目标元素或指定值。也许这可能是 jQuery 下一个正式版本的一部分,你怎么看?


示例用法:

$('body').scrollTo('#target'); // Scroll screen to target element

$('body').scrollTo(500); // Scroll screen 500 pixels down

$('#scrollable').scrollTo(100); // Scroll individual element 100 pixels down

选项:

scrollTarget:指示所需滚动位置的元素、字符串或数字。

offsetTop:定义滚动目标上方额外间距的数字。

持续时间:确定动画将运行多长时间的字符串或数字。

easing:一个字符串,指示用于过渡的缓动函数。

complete : 动画完成后调用的函数。

$('body') 在 FF 中不起作用,所以尝试了 $('html, body') ,它起作用了。
2021-02-20 15:52:44
如果有人需要这个脚本源,那么在这里你可以得到它flesler.com/jquery/scrollTo/js/jquery.scrollTo-min.js
2021-03-04 15:52:44

如果您对平滑滚动效果不太感兴趣,而只是对滚动到特定元素感兴趣,那么您不需要为此使用一些 jQuery 函数。Javascript 已经涵盖了您的案例:

https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView

所以你需要做的就是: $("selector").get(0).scrollIntoView();

.get(0) 使用它是因为我们想要检索 JavaScript 的 DOM 元素而不是 JQuery 的 DOM 元素。

你也可以用$(selector)[0]吗?
2021-02-08 15:52:44
@Gavin 我确定你的意思是: document.getElementById('elementID').scrollIntoView()
2021-02-25 15:52:44
RobW,是的,您可以只使用 [0],但 get(0) 可以保护您免受未定义或负索引的影响。见源码: james.padolsey.com/jquery/#v=1.10.2&fn=jQuery.fn.get
2021-02-28 15:52:44
如果您根本不想使用 jQuery,只需使用document.getElementById('#elementID').scrollIntoView(). 仅仅为了选择一个元素,然后将其转换为常规 JavaScript,加载一个 ~100k 的库是没有用的。
2021-03-08 15:52:44

这可以在没有 jQuery 的情况下实现:

document.getElementById("element-id").scrollIntoView();
请停止编辑您的问题以引入无关的闲聊。数以百万计的答案仍在“多年后”为他们的作者提供代表。我们不需要这点,它对问题或网站没有任何value。
2021-02-10 15:52:44

使用这个简单的脚本

if($(window.location.hash).length > 0){
        $('html, body').animate({ scrollTop: $(window.location.hash).offset().top}, 1000);
}

如果在 url 中找到散列标签,scrollTo 会根据 ID 设置动画。如果未找到哈希标记,则忽略该脚本。