页面滚动到不同的页面

时间:2012-04-10 14:22:33

标签: jquery asp.net asp.net-mvc jquery-plugins scroll

使用ASP.NET MVC可能无法做到这一点,因为我无法找到答案。我想要做的是点击一个链接,它将加载目标页面,然后滚动到该页面上的锚点。在this question中回答了一个完美的例子。

但是,如何使用JavaScript / jQuery?

更新:使用此代码,除了setTimeOut定义外,一切正常。它只是一直运行脚本,直到我点击停止,然后向下滚动到锚点。那是为什么?

var jump = function (e) {
    if (e) {
        e.preventDefault();
        var target = $(this).attr("href");
    } else {
        var target = location.hash;
    }

    $('html,body').animate(
{
   scrollTop: $(target).offset().top
}, 2000, function () {
   location.hash = target;
});

}

$('html, body').hide();
$(document).ready(function () {
    $('a[href^=#]').bind("click", jump);

    if (location.hash) {
        setTimeout(function () {
            $('html, body').scrollTop(0).show();
            jump();
        }, 0);
    } else {
        $('html, body').show();
    }        

});

4 个答案:

答案 0 :(得分:2)

我对asp.net一无所知,但这就是我认为正在发生的事情:

如果在位置提供哈希,ASP.NET MVC的MicrosoftAjax模块会在初始化时重新加载页面。

MVC框架,即其MicrosoftAjax组件,尝试一些浏览器的历史记录管理,它使用URL的哈希部分,这是一个有效的标准程序,直到这一点。在初始化时,Sys$_Application$initialize()_navigate()使用_raiseNavigate()应用程序方法。这个专门为Firefox做了一些舞蹈:

// Name:        MicrosoftAjax.debug.js
// Assembly:    System.Web.Extensions
// Version:     4.0.0.0
// FileVersion: 4.0.20526.0

if ((Sys.Browser.agent === Sys.Browser.Firefox) && window.location.hash &&
    (!window.frameElement || window.top.location.hash)) {
    window.history.go(0);
}

三个条件:

  1. 浏览器是Firefox
  2. 地址带有URL后面的哈希部分
  3. 它不在框架内
  4. 所有这些都传递给你的情况,野兽被释放出来:

    window.history.go(0);
    

    指示浏览器的历史记录管理器按照作为参数给出的距离返回或前进。 -2退后一步,1向前迈出一步。因此0有效地重新加载页面。并且在每个页面上加载任何给予页面的哈希。无论如何,想不出这条线的任何有效目的......

    如果我评论出那些相当毛茸茸且毫无意义的线条,它确实有效!它似乎是Firefox 3.5或更低版本的向后兼容性尝试,所以我想说删除它或更好地更新你的MVC。

答案 1 :(得分:1)

这不是jQuery的问题。在您的视图中,您应该添加一些代码,

<script>
  $(function () }

     var hash = window.location.hash;
     var achor = hash.substring(hash.indexOf('#'));

     $('html,body').animate({scrollTop: $("#"+achor).offset().top} 

  });
</script>

答案 2 :(得分:0)

这真的不是关于ASP.NET MVC,更多是关于客户端脚本(Javascript)。请参阅此SO thread关于与路由相关的哈希(#)...我认为这是与ASP.Net MVC相关的唯一项目...

答案 3 :(得分:0)

我部分地回答了我自己的问题。我总是使用Firefox,所以我的测试是在Firefox 11.0中。我在IE中快速检查它,它的工作原理。在以前版本的Firefox中测试过,它运行良好。它只是在Firefox 11.0中不起作用。我将结束这个问题并开辟一个新的问题来解决相应的问题。