我设置了一个哈希改变函数,可以在不使用7个单独页面的情况下显示/隐藏关于页面的不同部分。这一切都很好,甚至很棒,只有一个小问题困扰着我,当相关内容显示在屏幕上时,例如:#about01
如果您再次点击菜单按钮,浏览器会跳到此div的顶部,这是我不想发生的事情。
以下是我的jQuery代码:
jQuery(document).ready(function(){
jQuery(window).on('hashchange', function(){
var hashFound = determineContent();
if(hashFound) return false;
});
function determineContent(){
var hash = window.location.hash;
jQuery('.about').hide();
jQuery('.sub-menu').each(function(){
if (jQuery(this).attr('hook') === hash.replace('#about', '')) {
jQuery('#about'+jQuery(this).attr('hook')).fadeIn();
return true;
}
});
jQuery('html, body').animate({scrollTop:0}, 'slow');
return false;
}
determineContent();
});
HTML:
<div id="sub-menu">
<li id="sub-menu-01" class="sub-menu" hook="01"><a href="#about01">TEST</a></li>
<li id="sub-menu-02" class="sub-menu" hook="02"><a href="#about02">TEST</a></li>
<li id="sub-menu-03" class="sub-menu" hook="03"><a href="#about03">TEST</a></li>
<li id="sub-menu-04" class="sub-menu" hook="04"><a href="#about04">TEST</a></li>
<li id="sub-menu-05" class="sub-menu" hook="05"><a href="#about05">TEST</a></li>
<li id="sub-menu-06" class="sub-menu" hook="06"><a href="#about06">TEST</a></li>
<li id="sub-menu-07" class="sub-menu" hook="07"><a href="#about07">TEST</a></li>
</div>
<div id="about01" class="about">CONTENT HERE
</div>
<div id="about02" class="about">CONTENT HERE
</div>
<div id="about03" class="about">CONTENT HERE
</div>
<div id="about04" class="about">CONTENT HERE
</div>
<div id="about05" class="about">CONTENT HERE
</div>
<div id="about06" class="about">CONTENT HERE
</div>
<div id="about07" class="about">CONTENT HERE
</div>
就像我之前说的,如果显示了#about01
,用户再次点击#sub-menu-01
时,窗口会滚动到此
的顶部,这是url中哈希标记的正常行为。有没有一种方法可以防止默认行为,在单击时不滚动到此
的顶部?
此外,我正在尝试找出是否有一种方法可以在
此外,我正在尝试找出是否有一种方法可以在
www.website.com/about
页面加载时显示#about01
,而无需输入www.website.com/about/#about01
等内容?
.sub-menu
,浏览器会滚动到div
,这不是我想要的。 - user1374796jQuery('html, body').animate({scrollTop:0}, 'slow');
这行代码。这就是窗口滚动到顶部的原因。删除该行代码即可解决问题http://jsfiddle.net/dnsxf/3/。 - davids