From 124cfdcf2b38e73134da2b03850fa0a30e32572a Mon Sep 17 00:00:00 2001 From: qiang Date: Tue, 27 Jul 2021 19:57:36 +0800 Subject: [PATCH] feat(App): onKeyboardHeightChange, offKeyboardHeightChange --- .../uni-app-plus/dist/uni-app-service.es.js | 22 ++++++++++++++ .../src/service/api/keyboard/keyboard.ts | 29 +++++++++++++++++-- .../service/framework/app/initGlobalEvent.ts | 15 ++++++++++ packages/uni-shared/dist/uni-shared.cjs.js | 2 ++ packages/uni-shared/dist/uni-shared.d.ts | 2 ++ packages/uni-shared/dist/uni-shared.es.js | 3 +- packages/uni-shared/src/constants.ts | 1 + 7 files changed, 70 insertions(+), 4 deletions(-) diff --git a/packages/uni-app-plus/dist/uni-app-service.es.js b/packages/uni-app-plus/dist/uni-app-service.es.js index a63929cdf..dec9b2a33 100644 --- a/packages/uni-app-plus/dist/uni-app-service.es.js +++ b/packages/uni-app-plus/dist/uni-app-service.es.js @@ -1129,6 +1129,7 @@ var serviceContext = (function (vue) { const ON_LAUNCH = 'onLaunch'; const ON_ERROR = 'onError'; const ON_THEME_CHANGE = 'onThemeChange'; + const ON_KEYBOARD_HEIGHT_CHANGE = 'onKeyboardHeightChange'; //Page const ON_LOAD = 'onLoad'; const ON_READY = 'onReady'; @@ -6590,6 +6591,15 @@ var serviceContext = (function (vue) { const hideKeyboard = defineAsyncApi(API_HIDE_KEYBOARD, (_, { resolve }) => { plus.key.hideSoftKeybord(); resolve(); + }); + function onKeyboardHeightChangeCallback(res) { + UniServiceJSBridge.invokeOnCallback(ON_KEYBOARD_HEIGHT_CHANGE, res); + } + const onKeyboardHeightChange = defineOnApi(ON_KEYBOARD_HEIGHT_CHANGE, () => { + UniServiceJSBridge.on(ON_KEYBOARD_HEIGHT_CHANGE, onKeyboardHeightChangeCallback); + }); + const offKeyboardHeightChange = defineOffApi(ON_KEYBOARD_HEIGHT_CHANGE, () => { + UniServiceJSBridge.off(ON_KEYBOARD_HEIGHT_CHANGE, onKeyboardHeightChangeCallback); }); class DownloadTask { @@ -8797,6 +8807,16 @@ var serviceContext = (function (vue) { }; emit(ON_THEME_CHANGE, args); }); + let keyboardHeightChange = 0; + plusGlobalEvent.addEventListener('KeyboardHeightChange', function (event) { + // 安卓设备首次获取高度为 0 + if (keyboardHeightChange !== event.height) { + keyboardHeightChange = event.height; + emit(ON_KEYBOARD_HEIGHT_CHANGE, { + height: keyboardHeightChange + }); + } + }); plusGlobalEvent.addEventListener('plusMessage', subscribePlusMessage); // nvue webview post message plusGlobalEvent.addEventListener('WebviewPostMessage', subscribePlusMessage); @@ -10776,6 +10796,8 @@ var serviceContext = (function (vue) { chooseVideo: chooseVideo, showKeyboard: showKeyboard, hideKeyboard: hideKeyboard, + onKeyboardHeightChange: onKeyboardHeightChange, + offKeyboardHeightChange: offKeyboardHeightChange, downloadFile: downloadFile, request: request, connectSocket: connectSocket, diff --git a/packages/uni-app-plus/src/service/api/keyboard/keyboard.ts b/packages/uni-app-plus/src/service/api/keyboard/keyboard.ts index 0ab0f32de..2278d5944 100644 --- a/packages/uni-app-plus/src/service/api/keyboard/keyboard.ts +++ b/packages/uni-app-plus/src/service/api/keyboard/keyboard.ts @@ -1,11 +1,12 @@ +import { ON_KEYBOARD_HEIGHT_CHANGE } from '@dcloudio/uni-shared' import { API_SHOW_KEYBOARD, API_HIDE_KEYBOARD, - defineAsyncApi, -} from '@dcloudio/uni-api' -import type { API_TYPE_SHOW_KEYBOARD, API_TYPE_HIDE_KEYBOARD, + defineAsyncApi, + defineOnApi, + defineOffApi, } from '@dcloudio/uni-api' export const showKeyboard = defineAsyncApi( @@ -23,3 +24,25 @@ export const hideKeyboard = defineAsyncApi( resolve() } ) + +function onKeyboardHeightChangeCallback(res: any) { + UniServiceJSBridge.invokeOnCallback(ON_KEYBOARD_HEIGHT_CHANGE, res) +} + +export const onKeyboardHeightChange = defineOnApi< + typeof uni.onKeyboardHeightChange +>(ON_KEYBOARD_HEIGHT_CHANGE, () => { + UniServiceJSBridge.on( + ON_KEYBOARD_HEIGHT_CHANGE, + onKeyboardHeightChangeCallback + ) +}) + +export const offKeyboardHeightChange = defineOffApi< + typeof uni.offKeyboardHeightChange +>(ON_KEYBOARD_HEIGHT_CHANGE, () => { + UniServiceJSBridge.off( + ON_KEYBOARD_HEIGHT_CHANGE, + onKeyboardHeightChangeCallback + ) +}) diff --git a/packages/uni-app-plus/src/service/framework/app/initGlobalEvent.ts b/packages/uni-app-plus/src/service/framework/app/initGlobalEvent.ts index 6d6b44f0d..eb9fd9753 100644 --- a/packages/uni-app-plus/src/service/framework/app/initGlobalEvent.ts +++ b/packages/uni-app-plus/src/service/framework/app/initGlobalEvent.ts @@ -3,6 +3,7 @@ import { ON_APP_ENTER_BACKGROUND, ON_APP_ENTER_FOREGROUND, ON_THEME_CHANGE, + ON_KEYBOARD_HEIGHT_CHANGE, } from '@dcloudio/uni-shared' import { EVENT_BACKBUTTON, backbuttonListener } from './utils' @@ -37,6 +38,20 @@ export function initGlobalEvent() { } ) + let keyboardHeightChange = 0 + plusGlobalEvent.addEventListener( + 'KeyboardHeightChange', + function (event: { height: number }) { + // 安卓设备首次获取高度为 0 + if (keyboardHeightChange !== event.height) { + keyboardHeightChange = event.height + emit(ON_KEYBOARD_HEIGHT_CHANGE, { + height: keyboardHeightChange, + }) + } + } + ) + plusGlobalEvent.addEventListener('plusMessage', subscribePlusMessage) // nvue webview post message plusGlobalEvent.addEventListener('WebviewPostMessage', subscribePlusMessage) diff --git a/packages/uni-shared/dist/uni-shared.cjs.js b/packages/uni-shared/dist/uni-shared.cjs.js index 47a28c287..6d4224aec 100644 --- a/packages/uni-shared/dist/uni-shared.cjs.js +++ b/packages/uni-shared/dist/uni-shared.cjs.js @@ -837,6 +837,7 @@ const ON_HIDE = 'onHide'; const ON_LAUNCH = 'onLaunch'; const ON_ERROR = 'onError'; const ON_THEME_CHANGE = 'onThemeChange'; +const ON_KEYBOARD_HEIGHT_CHANGE = 'onKeyboardHeightChange'; const ON_PAGE_NOT_FOUND = 'onPageNotFound'; const ON_UNHANDLE_REJECTION = 'onUnhandledRejection'; //Page @@ -964,6 +965,7 @@ exports.ON_APP_ENTER_FOREGROUND = ON_APP_ENTER_FOREGROUND; exports.ON_BACK_PRESS = ON_BACK_PRESS; exports.ON_ERROR = ON_ERROR; exports.ON_HIDE = ON_HIDE; +exports.ON_KEYBOARD_HEIGHT_CHANGE = ON_KEYBOARD_HEIGHT_CHANGE; exports.ON_LAUNCH = ON_LAUNCH; exports.ON_LOAD = ON_LOAD; exports.ON_NAVIGATION_BAR_BUTTON_TAP = ON_NAVIGATION_BAR_BUTTON_TAP; diff --git a/packages/uni-shared/dist/uni-shared.d.ts b/packages/uni-shared/dist/uni-shared.d.ts index 3dc2530fe..3e95889c8 100644 --- a/packages/uni-shared/dist/uni-shared.d.ts +++ b/packages/uni-shared/dist/uni-shared.d.ts @@ -219,6 +219,8 @@ export declare const ON_ERROR = "onError"; export declare const ON_HIDE = "onHide"; +export declare const ON_KEYBOARD_HEIGHT_CHANGE = "onKeyboardHeightChange"; + export declare const ON_LAUNCH = "onLaunch"; export declare const ON_LOAD = "onLoad"; diff --git a/packages/uni-shared/dist/uni-shared.es.js b/packages/uni-shared/dist/uni-shared.es.js index 8acfabe3d..c9056d83b 100644 --- a/packages/uni-shared/dist/uni-shared.es.js +++ b/packages/uni-shared/dist/uni-shared.es.js @@ -833,6 +833,7 @@ const ON_HIDE = 'onHide'; const ON_LAUNCH = 'onLaunch'; const ON_ERROR = 'onError'; const ON_THEME_CHANGE = 'onThemeChange'; +const ON_KEYBOARD_HEIGHT_CHANGE = 'onKeyboardHeightChange'; const ON_PAGE_NOT_FOUND = 'onPageNotFound'; const ON_UNHANDLE_REJECTION = 'onUnhandledRejection'; //Page @@ -928,4 +929,4 @@ function getEnvLocale() { return (lang && lang.replace(/[.:].*/, '')) || 'en'; } -export { ACTION_TYPE_ADD_EVENT, ACTION_TYPE_CREATE, ACTION_TYPE_EVENT, ACTION_TYPE_INSERT, ACTION_TYPE_PAGE_CREATE, ACTION_TYPE_PAGE_CREATED, ACTION_TYPE_REMOVE, ACTION_TYPE_REMOVE_ATTRIBUTE, ACTION_TYPE_REMOVE_EVENT, ACTION_TYPE_SET_ATTRIBUTE, ACTION_TYPE_SET_TEXT, ATTR_CLASS, ATTR_STYLE, BACKGROUND_COLOR, BUILT_IN_TAGS, COMPONENT_NAME_PREFIX, COMPONENT_PREFIX, COMPONENT_SELECTOR_PREFIX, DATA_RE, EventChannel, EventModifierFlags, NAVBAR_HEIGHT, NODE_TYPE_COMMENT, NODE_TYPE_ELEMENT, NODE_TYPE_PAGE, NODE_TYPE_TEXT, ON_ADD_TO_FAVORITES, ON_APP_ENTER_BACKGROUND, ON_APP_ENTER_FOREGROUND, ON_BACK_PRESS, ON_ERROR, ON_HIDE, ON_LAUNCH, ON_LOAD, ON_NAVIGATION_BAR_BUTTON_TAP, ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED, ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED, ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED, ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED, ON_PAGE_NOT_FOUND, ON_PAGE_SCROLL, ON_PULL_DOWN_REFRESH, ON_REACH_BOTTOM, ON_REACH_BOTTOM_DISTANCE, ON_READY, ON_RESIZE, ON_SHARE_APP_MESSAGE, ON_SHARE_TIMELINE, ON_SHOW, ON_TAB_ITEM_TAP, ON_THEME_CHANGE, ON_UNHANDLE_REJECTION, ON_UNLOAD, ON_WEB_INVOKE_APP_SERVICE, PLUS_RE, PRIMARY_COLOR, RESPONSIVE_MIN_WIDTH, SCHEME_RE, SELECTED_COLOR, TABBAR_HEIGHT, TAGS, UNI_SSR, UNI_SSR_DATA, UNI_SSR_GLOBAL_DATA, UNI_SSR_STORE, UNI_SSR_TITLE, UniBaseNode, UniCommentNode, UniElement, UniEvent, UniInputElement, UniNode, UniTextAreaElement, UniTextNode, WEB_INVOKE_APPSERVICE, addFont, cache, cacheStringFunction, callOptions, createRpx2Unit, debounce, decode, decodedQuery, defaultRpx2Unit, formatDateTime, formatLog, getCustomDataset, getEnvLocale, getLen, initCustomDataset, invokeArrayFns, isBuiltInComponent, isCustomElement, isNativeTag, isServiceCustomElement, isServiceNativeTag, normalizeDataset, normalizeEventType, normalizeTarget, once, parseEventName, parseQuery, parseUrl, passive, plusReady, removeLeadingSlash, sanitise, scrollTo, stringifyQuery, updateElementStyle }; +export { ACTION_TYPE_ADD_EVENT, ACTION_TYPE_CREATE, ACTION_TYPE_EVENT, ACTION_TYPE_INSERT, ACTION_TYPE_PAGE_CREATE, ACTION_TYPE_PAGE_CREATED, ACTION_TYPE_REMOVE, ACTION_TYPE_REMOVE_ATTRIBUTE, ACTION_TYPE_REMOVE_EVENT, ACTION_TYPE_SET_ATTRIBUTE, ACTION_TYPE_SET_TEXT, ATTR_CLASS, ATTR_STYLE, BACKGROUND_COLOR, BUILT_IN_TAGS, COMPONENT_NAME_PREFIX, COMPONENT_PREFIX, COMPONENT_SELECTOR_PREFIX, DATA_RE, EventChannel, EventModifierFlags, NAVBAR_HEIGHT, NODE_TYPE_COMMENT, NODE_TYPE_ELEMENT, NODE_TYPE_PAGE, NODE_TYPE_TEXT, ON_ADD_TO_FAVORITES, ON_APP_ENTER_BACKGROUND, ON_APP_ENTER_FOREGROUND, ON_BACK_PRESS, ON_ERROR, ON_HIDE, ON_KEYBOARD_HEIGHT_CHANGE, ON_LAUNCH, ON_LOAD, ON_NAVIGATION_BAR_BUTTON_TAP, ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED, ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED, ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED, ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED, ON_PAGE_NOT_FOUND, ON_PAGE_SCROLL, ON_PULL_DOWN_REFRESH, ON_REACH_BOTTOM, ON_REACH_BOTTOM_DISTANCE, ON_READY, ON_RESIZE, ON_SHARE_APP_MESSAGE, ON_SHARE_TIMELINE, ON_SHOW, ON_TAB_ITEM_TAP, ON_THEME_CHANGE, ON_UNHANDLE_REJECTION, ON_UNLOAD, ON_WEB_INVOKE_APP_SERVICE, PLUS_RE, PRIMARY_COLOR, RESPONSIVE_MIN_WIDTH, SCHEME_RE, SELECTED_COLOR, TABBAR_HEIGHT, TAGS, UNI_SSR, UNI_SSR_DATA, UNI_SSR_GLOBAL_DATA, UNI_SSR_STORE, UNI_SSR_TITLE, UniBaseNode, UniCommentNode, UniElement, UniEvent, UniInputElement, UniNode, UniTextAreaElement, UniTextNode, WEB_INVOKE_APPSERVICE, addFont, cache, cacheStringFunction, callOptions, createRpx2Unit, debounce, decode, decodedQuery, defaultRpx2Unit, formatDateTime, formatLog, getCustomDataset, getEnvLocale, getLen, initCustomDataset, invokeArrayFns, isBuiltInComponent, isCustomElement, isNativeTag, isServiceCustomElement, isServiceNativeTag, normalizeDataset, normalizeEventType, normalizeTarget, once, parseEventName, parseQuery, parseUrl, passive, plusReady, removeLeadingSlash, sanitise, scrollTo, stringifyQuery, updateElementStyle }; diff --git a/packages/uni-shared/src/constants.ts b/packages/uni-shared/src/constants.ts index 7cf7781cd..0c0da703e 100644 --- a/packages/uni-shared/src/constants.ts +++ b/packages/uni-shared/src/constants.ts @@ -29,6 +29,7 @@ export const ON_HIDE = 'onHide' export const ON_LAUNCH = 'onLaunch' export const ON_ERROR = 'onError' export const ON_THEME_CHANGE = 'onThemeChange' +export const ON_KEYBOARD_HEIGHT_CHANGE = 'onKeyboardHeightChange' export const ON_PAGE_NOT_FOUND = 'onPageNotFound' export const ON_UNHANDLE_REJECTION = 'onUnhandledRejection' //Page -- GitLab