vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)

实现Vue弹窗时,监听手机返回键关闭弹窗功能可以通过以下步骤完成:

  1. 在弹窗组件中,监听手机返回键的按下事件,如果弹窗处于打开状态,则关闭弹窗,否则执行默认的页面返回事件。具体代码如下:
<template>
  <div>
    <button @click="openModal">打开弹窗</button>
    <div v-show="isModalOpen" @click.self="closeModal" @keydown.esc="closeModal">
      <!-- 弹窗内容 -->
      <p>这是一个弹窗</p>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isModalOpen: false
    };
  },
  methods: {
    openModal() {
      this.isModalOpen = true;
    },
    closeModal() {
      this.isModalOpen = false;
    },
    handleKeyPress(event) {
      if (event.keyCode === 27) {
        this.closeModal();
      }
    }
  },
  mounted() {
    window.addEventListener('keydown', this.handleKeyPress);
  },
  beforeDestroy() {
    window.removeEventListener('keydown', this.handleKeyPress);
  }
};
</script>

在上述代码中,我们在弹窗容器div上绑定了两个事件:@click.self@keydown.esc,分别用于关闭弹窗和监听手机返回键。当isModalOpentrue时,弹窗才会显示。

  1. 以上代码可以实现监听手机返回键关闭弹窗的功能,但是如果页面中有多个弹窗,或者弹窗不在根组件下,需要在每个弹窗组件中都重复实现这段代码,显然不是一个好的做法。我们可以将这段公共的代码抽离成一个混入对象,让所有的弹窗组件都继承这个混入对象,从而避免重复的代码。具体代码如下:
const closeModalMixin = {
  methods: {
    closeModal() {
      this.isModalOpen = false;
    },
    handleKeyPress(event) {
      if (event.keyCode === 27) {
        this.closeModal();
      }
    }
  },
  mounted() {
    window.addEventListener('keydown', this.handleKeyPress);
  },
  beforeDestroy() {
    window.removeEventListener('keydown', this.handleKeyPress);
  }
};

export default {
  name: 'Modal',
  mixins: [closeModalMixin],
  data() {
    return {
      isModalOpen: false
    };
  },
  methods: {
    openModal() {
      this.isModalOpen = true;
    }
  },
  template: `
    <div>
      <button @click="openModal">打开弹窗</button>
      <div v-show="isModalOpen" @click.self="closeModal">
        <!-- 弹窗内容 -->
        <p>这是一个弹窗</p>
      </div>
    </div>
  `
};

在以上代码中,我们将关闭弹窗和监听手机返回键关闭弹窗的代码抽离到了一个混入对象closeModalMixin中,然后在弹窗组件中通过mixins选项引入这个混入对象即可。这样做的好处是,无论页面中有多少个弹窗组件,我们都只需要在混入对象中实现一次代码即可。

示例说明:

下面是一个示例,如何在Vue中监听手机返回键关闭弹窗:

<template>
  <div>
    <button @click="openModal">打开弹窗</button>
    <div v-show="isModalOpen" @click.self="closeModal" @keydown.esc="closeModal">
      <!-- 弹窗内容 -->
      <p>这是一个弹窗</p>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isModalOpen: false
    };
  },
  methods: {
    openModal() {
      this.isModalOpen = true;
    },
    closeModal() {
      this.isModalOpen = false;
    },
    handleKeyPress(event) {
      if (event.keyCode === 27) {
        this.closeModal();
      }
    }
  },
  mounted() {
    window.addEventListener('keydown', this.handleKeyPress);
  },
  beforeDestroy() {
    window.removeEventListener('keydown', this.handleKeyPress);
  }
};
</script>

另外一个示例,我们将关闭弹窗和监听手机返回键关闭弹窗的代码抽离到了一个混入对象中,让所有的弹窗组件都继承这个混入对象:

const closeModalMixin = {
  methods: {
    closeModal() {
      this.isModalOpen = false;
    },
    handleKeyPress(event) {
      if (event.keyCode === 27) {
        this.closeModal();
      }
    }
  },
  mounted() {
    window.addEventListener('keydown', this.handleKeyPress);
  },
  beforeDestroy() {
    window.removeEventListener('keydown', this.handleKeyPress);
  }
};

export default {
  name: 'Modal',
  mixins: [closeModalMixin],
  data() {
    return {
      isModalOpen: false
    };
  },
  methods: {
    openModal() {
      this.isModalOpen = true;
    }
  },
  template: `
    <div>
      <button @click="openModal">打开弹窗</button>
      <div v-show="isModalOpen" @click.self="closeModal">
        <!-- 弹窗内容 -->
        <p>这是一个弹窗</p>
      </div>
    </div>
  `
};

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转) - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • Javascript模块导入导出详解

    下面是Javascript模块导入导出详解的完整攻略。 什么是Javascript模块 Javascript模块是Javascript中的一种代码组织方式,它将代码分割成更小的、更易于维护的模块,每个模块都有自己的作用域和功能。模块可以包含变量、函数、类等,通过模块的方式来导入和导出这些内容,可以实现模块化开发的效果。 模块的导出 Javascript模块的…

    JavaScript 2023年5月27日
    00
  • javascript自执行函数

    JavaScript自执行函数(Self-Invoking Function),又叫立即执行函数(Immediately-Invoked Function Expression,IIFE),是一种可以立即自动执行的函数。它的语法结构非常简单: (function(){ // code })(); 上述代码定义了一个匿名函数,并立即执行。整个函数块被包含在一对…

    JavaScript 2023年5月27日
    00
  • JavaScript控制浏览器全屏显示简单示例

    关于“JavaScript控制浏览器全屏显示简单示例”的攻略,可以按照以下步骤进行: 1. HTML页面中添加按钮 首先,在HTML页面中添加一个按钮,以便在单击该按钮时全屏显示页面。可以使用以下代码: <button onclick="toggleFullScreen()">全屏显示</button> 其中onc…

    JavaScript 2023年6月11日
    00
  • javascript Math.random()随机数函数

    下面是关于JavaScript中 Math.random() 随机数函数的详细讲解: 什么是Math.random()函数? Math.random() 是JavaScript的内置函数之一,用于生成一个伪随机数,范围在0到1之间(包含0但不包含1)。 在使用 Math.random()生成随机数时,我们经常会通过一些算法(比如乘以所需随机数范围,然后用 M…

    JavaScript 2023年5月27日
    00
  • javascript完美实现给定日期返回上月日期的方法

    JavaScript完美实现给定日期返回上月日期的方法 如果你需要在JavaScript中获取一个日期的上个月日期,本文将为你提供两种方法。 方法一:日期计算 我们可以使用JavaScript的Date对象的setMonth()函数通过将当前月份减一来获得上个月的日期。 function getLastMonthDate(date) { var d = ne…

    JavaScript 2023年6月10日
    00
  • ajax获取json数据为undefined原因分析

    当我们使用AJAX获取JSON数据时,有时会发现返回的数据无法解析,而返回的结果为undefined。这种情况通常是由于以下原因引起的: 数据格式不正确:JSON 格式要求数据必须为名/值对构成的无序集合。如果返回的数据格式不正确,就无法解析成JSON对象。 跨域请求:由于浏览器的同源策略限制,如果 AJAX 请求的数据源与当前域不一致,则会遇到跨域问题。这…

    JavaScript 2023年6月11日
    00
  • JavaScript的Proxy可以做哪些有意思的事儿

    下面是详细讲解 JavaScript 的 Proxy 可以做哪些有意思的事儿的完整攻略: 什么是JavaScript Proxy Proxy 是 ES6 中的一个新特性,用于在对象之前设立一个“拦截器”,对该对象的访问进行过滤和改写,提供了一种机制来对对象的访问进行监视和控制。 Proxy 最常见的用途之一是在对象上设置隐藏属性或包装器,它可以通过重写 ge…

    JavaScript 2023年5月27日
    00
  • js鼠标按键事件和键盘按键事件用法实例汇总

    下面是“js鼠标按键事件和键盘按键事件用法实例汇总”的完整攻略。 一、鼠标按键事件 鼠标按键事件是指用户通过鼠标在网页上进行的操作,常用的鼠标按键事件有mousedown、mouseup、click、dbclick、mousemove等。 1. mousedown事件 mousedown事件在鼠标按下的时候触发,常用于实现鼠标拖动等交互效果。示例代码如下: …

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部