作者:mark0003 | 来源:互联网 | 2023-06-06 20:20
我正在尝试读取URL中的参数,使一堆display: none
内容淡入,然后向下滚动到内容中的适当点。
一切正常,直到向下滚动。它到达正确的位置,然后莫名其妙地再次跳到页面顶部。谁能告诉我怎么了?
URL将类似于http://mydotcom/mystory/?page=mypage
HTML将包含大量介绍性内容,然后是带有.story
类的许多文本块:
.story类中包含display:none
,它是position: relative
。
当您进入页面时,我希望代码解析URL,获取参数,显示.story内容,然后向下滚动至相应的文本块:
//function to parse URL parameters
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),sURLVariables = sPageURL.split('&'),sParameterName,i;
for (i = 0; i sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
};
var page = getUrlParameter('page'); //get the parameter
if ((page !== "") && (page !== undefined) ){ //if the parameter exists and has a value
$(".story").fadeIn(); //fade in all the story blocks
$('html,body').delay( 800 ).animate({
scrollTop: $("#" + page).offset().top //scroll down to the block specified
},1000);
}
同样,发生的是内容出现,向下滚动,然后跳回到页面顶部。
我怀疑这是由于未取消“链接”。因此,当您单击站点上的链接时,它可能会在使用Javascript之后重新启动网站。
因此,当您使用事件监听器来捕获单击链接的时间,然后使用诸如e.preventDefault()
之类的东西时,或者事件监听器会使用return false
。这样便可以模拟链接而不触发它。
我可能错了,但是
其他原因可能是fadeIn()
和scrollTop: $("#" + page).offset().top
,由于元素被隐藏,因此计算可能是错误的。因此,将在不隐藏元素的情况下计算偏移量。我可以看到有delay(800)
,但也许fadeIn
的使用时间更长...
对不起,我的英语不好