- 修复 uni-popup-dialog/uni-data-picker keypress.js 中 $once 在 H5 端报错(改用生命周期钩子清理监听) - main.js 补 $delete globalProperties polyfill(z-paging 自动高度逻辑依赖) - App.vue onLaunch 补设备信息初始化,修复 X-Device-Id 恒为 unknown - 68 处 ::v-deep、/deep/ 旧深度选择器替换为 :deep()(含 login-page.scss) - zetank-personalpage 组件 .sync 修饰符改为 v-model:xxx(Vue3 已移除 .sync) - vite.config.js HBuilderX 路径支持 HBUILDERX_HOME 环境变量覆盖 - 根 package.json 清理 image-grid 插件遗留元数据 - 收录此前未提交的 uView Vue3 兜底补丁(common/uview-init.js 及各组件 props.js)
53 lines
1.3 KiB
JavaScript
53 lines
1.3 KiB
JavaScript
// #ifdef H5
|
|
export default {
|
|
name: 'Keypress',
|
|
props: {
|
|
disable: {
|
|
type: Boolean,
|
|
default: false
|
|
}
|
|
},
|
|
mounted () {
|
|
const keyNames = {
|
|
esc: ['Esc', 'Escape'],
|
|
tab: 'Tab',
|
|
enter: 'Enter',
|
|
space: [' ', 'Spacebar'],
|
|
up: ['Up', 'ArrowUp'],
|
|
left: ['Left', 'ArrowLeft'],
|
|
right: ['Right', 'ArrowRight'],
|
|
down: ['Down', 'ArrowDown'],
|
|
delete: ['Backspace', 'Delete', 'Del']
|
|
}
|
|
const listener = ($event) => {
|
|
if (this.disable) {
|
|
return
|
|
}
|
|
const keyName = Object.keys(keyNames).find(key => {
|
|
const keyName = $event.key
|
|
const value = keyNames[key]
|
|
return value === keyName || (Array.isArray(value) && value.includes(keyName))
|
|
})
|
|
if (keyName) {
|
|
// 避免和其他按键事件冲突
|
|
setTimeout(() => {
|
|
this.$emit(keyName, {})
|
|
}, 0)
|
|
}
|
|
}
|
|
document.addEventListener('keyup', listener)
|
|
// Vue3 已移除 $once,改为生命周期钩子清理(兼容 Vue2/Vue3)
|
|
this._removeKeyupListener = () => {
|
|
document.removeEventListener('keyup', listener)
|
|
}
|
|
},
|
|
beforeDestroy () {
|
|
this._removeKeyupListener && this._removeKeyupListener()
|
|
},
|
|
unmounted () {
|
|
this._removeKeyupListener && this._removeKeyupListener()
|
|
},
|
|
render: () => {}
|
|
}
|
|
// #endif
|