hashchange事件

hashchange事件是html5新增的api,用来监听浏览器链接的hash值变化。
目前流行的spa框架的路由都有使用到该特性,接下来简单介绍下:

当URL的片段标识符更改时,将触发hashchange事件 (跟在#符号后面的URL部分,包括#符号)

属性 类型 描述
target EventTarget 上下文为window对象
type DOMString event类型
bubbles Boolean 事件是否能冒泡
cancelable Boolean 事件是否能被取消
oldURL String 跳转前的URL
newURL String 跳转后的当前URL

下面是一个使用hashchange的一个例子。

function getUUID () {
  return Math.floor(Math.random() * 1000000)
}
window.onload = function () {
  const el = document.getElementById('toggle')
  el.onclick = (e) => {
    e.preventDefault()
    const uuid = getUUID()
    location.hash = '#' + uuid
  }
  window.onhashchange = (e) => {
    console.log('oldURL:', e.oldURL)
    console.log('newURL:', e.newURL)
  }
}
hashchange.gif

浏览器兼容性:

Feature Chrome Firefox (Gecko) Internet Explorer Opera safari
Basic support 5.0 3.6 (1.9.2)Firefox 6 中加入对 oldURL/newURL 属性的支持. 8.0 10.6 5.0

为了兼容所有浏览器,以下为onhashchange的polyfill:

// 兼容低版本的hashchange
(function(window) {  
  if ('onhashchange' in window) { return; }

  var location = window.location,
    oldURL = location.href,
    oldHash = location.hash

  setInterval(function() {
    var newURL = location.href, newHash = location.hash
    if (newHash != oldHash && typeof window.onhashchange === 'function') {     
      window.onhashchange({
        type: 'hashchange',
        oldURL: oldURL,
        newURL: newURL
      })

      oldURL = newURL
      oldHash = newHash
    }
  }, 100)
})(window)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • hashchange是什么? hash即URL中“#”字符后面的部分。使用浏览器访问网页时,如果网页URL中带有h...
    壮哉我大前端阅读 12,219评论 0 1
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 8,904评论 1 11
  • 今天的工作认真度70%,学到的新东西很少。 1,hashchange事件。 一开始我以为hashchange是jq...
    Roy_skywalker阅读 2,990评论 2 0
  • 前端开发面试题 <a name='preface'>前言</a> 只看问题点这里 看全部问题和答案点这里 本文由我...
    自you是敏感词阅读 4,266评论 0 3
  • 前面我们讲解了什么是字符串。字符串可以用''或者""括起来表示。 如果字符串本身包含'怎么办?比如我们要表示字符串...
    mingminy阅读 3,459评论 0 0

友情链接更多精彩内容