【问题标题】:How to scroll to an element in jQuery?如何滚动到jQuery中的元素?
【发布时间】:2010-10-04 18:15:21
【问题描述】:

我在 JavaScript 中完成了以下代码,将焦点放在特定元素上(branch1 是一个元素),

document.location.href="#branch1";

但由于我也在我的网络应用程序中使用 jQuery,所以我想在 jQuery 中执行上述代码。我试过但不知道为什么它不起作用,

$("#branch1").focus();

上面的 jquery (focus()) 代码不适用于 div,而如果我尝试使用文本框使用相同的代码,那么它可以工作,

请告诉我,如何使用 jQuery 将焦点放在 div 元素上?

谢谢!

【问题讨论】:

    标签: javascript jquery html focus


    【解决方案1】:

    对于我的问题,这段代码有效,我必须在页面加载时导航到锚标记:

    $(window).scrollTop($('a#captchaAnchor').position().top);
    

    就此而言,您可以在任何元素上使用它,而不仅仅是锚标记。

    【讨论】:

    • 您应该使用“$(window).scrollTop”而不是“$(this).scrollTop”。当“this”恰好与“window”相同时,第一个唯一的工作方式。
    【解决方案2】:

    就像@user293153 我刚刚发现了这个问题,似乎没有得到正确的回答。

    他的回答是最好的。但您也可以为元素设置动画。

    $('html, body').animate({ scrollTop: $("#some_element").offset().top }, 500);
    

    【讨论】:

    • 如果你在 .live('click') 中使用它并且你注意到窗口跳转到页面顶部,添加一个“return false”作为最后一个语句,它可以解决问题对于 IE 和 Chrome:D
    • 太棒了。它不需要插件。
    • 请注意,尽管在选择器中似乎不需要“html”,但没有它,Firefox 将不会进行滚动。所以 $('html, body') 有效,$('body') 无效(仅限 FF,在 IE 和 Chrome 中可以正常工作)。
    【解决方案3】:

    您可以像这样扩展 jQuery 功能:

    jQuery.fn.extend({
    scrollToMe: function () {
        var x = jQuery(this).offset().top - 100;
        jQuery('html,body').animate({scrollTop: x}, 500);
    }});
    

    然后:

    $('...').scrollToMe();
    

    简单;-)

    【讨论】:

    • 我认为这是最好的解决方案。只需添加一次,然后忘记它... :-)
    • 非常好的解决方案。这种类型的解决方案将超越 OP 问题并缩写我的一堆代码。
    • @Oudin 我知道这反应很慢,但是将'html,body' 替换为'.scrollable-container',然后添加scrollable-container' to the list of classes on your div. You could also add a parameter to scrollToMe`,它采用您想成为父级的任何特定选择器。跨度>
    • 谢谢这是一个很好的答案。我不需要动画,所以我只是做了scrollToMe: function () { var x = jQuery(this).offset().top - 100; $('html').scrollTop(x); }});
    • 谢谢,做得好。我将此扩展为处理滚动窗口中的滚动对象。 jQuery.fn.extend({ scrollToMe: function (e) { if (typeof(e)=='undefined'){ e='html,body'; } var y = jQuery(this).offset().top; jQuery(e).animate({scrollTop: y}, 500); } });
    【解决方案4】:

    检查jQuery.ScrollTo,我认为这是您想要的行为,检查demo

    【讨论】:

    【解决方案5】:

    查看jquery-scrollintoview

    ScrollTo 很好,但通常您只是想确保 UI 元素可见,不一定在顶部。 ScrollTo 对此没有帮助。从 scrollintoview 的自述文件:

    这个插件如何解决用户体验问题

    此插件将特定元素滚动到类似于浏览器的视图中 内置功能(DOM 的 scrollIntoView() 函数),但有效 不同(并且可以说更用户友好):

    • 仅当元素实际上不在视野范围内时才会滚动到元素;如果元素在视图中(可见文档区域中的任何位置),则不滚动 将执行;
    • 它使用动画效果滚动;执行滚动时,用户确切地知道他们没有被重定向到任何地方,但实际上看到 他们只是简单地移动到同一页面中的其他地方(以及 他们移动的方向);
    • 应用的滚动量总是最小的;当元素位于可见文档区域上方时,它将滚动到 可见区域的顶部;当元素低于可见时,它将是 滚动到可见区域的底部;这是最一致的 滚动方式-有时滚动总是在顶部 元素接近底部时无法滚动到顶部 可滚动容器(因此滚动是不可预测的);
    • 当元素的大小超过可见文档区域的大小时,其左上角将滚动到;

    【讨论】:

      【解决方案6】:

      使用

      $(window).scrollTop()

      它会将窗口滚动到该项目。

       var scrollPos =  $("#branch1").offset().top;
       $(window).scrollTop(scrollPos);
      

      【讨论】:

      • 请不要添加same answer to multiple questions。一旦您获得足够的声誉,就回答最好的一个并将其余的标记为重复。如果不是重复的,edit 回答并根据问题调整帖子。
      【解决方案7】:

      如果你只是想滚动到指定的元素,你可以使用元素的scrollIntoView 方法。 这是一个例子:

      $target.get(0).scrollIntoView();
      

      【讨论】:

      • 谢谢!彻底解决了我的问题。我还添加了 {behavior: "smooth"} 作为平滑滚动的参数。
      【解决方案8】:

      根据你的例子,我认为你可能正在寻找一个“锚”。

      <a href="#jump">This link will jump to the anchor named jump</a>
      <a name="jump">This is where the link will jump to</a>
      

      focus jQuery 方法的作用与您想要实现的不同。

      【讨论】:

      • 是的,我正在尝试实现相同的锚定任务。好的,如果焦点不能做到这一点,jquery中是否有其他方法可以做到这一点?
      【解决方案9】:

      要让 focus() 函数作用于元素,div 需要有一个 tabindex 属性。默认情况下,这种类型的元素可能不会这样做,因为它不是输入字段。例如,您可以在 -1 处添加一个 tabindex,以防止使用 tab 的用户专注于它。如果您使用正数 tabindex,用户将能够使用 tab 来关注 div 元素。

      这里是一个例子:http://jsfiddle.net/klodder/gFPQL/

      但是 Safari 不支持 tabindex。

      【讨论】:

        猜你喜欢
        • 2022-10-14
        • 2019-03-20
        • 2016-10-28
        • 2015-09-03
        • 1970-01-01
        • 1970-01-01
        • 2013-04-10
        • 1970-01-01
        • 2012-04-07
        相关资源
        最近更新 更多