【问题标题】:jQuery: how to scroll to certain anchor/div on page load?jQuery:如何在页面加载时滚动到某个锚点/div?
【发布时间】:2012-04-03 04:44:55
【问题描述】:

最近我尝试更频繁地使用 jquery,现在我遇到了一些我想用 jquery 解决的问题,希望你能帮助我。

我有一些网页包含一些锚标记(假设锚位于页面中间),并且在 onload 事件中我希望页面从某个锚标记位置开始,这意味着页面将是“滚动”自动到某个位置。

这是我之前的解决方案(这很丑,因为它在我的网址中添加了#i)

window.onload = window.location.hash = 'i';

你能告诉我如何用 jquery 来做吗?

注意:我不希望用户在到达此位置时感觉到任何滑动或效果

【问题讨论】:

  • 所以您只希望用户“弹出”到该部分,没有任何幻灯片效果?

标签: javascript jquery


【解决方案1】:

使用下面的简单示例

function scrollToElement(ele) {
    $(window).scrollTop(ele.offset().top).scrollLeft(ele.offset().left);
}

ele 是您的元素 (jQuery) .. 例如:scrollToElement($('#myid'));

【讨论】:

  • 完美运行!! :) 只是为了这项运动,我想从其他人那里了解更多的解决方案,尽管我现在很满意 :)
  • @Himu 非常简单...它将滚动位置设置到您传入的元素的左上角...
【解决方案2】:

没有必要使用jQuery,因为这是native JavaScript functionality

element.scrollIntoView()

【讨论】:

  • 这应该是正确答案,问题中的例子没有使用jQuery
  • @ReshapeMedia 我同意它最简单的答案 - 但请阅读问题 -> 你能告诉我如何用 jquery 来做吗?
  • scrollIntoView 对我来说不是一个功能。
  • 基于文档,仅 Firefox 支持
  • scrollIntoView 有广泛的支持(它是仅在 Firefox 中支持的 options 参数)
【解决方案3】:

我已经尝试了几个小时,阻止浏览器跳转到锚点而不是滚动到它的最简单方法是:使用另一个锚点(您不在网站上使用的 id)。因此,不是链接到“http://#YourActualID”,而是链接到“http://#NoIDonYourSite”。噗,浏览器不会再跳了。

然后只需检查是否设置了锚点(使用下面提供的脚本,将其从另一个线程中拉出!)。并设置您想要滚动到的实际 id。

$(document).ready(function(){


  $(window).load(function(){
    // Remove the # from the hash, as different browsers may or may not include it
    var hash = location.hash.replace('#','');

    if(hash != ''){

       // Clear the hash in the URL
       // location.hash = '';   // delete front "//" if you want to change the address bar
        $('html, body').animate({ scrollTop: $('#YourIDtoScrollTo').offset().top}, 1000);

       }
   });
});

有关工作示例,请参阅 https://lightningsoul.com/media/article/coding/30/YOUTUBE-SOCKREAD-SCRIPT-FOR-MIRC#content

【讨论】:

  • 这个解决方案对我来说就像一个魅力,但我已经:a)将动画延迟从 1000 减少到 400; b) 在 URL 地址栏中保持哈希不变,并且 c)#YourIDtoScrollTo 更改为 '+hash+' 以便滚动到我的网站提供的任何动态哈希并且用户导航到...
  • 听起来不错。我建议为需要此功能的任何人实施您的更改。除了每个开发人员需要的可选延迟之外。 ;)
  • 你为什么有$(document).ready(function()$(window).load(function()
  • @ChuckLeButt 如前所述,这已从另一个线程中拉出。我猜这是为了应对浏览器中的一些奇怪的错误。如果你想了解更多,这里有一个线程stackoverflow.com/questions/5182016/…
【解决方案4】:

我是这样实现的..

if(location.pathname == '/registration')
{
$('html, body').animate({ scrollTop: $('#registration').offset().top - 40}, 1000);
}

【讨论】:

    【解决方案5】:

    看看this

    将#value附加到地址中是IE等浏览器用来识别页面上命名锚点位置的默认行为,这来自Netscape。

    你可以拦截它并删除它,阅读this文章。

    【讨论】:

    • 这是一个动画版本...... OP 想在没有动画的情况下做到这一点!
    • OP 可以修改代码,这是帮助他走向正确方向的功能示例。
    【解决方案6】:
        /* START --- scroll till anchor */
            (function($) {
                 $.fn.goTo = function() {
                      var top_menu_height=$('#div_menu_header').height() + 5 ;
                      //alert ( 'top_menu_height is:' + top_menu_height );
                      $('html, body').animate({
                            scrollTop: (-1)*top_menu_height + $(this).offset().top + 'px'
                      }, 500);
                      return this; // for chaining...
                 }
            })(jQuery);
    
            $(document).ready(function(){
    
              var url = document.URL, idx = url.indexOf("#") ;
              var hash = idx != -1 ? url.substring(idx+1) : "";
    
              $(window).load(function(){
                 // Remove the # from the hash, as different browsers may or may not include it
                 var anchor_to_scroll_to = location.hash.replace('#','');
                 if ( anchor_to_scroll_to != '' ) {
                     anchor_to_scroll_to = '#' + anchor_to_scroll_to ;
                     $(anchor_to_scroll_to).goTo();
                 }
                });
            });
        /* STOP --- scroll till anchror */
    

    【讨论】:

      【解决方案7】:

      只需使用 scrollTo 插件

      $("document").ready(function(){
        $(window).scrollTo("#div")
      })
      

      【讨论】:

      • 我添加了插件,但它仍然说 $("window").scrollTo is not a function
      • 很抱歉它是 $(window).scrollTo("#id") 或者你也可以使用 $.scrollTo("#id")
      【解决方案8】:

      只需将#[id of the div you want to scroll to] 附加到您的页面网址即可。例如,如果我想滚动到此 stackoverflow 问题的版权部分,则 URL 将从

      更改
      http://stackoverflow.com/questions/9757625/jquery-how-to-scroll-to-certain-anchor-div-on-page-load
      

      http://stackoverflow.com/questions/9757625/jquery-how-to-scroll-to-certain-anchor-div-on-page-load#copyright
      

      注意网址末尾的#copyright

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-11
      • 2015-07-26
      • 2013-03-15
      • 2012-05-17
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多