You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

URL中包含#符号时如何调用JavaScript函数

监听URL哈希变化触发JavaScript函数的实现方案

URL中#后面的内容为哈希片段,该片段变更不会触发页面重载,你可以通过以下方法实现哈希变化时触发自定义逻辑,同时可按需屏蔽默认的锚点跳转/滚动行为:

  • 方法1:监听hashchange事件(哈希变更时触发)
    这个事件会在URL的哈希部分发生变化时自动触发,直接绑定事件回调即可执行自定义函数:
window.addEventListener('hashchange', function(e) {
  // 阻止默认的锚点滚动行为,如果需要保留默认滚动可以删掉下一行
  e.preventDefault();
  // 获取当前哈希值,#也会包含在内,比如#test就会拿到'#test'
  const currentHash = window.location.hash;
  // 这里写你要执行的自定义逻辑
  console.log('哈希变更,当前哈希为:', currentHash);
  yourCustomFunction(currentHash);
})
  • 方法2:页面初始化时主动读取哈希触发逻辑
    hashchange事件仅在哈希变更时触发,如果页面首次加载就已经带有#后缀的哈希,需要在页面加载完成后主动读取哈希执行逻辑:
window.addEventListener('load', function() {
  if(window.location.hash) {
    // 存在哈希,执行自定义逻辑
    console.log('页面加载时已存在哈希:', window.location.hash);
    yourCustomFunction(window.location.hash);
  }
})
  • 方法3:自定义锚点点击逻辑(可选)
    如果你页面内的<a>标签跳转哈希的逻辑也需要完全自定义,可以给所有带哈希跳转的a标签绑定点击事件,完全接管跳转逻辑:
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
  anchor.addEventListener('click', function(e) {
    // 阻止默认跳转滚动
    e.preventDefault();
    // 手动修改哈希,会自动触发上面的hashchange事件
    window.location.hash = this.getAttribute('href');
  })
})

如果你需要根据不同的哈希值执行不同的函数,可以用对象映射的方式匹配:

const hashHandler = {
  '#home': () => { /* 首页逻辑 */ },
  '#about': () => { /* 关于页逻辑 */ },
  '#contact': () => { /* 联系页逻辑 */ }
}

// 触发的时候直接调用
if(hashHandler[currentHash]) {
  hashHandler[currentHash]();
}

内容的提问来源于stack exchange,提问作者Aniruddha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:45:03