之前,我有這個劇本,我的導航:jQuery的scrollTo捕捉負載
$(function() {
$("a").click(function (e) {
var target = $(this).attr("href");
if (target.match("^#")) { // Check to see if we are an anchor link
e.preventDefault(); // Prevent default only if we are :)
navigate(target);
}
});
});
function navigate(target) {
var offset = $("header").outerHeight(true);
var $target = $(target);
if ($target.length > 0) {
var position = $target.offset().top - offset;
$("html, body").animate({
scrollTop: position
}, 500);
}
};
主要的事情要注意這個是偏移因爲導航是固定。 我對這個網站看起來是這樣的:
<nav id="navigation" class="navbar navbar-main" role="navigation">
<div class="collapse navbar-collapse">
<ul class="nav">
<li class="active">@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("Strategies", "Index", "Strategies")</li>
<li><a href="#services">Services</a></li>
<li><a href="#packages">Packages</a></li>
<li><a href="#work">How we work</a></li>
<li><a href="#portfolio">Portfolio</a></li>
<li><a href="#clients">Clients</a></li>
<li>@Html.ActionLink("Blog", "Index", "Blog")</li>
<li><a href="#contact">Contact</a></li>
</ul>
</div>
</nav>
注意的HREFs這裏。他們使用的散列正如你所期望的那樣。但正如你所看到的,有2頁將你帶到另一個單獨的頁面(策略和博客)。 這些頁面上的菜單如下:
<nav id="navigation" class="navbar navbar-main" role="navigation">
<div class="collapse navbar-collapse">
<ul class="nav">
<li class="@Html.ActivePage("Home", "Index")">@Html.ActionLink("Home", "Index", "Home")</li>
<li class="@Html.ActivePage("Strategies", "Index")">@Html.ActionLink("Strategies", "Index", "Strategies")</li>
<li><a href="/#services">Services</a></li>
<li><a href="/#packages">Packages</a></li>
<li><a href="/#work">How we work</a></li>
<li><a href="/#portfolio">Portfolio</a></li>
<li><a href="/#clients">Clients</a></li>
<li class="@Html.ActivePage("Blog", "Index")">@Html.ActionLink("Blog", "Index", "Blog")</li>
<li><a href="/#contact">Contact</a></li>
</ul>
</div>
</nav>
唯一不同的是,所有的環節現在有/#,而不是僅僅#將首先將其轉到主頁,然後它的動作它的位置。
因爲這是一個正常的鏈接,它不是由我的導航字符串處理,所以我創造了這個功能:
function getHashtag() {
var href = location.href; // get the url
var split = href.split("#"); // split the string; usually there'll be only one # in an url so there'll be only two parts after the splitting
if (split[1] != null) {
navigate(split[1]);
}
}
它得到的哈希,然後明確要求我導航功能。
我的整個腳本現在看起來是這樣的:
$(function() {
getHashtag();
$("a").click(function (e) {
var target = $(this).attr("href");
if (target.match("^#")) { // Check to see if we are an anchor link
e.preventDefault(); // Prevent default only if we are :)
navigate(target);
}
});
});
function getHashtag() {
var href = location.href; // get the url
var split = href.split("#"); // split the string; usually there'll be only one # in an url so there'll be only two parts after the splitting
if (split[1] != null) {
navigate(split[1]);
}
}
function navigate(target) {
var offset = $("header").outerHeight(true);
var $target = $(target);
if ($target.length > 0) {
var position = $target.offset().top - offset;
$("html, body").animate({
scrollTop: position
}, 500);
}
};
正如你所看到的,我的頁面加載後調用getHashtag,我需要做的就是把它叫做什麼裝載前和覆蓋默認操作(可能是e.preventDefault)。 有人知道我該怎麼做?
乾杯
我不知道你在找什麼難道要防止在哈希值的URL的情況下,默認的「jumpto」的行爲? –
您可以在您的頁面的
部分之前將您的「getHashtag」調用放入內聯腳本中,以便在加載完整頁面之前執行它。但是你的「導航」函數使用了一些jQuery方法,這些方法需要加載jQuery庫。您可以嘗試不使用jQuery,使用JavaScript的getElementById和其他函數。 –