项目中经常遇到要展示dialog弹框的情况,通常我们只需要点击打开按钮显示,点击关闭按钮关闭弹框,
但是也会遇到这种需求,需要点击空白处或者点击除指点区域外时,弹框也会消失,以提升用户体验
这次项目中遇到的是PC端点击输入框获取焦点时出现软键盘,失去焦点或者点击其他区域(除软键盘、输入框以外),软键盘消失。
话不多说,直接上代码:
这里示例三个input输入框
<Input placeholder="例:沪A88888" id="carNumIpt" @on-focus="keyBoardFocus('add')" class="input" v-model="formNewAppointment.carNum"/> <Input id="bookCarIpt" class="input"/> <Input id="enterCarIpt" class="input"/>
<!--软键盘--> <Keyboard ref="keyboard" class="keyboard" :plateNumber.sync="plateNumber" @change="change"></Keyboard>
mounted() { document.addEventListener('click', this.globalClick); }, destroyed(){ document.removeEventListener('click', this.globalClick); },
//软键盘失去焦点隐藏 globalClick(e) { let addCon = document.getElementById('carNumIpt'); let bookCon = document.getElementById('bookCarIpt'); let enterCon = document.getElementById('enterCarIpt'); if(addCon || bookCon || enterCon){ if(!addCon.contains(e.target) && !bookCon.contains(e.target) && !enterCon.contains(e.target)) { this.$refs.keyboard.globalClick(e); }else{ } } },
keyboard组件中的方法:
//js的contains方法用来查看dom元素的包含关系 globalClick(e) { if(!this.$el.contains(e.target) && this.isShow){ this.isShow = false } },
做了一个简单的项目笔记,仅供参考,项目中还有很多的例子,比如菜单的展示,可控制提示框等等