我认为这可能是不可能的,我会尽我所能地解释。我有一个包含选项卡(jquery powered)的页面,由以下内容控制:
我正在使用这段代码,这是由另一个用户在前面的问题中提供的。
<script type="text/javascript">
$(function() {
$('html, body').animate({scrollTop:0}); // this is my "fix"
var tabContent = $(".tab_content");
var tabs = $("#menu li");
var hash = window.location.hash;
tabContent.not(hash).hide();
if(hash=="") {
$('#tab1').fadeIn();
}
tabs.find('[href=' + hash + ']').parent().addClass('active');
tabs.click(function() {
$(this).addClass('active').siblings().removeClass('active');
tabContent.hide();
var activeTab = $(this).find("a").attr("href");
$(activeTab).fadeIn();
return false;
});
});
</script>
当我直接访问“标签”页面时,这段代码工作得很好。
但是,我需要从其他页面链接到单独的选项卡-因此,要做到这一点,代码将获取window.location.hash
,然后显示相应的选项卡。
页面不会因为"return false“而”跳转“到锚点。
但是,此事件仅在单击事件时触发。因此,如果我从任何其他页面访问我的“标签”,就会触发“跳转”效果。为了解决这个问题,我会自动滚动到页面的顶部,但我不希望这种情况发生。
有没有办法在页面加载时模拟“返回假”,防止锚点“跳转”发生。
希望这已经足够清楚了。
谢谢
发布于 2010-09-07 21:40:05
你的修复不起作用了吗?我不确定我是否正确理解了这个问题--你有演示页面吗?您可以尝试:
if (location.hash) {
setTimeout(function() {
window.scrollTo(0, 0);
}, 1);
}
编辑:已在Windows上的Firefox、IE和Chrome中测试并工作。
编辑2:在if
块内移动setTimeout()
,props @vsync。
发布于 2015-04-23 20:47:14
在这里看我的答案:Stackoverflow Answer
诀窍是尽快删除hashtag并存储它的值供您自己使用:
重要的是,不要将这部分代码放在$()或$(window).load()函数中,因为为时已晚,而且浏览器已经移动到标记。
// store the hash (DON'T put this code inside the $() function, it has to be executed
// right away before the browser can start scrolling!
var target = window.location.hash,
target = target.replace('#', '');
// delete hash so the page won't scroll to it
window.location.hash = "";
// now whenever you are ready do whatever you want
// (in this case I use jQuery to scroll to the tag after the page has loaded)
$(window).on('load', function() {
if (target) {
$('html, body').animate({
scrollTop: $("#" + target).offset().top
}, 700, 'swing', function () {});
}
});
发布于 2010-09-07 21:43:18
还有其他方法可以跟踪您所在的选项卡;可能是设置cookie,或者在隐藏字段中设置值,等等。
我要说的是,如果你不希望页面在加载时跳转,你最好使用这些其他选项中的一个,而不是使用散列,因为优先使用散列的主要原因是允许你想要阻止的东西。
另一点-如果您的散列链接与文档中标记的名称不匹配,页面将不会跳转,因此,如果您想继续使用散列,您可以操作内容,使标记的名称不同。如果您使用一致的前缀,您仍然可以使用Javascript在两者之间跳转。
希望这能有所帮助。
https://stackoverflow.com/questions/3659072
复制相似问题