Javascript 检测页面跳转到特定元素ID
用户执行某个操作后,页面将重新加载,并向URL添加一个Javascript 检测页面跳转到特定元素ID,javascript,jquery,Javascript,Jquery,用户执行某个操作后,页面将重新加载,并向URL添加一个#someId,这样URL将类似于localhost/panel/mypage.php#someId,作为默认操作,浏览器将跳转到id为someId的元素 我想做的是使用jQuery捕捉它,然后不是直接跳到#someId元素,而是跳到它上面100px,并能够添加平滑的滚动 可能吗 这应该让您开始: var a_hash = window.location.hash; var offset = $(a_hash).offset(); if(of
#someId
,这样URL将类似于localhost/panel/mypage.php#someId
,作为默认操作,浏览器将跳转到id为someId
的元素
我想做的是使用jQuery捕捉它,然后不是直接跳到#someId
元素,而是跳到它上面100px,并能够添加平滑的滚动
可能吗 这应该让您开始:
var a_hash = window.location.hash;
var offset = $(a_hash).offset();
if(offset.top > 100){
offset.top = offset.top - 100;
}
var body = $("html, body");
body.animate({scrollTop: offset.top}, '500', 'swing', function() {
});
“窗口”文档对象的hashchange事件正是捕获此行为所需的。您可以使用:
window.addEventListener('hashchange', function(){
// smooth scroll code
});
注意:同一页面上的url哈希更改(location.hash)会触发hashchange事件,但不会从其他页面触发,例如从www.example.com/about.html到www.example.com/contact.html,second不会触发hashchange事件。为什么不使用除#之外的其他内容,您可以使用jQuery从URL中读取,并编写相同的程序,而无需覆盖浏览器的默认操作?@JamesHunt,因为我使用的系统具有该默认行为,我希望保留该默认行为,除非我真的必须这样做,因为不可能这样做。不过,我脑子里有你的想法。谢谢你的回答,但我不是在为如何做动画部分或如何检测动画而挣扎,而是如何删除浏览器默认行为。无论如何,谢谢你的帮助。
jQuery(window).on('hashchange', function(){
// smooth scroll code
});