Javascript 检测页面跳转到特定元素ID

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

用户执行某个操作后,页面将重新加载,并向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(offset.top > 100){
    offset.top = offset.top - 100;
}
var body = $("html, body");
body.animate({scrollTop: offset.top}, '500', 'swing', function() { 

});

“窗口”文档对象的hashchange事件正是捕获此行为所需的。您可以使用:

  • Javascript解决方案:

    window.addEventListener('hashchange', function(){
    // smooth scroll code
    });
    
  • jQuery解决方案(v1.8+):


  • 注意:同一页面上的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
    });