hashchange事件

2019-01-05  本文已影响38人  halapro_liu

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)
上一篇 下一篇

猜你喜欢

热点阅读