使用 jQuery 滚动到一个元素

凌恩
2023-12-01

问:

我有这个 input 元素:

  

然后我有一些其他元素,比如其他标签的 & 个标签等…

当用户点击 时,页面应该滚动到页面的最后一个元素,并且应该使用漂亮的动画来做到这一点(应该是滚动到底部而不是顶部)。

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



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

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

答1:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

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

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

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

$(document).ready(function (){ $("#click").click(function (){ $('html, body').animate({ scrollTop: $("#div1").offset().top }, 2000); } ); });   测试    测试2  点我 

这并非在所有情况下都有效。请参阅stackoverflow.com/questions/2905867/…

如果您不想要动画,而是想立即跳转到元素,请使用 .scrollTop(…) 而不是 .animate({scrollTop: …}, …)。

如果您想阅读那篇文章,这里有一个有效的链接:Smoothly scroll to an element without a jQuery plugin

由于某种原因,当我使用此方法时,滚动被锁定在该位置。我无法在其他任何地方滚动。

答2:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

jQuery .scrollTo(): View - Demo, API, Source

我编写了这个轻量级插件来使页面/元素滚动更容易。它很灵活,您可以传入目标元素或指定值。也许这可能是 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:一个字符串,指示用于过渡的缓动函数。

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

$('body') 在 FF 中不起作用,所以尝试了 $('html, body') 。

如果有人需要这个脚本源,那么在这里你可以得到它flesler.com/jquery/scrollTo/js/jquery.scrollTo-min.js

答3:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

如果您对平滑滚动效果不太感兴趣,而只是对滚动到特定元素感兴趣,那么您不需要一些 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] 吗?

RobW,是的,您可以只使用 [0],但 get(0) 可以保护您免受未定义或负索引的影响。查看来源:james.padolsey.com/jquery/#v=1.10.2&fn=jQuery.fn.get

如果您根本不想使用 jQuery,只需使用 document.getElementById('#elementID').scrollIntoView()。仅仅为了选择一个元素然后将其转换为常规 JavaScript 就加载约 100k 的库是没有用的。

@Gavin 我确定您的意思是:document.getElementById('elementID').scrollIntoView()

能够定义偏移量会很好...... stackoverflow.com/q/24665602/1066234

答4:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

锁定。目前正在解决此答案的内容存在争议。它目前不接受新的交互。

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

document.getElementById("element-id").scrollIntoView();

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

请停止编辑您的问题以引入不相关的闲聊。数以百万计的答案答案仍在“多年后”为他们的作者提供代表。我们不需要调用它,它不会为问题或网站增加任何价值。

答5:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

使用这个简单的脚本

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

如果在 url 中找到散列标签,则可以将 scrollTo 动画到 ID。如果未找到哈希标记,则忽略该脚本。

答6:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

jQuery(document).ready(function($) { $(‘a[href^=“#”]’).bind(‘click.smoothscroll’,function (e) { e.preventDefault(); var target = this .hash, $target = $(target); $(‘html, body’).stop().animate( { ‘scrollTop’: $target.offset().top-40 }, 900, ‘swing’, 函数() { window.location.hash = 目标; } ); } ); } ); 第 1 节 第2节 第3节 < div id=“pane1”>

为了使其更通用并删除不必要的标签放置到浏览器链接窗口中,我只是调整了以下代码:jQuery(document).ready(function($) { $(document).on( "click", 'a[href^="#"]', function( e ) { e.preventDefault(); var target = this.hash, $target = $(target); $('html, body').stop().animate({ scrollTop: $target.offset().top - 100}, 1000); }); });

答7:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

我就是这样做的。

document.querySelector('scrollHere').scrollIntoView({ behavior: 'smooth' })

适用于任何浏览器。

它可以很容易地包装成一个函数

function scrollTo(selector) {
    document.querySelector(selector).scrollIntoView({ behavior: 'smooth' })
}

这是一个工作示例

$(“.btn”).click(function() { document.getElementById(“scrollHere”).scrollIntoView( {behavior: “smooth” }) }) .btn {margin-bottom: 500px;} .middle {display:堵塞;边距底部:500px;颜色:红色;} 滚动down 你看到了吗? 到达目的地

Docs

很短很甜。需要注意的一件事-我认为这只会将其滚动到视图中(可能位于视口的底部),而不是像设置 scrollTop 那样将其滚动到视口的顶部。

我也使用了这个解决方案,但至少 Chrome 版本 92 出于某种原因默认禁用了平滑滚动,所以这个解决方案不再起作用(截至撰写本文时)。实际上相当令人失望。仍然可以通过为 chrome://flags/#smooth-scrolling 配置选择“已启用”(而不是“默认”)来手动启用它。

答8:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

史蒂夫和彼得的解决方案效果很好。

但在某些情况下,您可能必须将值转换为整数。奇怪的是, ( " . . . " ) . o f f s e t ( ) . t o p 的返回值有时在 f l o a t 中。使用: p a r s e I n t ( ("...").offset().top 的返回值有时在 float 中。 使用:parseInt( ("...").offset().top的返回值有时在float中。使用:parseInt((“…”).offset().top)

例如:

$("#button").click(function() {
    $('html, body').animate({
        scrollTop: parseInt($("#elementtoScrollToID").offset().top)
    }, 2000);
});

答9:

huntsbot.com – 高效赚钱,自由工作

“动画”解决方案的紧凑版本。

$.fn.scrollTo = function (speed) {
    if (typeof(speed) === 'undefined')
        speed = 1000;

    $('html, body').animate({
        scrollTop: parseInt($(this).offset().top)
    }, speed);
};

基本用法:$(‘#your_element’).scrollTo();

答10:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

使用 this solution,您不需要任何插件,并且除了将脚本放置在结束 标记之前,无需设置。

$("a[href^='#']").on("click", function(e) {
  $("html, body").animate({
    scrollTop: $($(this).attr("href")).offset().top
  }, 1000);
  return false;
});

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

在加载时,如果地址中有哈希,我们滚动到它。

并且 - 每当您点击带有 href 散列的 a 链接(例如 #top)时,我们都会滚动到它。

##编辑 2020

如果你想要一个纯 JavaScript 解决方案:你也许可以改用类似的东西:

var _scrollToElement = function (selector) {
  try {
    document.querySelector(selector).scrollIntoView({ behavior: 'smooth' });
  } catch (e) {
    console.warn(e);
  }
}

var _scrollToHashesInHrefs = function () {
  document.querySelectorAll("a[href^='#']").forEach(function (el) {
    el.addEventListener('click', function (e) {
      _scrollToElement(el.getAttribute('href'));
      return false;
    })
  })
  if (window.location.hash) {
    _scrollToElement(window.location.hash);
  }
}

_scrollToHashesInHrefs();

答11:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

如果您只处理滚动到输入元素,则可以使用 focus()。例如,如果您想滚动到第一个可见输入:

$(':input:visible').first().focus();

或者类 .error 的容器中的第一个可见输入:

$('.error :input:visible').first().focus();

感谢Tricia Ball指出这一点!

原文链接:https://www.huntsbot.com/qa/ZvE9/scroll-to-an-element-with-jquery?lang=zh_CN&from=csdn

huntsbot.com – 高效赚钱,自由工作

 类似资料: