在项目中默认地图是聚合显示,地图层级逐级提高,最终能查找到目标,由于地图数据较多,查找不准确,因此,希望添加一个快捷能快速查找到目标点位。
给全局添加快捷键,则要求把事件绑定到document上。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Documenttitle>
head>
<body>body>
<script>
// 响应 key 事件触发的方法
function hotKeyHandler(keyboardEvent) {
console.log(keyboardEvent);
if (keyboardEvent.ctrlKey && keyboardEvent.code === "KeyQ") {
alert('触发了 ctrl + q 的快捷键!')
} else {
console.log('触发 的快捷键!' + keyboardEvent.code)
}
keyboardEvent.preventDefault();
}
window.onload = function () {
document.addEventListener('keydown', hotKeyHandler);
};
script>
html>
注意:**keyboardEvent.preventDefault();**如果执行,则会继续执行相同快捷键的其他操作,比如F5刷新和F11全屏展示等;如果不执行,则会继续响应默认的快捷键事件。
KeyboardEvent 对象描述了用户与键盘的交互。 每个事件都描述了用户与一个按键(或一个按键和修饰键的组合)的单个交互;事件类型keydown, keypress 与 keyup 用于识别不同的键盘活动类型。
属性
返回一个 Boolean,如果按键事件产生时,Alt(OS X 中是 Option 或⌥)键被按下,则该值为 true 。
返回一个 Boolean,如果按键事件发生时 Ctrl 键被按下,则该值为 true 。
Returns a Boolean that is true if the Meta key (on Mac keyboards, the ⌘ Command key; on Windows keyboards, the Windows key (⊞)) was active when the key event was generated.
Returns a Boolean that is true if the Shift key was active when the key event was generated.
KeyboardEventInit 字典,有以下几种值:
"key", 可选,默认为 "", DOMString 类型,设置 KeyboardEvent.key 的值。"code", 可选,默认为 "", DOMString 类型,设置KeyboardEvent.code 的值。"location", 可选,默认为 0, unsigned long类型,设置 KeyboardEvent.location 的值。"ctrlKey", 可选,默认为 false, Boolean 类型,设置 KeyboardEvent.ctrlKey 的值。"shiftKey", 可选,默认为 false, Boolean 类型,设置KeyboardEvent.shiftKey 的值。"altKey", 可选,默认为 false, Boolean 类型,设置 KeyboardEvent.altKey 的值。"metaKey", 可选,默认为 false, Boolean 类型,设置 KeyboardEvent.metaKey 的值。"repeat", 可选,默认为 false, Boolean 类型,设置 KeyboardEvent.repeat 的值。"isComposing", 可选,默认为 false, Boolean 类型,设置 KeyboardEvent.isComposing 的值。"charCode", 可选,默认为 0, unsigned long 类型,设置 KeyboardEvent.charCode (已废弃) 的值。"keyCode", 可选,默认为 0, unsigned long 类型,设置KeyboardEvent.keyCode (已废弃) 的值。"which", 可选,默认为 0, unsigned long 类型,设置KeyboardEvent.which (已废弃) 的值。DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Documenttitle>
<script src="./vue.min.js">script>
head>
<body>
<div id="app">div>
body>
<script>
new Vue({
el: '#app',
mounted() {
document.addEventListener('keydown', this.hotKeyHandler);
},
beforeDestroy() {
document.removeEventListener('keydown', this.hotKeyHandler);
},
methods: {
hotKeyHandler(keyboardEvent) {
// 是地区层级 并且 是概览模式,用户输入 ctrl + p 快捷键,才会触发
if (keyboardEvent.ctrlKey && keyboardEvent.code === 'KeyQ') {
alert('触发了 ctrl + q 事件');
}
// 阻止其他默认事件的处理,比如F5刷新 和 F11全屏都会失效
// keyboardEvent.preventDefault();
},
},
});
script>
html>
备注: keyboardEvent.preventDefault();阻止其他默认事件的处理,比如F5刷新 和 F11全屏都会失效
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Documenttitle>
<script src="./vue.min.js">script>
head>
<body>
<div id="app">
<div>
<input v-model="name" @keyup.enter="nativeEnter"/>
div>
<div>
<input v-model="address" @keyup="altEnterActioin" />
div>
div>
body>
<script>
new Vue({
el: '#app',
data () {
return {
name: '名字',
address: '地址'
}
},
methods: {
nativeEnter () {
alert('name' + this.name)
},
altEnterActioin (keyboardEvent) {
console.log(keyboardEvent)
if (keyboardEvent.ctrlKey && keyboardEvent.keyCode === 13) {
alert("触发了 ctrl + enter 事件" )
}
// 阻止其他默认事件的处理,比如F5刷新 和 F11全屏都会失效
keyboardEvent.preventDefault()
}
},
})
script>
html>