当前位置: 首页 > article >正文

在 Vue 3 中实现点击按钮后禁止浏览器前进或后退

在 Vue 3 中实现点击按钮后禁止浏览器前进或后退,我们可以通过 refwatch 来管理状态,同时使用 onBeforeUnmount 来清理事件监听。

使用 Vue 3 实现:

<template>
  <div>
    <button @click="disableNavigation">点击禁用前进或后退</button>
  </div>
</template>

<script setup>
import { ref, onBeforeUnmount } from 'vue';

// 定义一个 ref 用来控制是否禁用浏览器的前进或后退
const isNavigationDisabled = ref(false);

// 禁用前进后退的函数
const disableNavigation = () => {
  // 向历史栈添加一个状态,这样浏览器无法后退
  window.history.pushState(null, '', window.location.href);

  // 启用禁用前进后退的功能
  isNavigationDisabled.value = true;

  // 监听 popstate 事件,如果尝试前进或后退,则阻止
  window.addEventListener('popstate', handlePopState);
};

// 处理 popstate 事件
const handlePopState = () => {
  if (isNavigationDisabled.value) {
    // 阻止浏览器的前进或后退
    window.history.pushState(null, '', window.location.href);
  }
};

// 组件销毁时移除事件监听器
onBeforeUnmount(() => {
  window.removeEventListener('popstate', handlePopState);
});
</script>

代码解释:

  1. isNavigationDisabled

    • 使用 ref 来存储是否禁用前进和后退的状态。这个变量控制我们是否启用了拦截浏览器的行为。
  2. disableNavigation

    • 该函数会在点击按钮时执行,通过 window.history.pushState 向浏览器历史栈中添加一个状态,防止后退。
    • 设置 isNavigationDisabled.value = true 来标记禁用状态,并且通过 window.addEventListener 监听 popstate 事件来阻止前进或后退。
  3. handlePopState

    • 这是我们用于拦截浏览器后退或前进的事件处理函数。每当触发 popstate 事件时,我们会检查 isNavigationDisabled.value 是否为 true,如果是的话,就会再次调用 window.history.pushState,从而阻止浏览器进行实际的导航。
  4. onBeforeUnmount

    • onBeforeUnmount 是 Vue 3 中的生命周期钩子,用来在组件销毁前清理资源。在这里我们用它来移除 popstate 事件监听器,以避免内存泄漏。

扩展:恢复浏览器前进和后退

如果你希望在某些操作后恢复浏览器的前进和后退功能,你只需要将 isNavigationDisabled.value 设置为 false,并移除事件监听器:

const restoreNavigation = () => {
  isNavigationDisabled.value = false;
  window.removeEventListener('popstate', handlePopState);
};


http://www.kler.cn/a/429893.html

相关文章:

  • 4.STM32通信接口之SPI通信(含源码)---硬件SPI与W25Q64存储模块通信实战《精讲》
  • 【网络篇】TCP知识
  • 嵌入式驱动开发详解13(IIC驱动架构实现)
  • 掌握小程序地理位置服务插件,让用户体验再升级
  • 搭建Node.js后端
  • EasyExcel改名为FastExce做了那些改变呢
  • 【深度学习】深入解析卷积神经网络(CNNs)
  • 【语音识别】搭建本地的语音转文字系统:FunASR(离线不联网即可使用)
  • Kubernetes(K8s)
  • 从爱尔兰歌曲到莎士比亚:LSTM文本生成模型的优化之旅
  • Github 2024-12-06Java开源项目日报Top10
  • C#实现的ACCESS的增删改查基本功能
  • SVN Update 报错解决三部曲
  • CV(3)--噪声滤波和特征
  • 大数据-245 离线数仓 - 电商分析 缓慢变化维 与 拉链表 SCD Slowly Changing Dimensions
  • 项目中使用AntV L7地图(五)添加飞线
  • Linux驱动开发(12):中断子系统–按键中断实验
  • 超标量处理器设计笔记(5)虚拟存储器、地址转换、page fault
  • LeetCode:459.重复的子字符串
  • 提升网站流量的关键:AI在SEO关键词优化中的应用