0

    记录一个Vue项目的特殊浏览器回退

    2023.07.23 | admin | 138次围观

    记录一个Vue项目的特殊浏览器回退

    在页面上弹框显示的时候,如果用户点击浏览器回退,不进行页面的跳转浏览器回退按钮事件,只是关闭当前页面的弹框,当页面弹框没有显示的时候浏览器回退按钮事件,点击浏览器回退,进行正常的回退。这里不讨论兼容,只在 Chrome 浏览器上实现的,如果你要做兼容,可以按照这个思路去实现。

    需求分析解决思路

    记录一个Vue项目的特殊浏览器回退

    既然需要在点击回退的时候做一些事情,那么首先我们就应该监听浏览器的回退事件,用户点击回退,判断弹框是否显示,如果显示,就阻止浏览器的默认回退行为,进行关闭弹框操作,如果没显示,就直接进行正常的回退。

    关键代码

    /**
     * 监听页面回退
     * @param {Function} callback 监听页面回退按钮要绑定的回调函数
     */
    export const myGoBack = (callback) => {
      window.addEventListener('popstate', callback)
    }
    /**
     * 取消监听页面回退
     * @param {Function} callback 页面回退时候绑定的回调函数
     */
    export const killGoBack = (callback) => {
      window.removeEventListener('popstate', callback)
    }
    复制代码

    // 在要使用的组件里面引入使用
    methods: {
      /** 
       * 自定义的回退函数
       */
      goBack() {
        // 如果页面中弹框显示
        if (弹框显示状态) {
          // 禁用浏览器回退按钮事件
          history.pushState(null, null, document.URL)
          // 隐藏当前显示的弹框
          弹框显示状态 = false
        } else {
          // 否则,直接回退到上一个页面
          this.$router.go(-1)
        }
      }
    },
    // 元素挂载,监听回退
    mounted() {
      myGoBack(this.goBack)
    },
    // 页面销毁,当前页面取消回退事件监听
    beforeDestroy() {
      killGoBack(this.goBack)
    }
    复制代码

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    标签: vue
    发表评论