From 4ef96c179755a965c6ab1c40c622638f2aff806d Mon Sep 17 00:00:00 2001 From: qiang Date: Mon, 28 Jun 2021 15:26:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=20iOS=2014.6=20?= =?UTF-8?q?=E9=94=AE=E7=9B=98=E5=BC=B9=E5=87=BA=E5=8D=A1=E9=A1=BF=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20question/125870?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/view/mixins/keyboard.js | 53 +++++++++++++++++++------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/src/core/view/mixins/keyboard.js b/src/core/view/mixins/keyboard.js index 32b59dd7b..2ee4d4f5d 100644 --- a/src/core/view/mixins/keyboard.js +++ b/src/core/view/mixins/keyboard.js @@ -3,6 +3,28 @@ import { } from 'uni-shared' import emitter from './emitter' +let resetTimer +let isAndroid +let osVersion +let keyboardHeight +let keyboardChangeCallback +let webviewStyle +if (__PLATFORM__ === 'app-plus') { + plusReady(() => { + isAndroid = plus.os.name.toLowerCase() === 'android' + osVersion = plus.os.version + // iOS 14.6 调用同步方法导致键盘弹卡顿 + if (!isAndroid && parseFloat(osVersion) >= 14.6) { + const currentWebview = plus.webview.currentWebview() + webviewStyle = currentWebview.getStyle() || {} + } + }) + document.addEventListener('keyboardchange', function (event) { + keyboardHeight = event.height + keyboardChangeCallback && keyboardChangeCallback() + }, false) +} + /** * 保证iOS点击输入框外隐藏键盘 */ @@ -14,7 +36,8 @@ function setSoftinputTemporary (vm, reset) { const MODE_ADJUSTPAN = 'adjustPan' const MODE_NOTHING = 'nothing' const currentWebview = plus.webview.currentWebview() - const style = currentWebview.getStyle() || {} + // iOS 14.6 调用同步方法导致键盘弹卡顿 + const style = webviewStyle || currentWebview.getStyle() || {} const options = { mode: (reset || style.softinputMode === MODE_ADJUSTRESIZE) ? MODE_ADJUSTRESIZE : (vm.adjustPosition ? MODE_ADJUSTPAN : MODE_NOTHING), position: { @@ -63,22 +86,6 @@ 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], @@ -146,11 +153,13 @@ export default { if (__PLATFORM__ === 'app-plus') { // 安卓单独隐藏键盘后点击输入框不会触发 focus 事件 - el.addEventListener('click', () => { - if (!this.disabled && focus && keyboardHeight === 0) { - setSoftinputTemporary(this) - } - }) + if (isAndroid) { + el.addEventListener('click', () => { + if (!this.disabled && focus && keyboardHeight === 0) { + setSoftinputTemporary(this) + } + }) + } if (!isAndroid && parseInt(osVersion) < 12) { // iOS12 以下系统 focus 事件设置较迟,改在 touchstart 设置 el.addEventListener('touchstart', () => { -- GitLab