当前位置: 首页 > 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.lryc.cn/news/593120.html

相关文章:

  • 了解pycharm的基本运用
  • Android无需授权直接访问Android/data目录漏洞
  • 开启你的专属智能时代:枫清科技个人智能体限时体验计划上线!
  • 网络基础DAY13-NAT技术
  • 嵌入式学习-PyTorch(9)-day25
  • Tomcat 生产 40 条军规:容量规划、调优、故障演练与安全加固
  • Linux:lvs集群技术
  • steam游戏搬砖项目超完整版实操分享
  • 6-大语言模型—预训练:数据处理
  • HOT100——排序篇Leetcode215. 数组中的第K个最大元素
  • LVS工作模式和算法的总结
  • 相角补偿全通滤波器设计:相位均衡(0~350Hz,15°超前)
  • 《YOLOv13魔术师专栏》全景指南:从理论到工业级实战
  • 计算机网络——IPv4(25王道最新版)
  • python的第三方库的基本运用
  • RISC采用的3种流水技术的功能和区别分析
  • Xss-labs 1-8以及利用python自动sq8注入
  • 定时器与间歇函数
  • 【C++】入门阶段
  • 时序数据库选型实战:Apache IoTDB技术深度解析
  • UniApp 优化实践:使用常量统一管理本地存储 Key,提升可维护性
  • 一站式PDF转Markdown解决方案PDF3MD
  • MyBatis动态SQL实战:告别硬编码,拥抱智能SQL生成
  • 【iOS】编译和链接、动静态库及dyld的简单学习
  • JMeter 元件使用详解
  • k8s快速部署(亲测无坑)
  • Jmeter系列(7)-线程组
  • uniapp相关地图 API调用
  • 考研复习-数据结构-第七章-查找
  • 考研408《计算机组成原理》复习笔记,第三章(5)——磁盘存储器