From cd1298ab5c4fc0107e52fbe4c81fc8891c13be85 Mon Sep 17 00:00:00 2001 From: qiang Date: Tue, 12 Jan 2021 21:08:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20input=E3=80=81textarea=20=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E6=94=AF=E6=8C=81=20keyboardheightchange=20=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/view/mixins/keyboard.js | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/src/core/view/mixins/keyboard.js b/src/core/view/mixins/keyboard.js index 26dc9e2911..0496c1db90 100644 --- a/src/core/view/mixins/keyboard.js +++ b/src/core/view/mixins/keyboard.js @@ -1,6 +1,7 @@ import { plusReady } from 'uni-shared' +import emitter from './emitter' /** * 保证iOS点击输入框外隐藏键盘 @@ -65,15 +66,22 @@ function resetSoftinputNavBar (vm) { let resetTimer let isAndroid let osVersion +let keyboardHeight +let keyboardChangeCallback if (__PLATFORM__ === 'app-plus') { plusReady(() => { isAndroid = plus.os.name.toLowerCase() === 'android' osVersion = plus.os.version }) + document.addEventListener('keyboardchange', function (event) { + keyboardHeight = event.height + keyboardChangeCallback && keyboardChangeCallback() + }, false) } export default { name: 'Keyboard', + mixins: [emitter], props: { cursorSpacing: { type: [Number, String], @@ -102,10 +110,12 @@ export default { methods: { initKeyboard (el) { let focus - let keyboardHeight - const keyboardChange = (event) => { - keyboardHeight = event.height + const keyboardChange = () => { + this.$trigger('keyboardheightchange', {}, { + height: keyboardHeight, + duration: 0.25 + }) // 安卓切换不同键盘类型时会导致键盘收回,需重新设置 if (focus && keyboardHeight === 0) { setSoftinputTemporary(this) @@ -122,7 +132,13 @@ export default { document.addEventListener('click', iosHideKeyboard, false) if (__PLATFORM__ === 'app-plus') { - document.addEventListener('keyboardchange', keyboardChange, false) + keyboardChangeCallback = keyboardChange + if (keyboardHeight) { + this.$trigger('keyboardheightchange', {}, { + height: keyboardHeight, + duration: 0 + }) + } setSoftinputNavBar(this) setSoftinputTemporary(this) } @@ -149,7 +165,13 @@ export default { document.removeEventListener('click', iosHideKeyboard, false) if (__PLATFORM__ === 'app-plus') { - document.removeEventListener('keyboardchange', keyboardChange, false) + keyboardChangeCallback = null + if (keyboardHeight) { + this.$trigger('keyboardheightchange', {}, { + height: 0, + duration: 0 + }) + } resetSoftinputNavBar(this) if (isAndroid) { // 还原安卓软键盘配置,避免影响 web-view 组件 -- GitLab