使用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();
}
});
答案 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);
}
三个条件:
所有这些都传递给你的情况,野兽被释放出来:
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中不起作用。我将结束这个问题并开辟一个新的问题来解决相应的问题。