我有以下代码:
$('ul.questions li a').click(function(event) {
$('.tab').hide();
$($(this).attr('href')).fadeIn('slow');
event.preventDefault();
window.location.hash = $(this).attr('href');
});
这简单地根据您点击的时间淡化div,但我希望您点击时更改页面URL哈希标记,以便人们可以复制和添加书签。目前,当哈希标记发生变化时,这会有效地重新加载页面。
是否可以更改哈希标记而不重新加载页面以防止跳跃效应?
答案 0 :(得分:76)
这对我有用
$('ul.questions li a').click(function(event) {
event.preventDefault();
$('.tab').hide();
window.location.hash = this.hash;
$($(this).attr('href')).fadeIn('slow');
});
点击此处http://jsbin.com/edicu查看代码几乎相同的演示
答案 1 :(得分:4)
您可以尝试捕获onload事件。并根据某些标志停止传播。
var changeHash = false;
$('ul.questions li a').click(function(event) {
var $this = $(this)
$('.tab').hide(); //you can improve the speed of this selector.
$($this.attr('href')).fadeIn('slow');
StopEvent(event); //notice I've changed this
changeHash = true;
window.location.hash = $this.attr('href');
});
$(window).onload(function(event){
if (changeHash){
changeHash = false;
StopEvent(event);
}
}
function StopEvent(event){
event.preventDefault();
event.stopPropagation();
if ($.browser.msie) {
event.originalEvent.keyCode = 0;
event.originalEvent.cancelBubble = true;
event.originalEvent.returnValue = false;
}
}
未经测试,因此不能说是否可行
答案 2 :(得分:1)
答案 3 :(得分:0)
接受的答案对我不起作用,因为我的页面在点击时稍微跳了一下,弄乱了我的滚动动画。
我决定使用window.history.replaceState
更新整个网址,而不是使用window.location.hash
方法。因此绕过了浏览器触发的hashChange事件。
// Only fire when URL has anchor
$('a[href*="#"]:not([href="#"])').on('click', function(event) {
// Prevent default anchor handling (which causes the page-jumping)
event.preventDefault();
if ( location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname ) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
if ( target.length ) {
// Smooth scrolling to anchor
$('html, body').animate({
scrollTop: target.offset().top
}, 1000);
// Update URL
window.history.replaceState("", document.title, window.location.href.replace(location.hash, "") + this.hash);
}
}
});
答案 4 :(得分:0)
您可以简单地为其指定一个新值,如下所示,
window.location.hash