当前位置: 首页 > news >正文

Uniapp之键盘弹窗

适用范围

  1. 评论输入框
  2. 自定义键盘顶部工具栏
  3. 其他吸附于键盘顶部的弹框

意义

对于输入框来说,一般都包含自动抬高输入框,但是对于一些自定义窗口来说(比如输入框下添加工具栏、键盘顶部添加工具栏等),就需要自己处理弹框位置了,那么这个时候键盘弹窗就解决了复杂的处理。

示例

下面示例用于展示 keyboard-popup 使用示例,当 textarea 聚焦时,textarea 就会自动抬高到键盘上方。

<template><!-- 评论输入框 --><!-- 注意这里需要添加adjustPosition=false属性来关闭自动上推页面 --><keyboard-popup ref="replyPopup"><textarearef="textarea"v-model="content"placeholder="请输入内容"focusauto-focusmaxlength="500":style="{height: '160rpx'}":adjustPosition="false":showConfirmBar="false"></textarea></keyboard-popup>
</template>
<script>
export default {data() {return {content: ''}},methods: {openPopup() {// 打开弹窗this.$refs.replyPopup.open()},openPopup() {// 关闭弹窗this.$refs.replyPopup.colse()}},mounted() {// 监听键盘高度变化,用于抬高评论框this.$refs.replyPopup.handleKeyboardHeightChange()},onUnload() {// 取消键盘高度变化监听this.$refs.replyPopup.offKeyboardHeightChange()},
}
</script>

源码

以下是 KeyboardPopup 组件的源码,可根据自己的需求加以改进。

<script>
export default {name: 'KeyboardPopup',props: {// 是否显示底部安全距离showSafeBottom: {type: Boolean,default: true}},data() {return {showVal: false,keyboardHeight: 0,isOpen: false,safeAreaInsetBottom: 0}},methods: {open() {this.showVal = truethis.$nextTick(() => {this.isOpen = true})},close() {this.isOpen = falsethis.showVal = false},onClose() {this.isOpen = falsethis.showVal = falsethis.$emit('close')},/*** 设置键盘高度,用于设置内容抬高的位置* @param height 高度*/setKeyboardHeight(height) {this.keyboardHeight = height},handleKeyboardHeightChange() {uni.onKeyboardHeightChange(res => {this.keyboardHeight = res.height})},offKeyboardHeightChange() {uni.offKeyboardHeightChange()}},mounted() {// 获取底部安全距离if (this.showSafeBottom) {this.safeAreaInsetBottom = uni.getSystemInfoSync().safeAreaInsets.bottom}}
}
</script><template><u-popup :show="showVal" @close="onClose" bgColor="transparent" :safeAreaInsetBottom="false" closeOnClickOverlay><view class="content-container" :style="{bottom: keyboardHeight + 'px'}"><slot :isOpen="isOpen"></slot></view><!--  底部安全距离  --><view class="safeBottom" v-if="!isOpen" :style="{height: safeAreaInsetBottom + 'px'}"></view></u-popup>
</template><style scoped lang="scss">
.content-container {position: relative;
}.safeBottom {width: 100%;background-color: #fff;
}
</style>
http://www.dtcms.com/a/287250.html

相关文章:

  • day43 CNN及Grad-CAM实战——以Intel Image Classification为例
  • JAVA中的Collections 类
  • [论文阅读] 人工智能 + 软件工程 | 强化学习在软件工程中的全景扫描:从应用到未来
  • ABP VNext + Temporal:分布式工作流与 Saga
  • 当OT遇见IT:Apache IoTDB如何用“时序空间一体化“破解工业物联网数据孤岛困局
  • 时序数据库选型实战:Apache IoTDB技术深度解析
  • Bicep入门篇
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘pillow’问题
  • C/C++---文件读取
  • kotlin部分常用特性总结
  • Node.js net.Socket.destroy()深入解析
  • 海思3516cv610 NPU学习
  • 【C语言进阶】题目练习(3)
  • kafka--基础知识点--6.1--LEO、HW、LW
  • Validation - Spring Boot项目中参数检验的利器
  • web.m3u8流媒体视频处理
  • Flutter基础(前端教程①③-单例)
  • 定时器与间歇函数
  • Web3.0与元宇宙:区块链驱动的数字新生态解析
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - snowNLP库实现中文情感分析
  • 如何增强LLM(大语言模型)的“置信度”和“自信心” :LLM的“自信”不是“什么都能答”,而是“该答的答得准,不该答的敢说不”。
  • 【unity游戏开发入门到精通——3D篇】3D光源之——unity使用Lens Flare (SRP) 组件实现太阳耀斑镜头光晕效果
  • 《Origin画百图》之多分类矩阵散点图
  • 2025最新版 Go语言Goland 专业安装及配置(超详细)
  • 华为仓颉编程语言语法简介与示例
  • 从0开始学习R语言--Day51--PH检验
  • 操作系统-分布式同步
  • 【REACT18.x】creat-react-app在添加eslint时报错Environment key “jest/globals“ is unknown
  • Spring AI 项目实战(十九):Spring Boot + AI + Vue3 + OSS + DashScope 构建多模态视觉理解平台(附完整源码)
  • 在 .NET Core 中创建 Web Socket API