vue.js - 添加键盘快捷键以导航下一页和上一页
问题描述
我有三个页面home, about & details
,我在每个页面的 Vue 生命周期钩子上添加了一个keydown
事件侦听mounted
器,所以每当用户单击时ctrl + rightArrow
,我都会触发nextPage()
方法,该方法会将下一页推送到 vue 路由器,同样ctrl + leftArrow
应该触发prevPage()
. 我在每个页面上实现相同的功能,在nextPage() & prevPage()
. 这里的问题是,即使我没有keydown
在某些页面上添加侦听器,事件也会触发并从先前加载的事件侦听器导航到路由,并且先前的侦听器也多次触发。
export default {
mounted() {
window.addEventListener('keydown', this.handleKeyPress);
},
methods: {
handleKeyPress(e) {
if (e.ctrlKey && e.keyCode === 37) { // Previous page
this.prevPage();
} else if (e.ctrlKey && e.keyCode === 39) { // Next page
this.nextPage();
}
},
nextPage() {
this.$router.push({ name: 'about' });
},
prevPage() {
this.$router.push({ name: 'home' });
}
}
}
解决方案
您可以将事件处理程序附加到document
created() {
if (typeof window !== 'undefined') {
document.addEventListener('keydown', this.handleKeyPress)
}
},
beforeDestroy() {
if (typeof window !== 'undefined') {
document.removeEventListener('keydown', this.handleKeyPress)
}
}
推荐阅读
- javascript - 使用 twilio javascript 客户端呼叫号码时捕获接受事件
- bash - 如果服务器在 bash 中不可 ping,如何抛出错误
- azure-active-directory - Azure 资源管理 api 仅检索当前租户
- powershell - 如何根据名称对文件夹中的文件进行排序
- apache-spark - How to connect PySpark to Bigquery
- algorithm - 双阶乘中 2 和 5 的计数
- react-native - Android 上的水平 ScrollView 行为
- amazon-web-services - 使用 AWS ACM 证书配置 Gloo 虚拟服务 SSL
- sql - 如何在 SQL 中将周转换为月?
- java - 接口和扩展