路由跳转中的hash值和锚点冲突

Posted mjmajong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了路由跳转中的hash值和锚点冲突相关的知识,希望对你有一定的参考价值。

dealLink() {        //处理a标签情况,1、跳转到别的站点  2、当前页面锚点   3、不是站点又不是锚点,处理成文本形式
      let element = document.querySelectorAll(‘a‘)
      element.forEach((item, index) => {
        const href = item.getAttribute(‘href‘),    //获取标签的href属性
          isInclude = href.includes(‘http‘),      
          isHash = item.hash,
          noClick = !isInclude && !isHash         //特殊情况,不是站点又不是锚点的处理情况
        if (noClick) {
          item.style.color = ‘rgba(0, 0, 0, 0.65)‘
        }
        element[index].addEventListener(‘click‘, e => {
          this.stopDefault(e)
          if (noClick) {
            return false
          }
          if (isInclude) {
            window.open(href, ‘_blank‘)
          } else {
            this.anchorScroll(href)
          }
        })
      })
    },
    stopDefault(e) {
      if (e && e.preventDefault) {
        e.preventDefault()
      } else {
        window.event.returnValue = false
      }
    },
    anchorScroll(anchorName) {
      document.querySelector(anchorName).scrollIntoView(true)    //当hash值和锚点冲突之后,手动拿到锚点的位置进行滑动
    },

以上是关于路由跳转中的hash值和锚点冲突的主要内容,如果未能解决你的问题,请参考以下文章

路由模式(hash、history)

angular 路由可以跳转到当前页面的某个位置吗

关于vue 和react 中的hash与锚点冲突问题

vue 路由跳转后 怎样去掉指定的组件

hash和history 的区别仅仅是#吗?

Vue中的路由