【小程序】 键盘和表情同时存在时候,输入框上移问题

news2024/10/6 0:32:26

键盘和表情

      • 效果图
      • 实现方法
      • 引入的js文件,文件名emoji.js,存放在untils路径下

效果图

在这里插入图片描述
在这里插入图片描述

  • 实现过程,监听键盘高度的同时,判断是否获取到焦点
  • 样式上,swiper实现左右按页滑动效果

实现方法

<template>
	<view class="content">
		<!-- 文本弹窗 -->
		<view class="keyboard" :style="{'padding-bottom':keybottonm+'rpx','bottom':Keydibu+'px'}">
			<textarea type="text" v-model="commentInput" placeholder="请输入消息..." placeholder-class="placestyle"  :show-confirm-bar="false" :adjust-position="false" @keyboardheightchange="keyboardheightchange" @focus="getfocus" @blur="getblur"></textarea>
			<image src="/static/face.png" mode="" class="faceImg" @tap="alertEmoji"></image>
			<view class="sendBtn" @click="sendComment">
				发送
			</view>
		</view>
		<!-- 表情弹窗 -->
		<view v-if="isShowEmoji">
			<swiper  class="emojiSelect">
				<swiper-item v-for="(item,index) in emojilist" :key="indx">
					<view class="emojiItem" >
						<view class="emojiSelectItem" v-for="(ite,IN) in item" @click="inputEmoji(index,IN)">
							{{ite}}
						</view>
					</view>
				</swiper-item>
			</swiper>
		</view>
	</view>
</template>
<script>
	import emoji from "@/untils/emoji.js"
	export default {
		data() {
			return {
				keybottonm: 0,
				Keydibu:0,
				isShowEmoji: false,
				emojilist: [],
				focus:false,
				commentInput:"",
			}
		},
		onLoad() {
			this.getdevice()
			this.dealEmoji(35)//35控制一页显示多少个表情
		},
		methods: {
			// 自适应,判断ios还是安卓,ios底部要增大一下,避免遮挡
			getdevice() {
				let that = this
				let platform = uni.getSystemInfoSync().platform;
				if (platform == 'android') {
					that.keybottonm = 0
				} else {
					that.keybottonm = 24
				}
			},
			//表情处理
			dealEmoji(itemlength) { // 传过来每页展示个数
				let that = this;
				let alllength = parseInt(emoji.length / itemlength) + 1 //计算展示所有表情需要的总页数
				let itemIndex = 0
				for (let i = 0; i < alllength; i++) {
					that.emojilist[i] = []
					for (let j = 0; j < itemlength; j++) {
						itemIndex++
						if(emoji[itemIndex]!=null){
							that.emojilist[i].push(emoji[itemIndex])
						}
					}
				}
			},
			// 表情切换
			alertEmoji(){
				if(this.Keydibu>300){
					this.Keydibu=0
					return
				}
				this.isShowEmoji=!this.isShowEmoji
				if(this.isShowEmoji==true){
					this.Keydibu=240
				}else{
					this.Keydibu=0
				}
			},
			// 点击输入表情
			inputEmoji(index,IN) {
				this.commentInput += this.emojilist[index][IN];
			},
			//获取焦点
			getfocus(){
				this.focus=true
			},
			//失去焦点
			getblur(){
				this.focus=false
			},
			//键盘高度监听
			keyboardheightchange(e){
				console.log( e.detail.height)
				if(this.isShowEmoji==true&&this.focus){
					this.Keydibu=240
				}else{
					this.Keydibu = e.detail.height;
				}
			}
		}
	}
</script>
<style lang="less">
	.keyboard {
		position: fixed;
		bottom: 0;
		left: 0;
		padding: 14rpx 30rpx;
		box-sizing: border-box;
		width: 100%;
		display: flex;
		border-top: 2rpx solid #F5F5F5;
		align-items: center;
		z-index: 99;
		background-color: #fff;

		.placestyle {
			font-size: 26rpx;
		}

		textarea {
			padding: 10rpx 30rpx;
			box-sizing: border-box;
			padding-top: 20rpx;
			height: 72rpx;
			background: #f5f5f5;
			border-radius: 36rpx;
			flex: 1 !important;
			margin-right: 12rpx;
		}

		image {
			margin-right: 12rpx;
			width: 36rpx;
			height: 36rpx;
		}

		.sendBtn {
			width: 100rpx;
			height: 50rpx;
			font-size: 26rpx;
			color: #fff;
			border-radius: 8rpx;
			background-color: #007AFF;
			text-align: center;
			line-height: 50rpx;
		}
	}

	.emojiSelect {
		width: 100%;
		height: 460rpx;
		padding: 0 24rpx;
		box-sizing: border-box;
		background-color: #fff;
		position: fixed;
		z-index: 10000;
		bottom: 0;
		display: flex;
		flex-wrap: wrap;

		.emojiItem {
			display: flex;
			flex-wrap: wrap;

			.emojiSelectItem {
				width: 80rpx;
				height: 80rpx;
				margin: 0 8rpx 8rpx;
				display: flex;
				justify-content: center;
			}
		}
	}
</style>

引入的js文件,文件名emoji.js,存放在untils路径下

export default [
    "😀", "😁", "😃", "😄", "😅", "😆", "😉", "😊", "😋", "😎", "😍",
    "😘", "😗", "😙", "😚", "☺", "😇", "😐", "😑", "😶", "😏", "😣", "😥", "😮", "😯", "😪",
    "😫", "😴", "😌", "😛", "😜", "😝", "😒", "😓", "😔", "😕", "😲", "😷", "😖", "😞", "😟",
    "😤", "😢", "😭", "😦", "😧", "😨", "😬", "😰", "😱", "😳", "😵", "😡", "😠",
    "👦", "👧", "👨", "👩", "👴", "👵", "👶", "👱", "👮", "👲", "👳", "👷", "👸", "💂", "🎅", "👰", "👼",
    "💆", "💇", "🙍", "🙎", "🙅", "🙆", "💁", "🙋", "🙇", "🙌", "🙏", "👤", "👥", "🚶", "🏃", "👯",
    "💃", "👫", "👬", "👭", "💏", "💑", "👪", "💪", "👈", "👉", "☝", "👆", "👇", "✌", "✋", "👌",
    "👍", "👎", "✊", "👊", "👋", "👏", "👐", "✍", "👣", "👀", "👂", "👃", "👅", "👄", "💋", "👓",
    "👔", "👙", "👛", "👜", "👝", "🎒", "💼", "👞", "👟", "👠", "👡", "👢", "👑",
    "👒", "🎩", "🎓", "💄", "💅", "💍", "🌂", "📶", "📳", "📴", "♻", "🏧","🚮", "🚰", "♿", "🚹", "🚺",
    "🚻", "🚼", "🚾", "⚠", "🚸", "⛔", "🚫", "🚳", "🚭", "🚯", "🚱", "🚷", "🔞", "💈",
    "🙈", "🐒", "🐶", "🐕", "🐩", "🐺", "🐱","🐈", "🐯", "🐅", "🐆", "🐴", "🐎", "🐮", "🐂",
    "🐃","🐄","🐷","🐖","🐗","🐽","🐏","🐑","🐐","🐪","🐫","🐘","🐭",
    "🐁","🐀","🐹","🐰","🐇","🐻","🐨","🐼","🐾","🐔","🐓","🐣","🐤","🐥",
    "🐦", "🐧", "🐸", "🐊","🐢", "🐍", "🐲", "🐉", "🐳", "🐋", "🐬", "🐟", "🐠", "🐡",
    "🐙", "🐚", "🐌", "🐛", "🐜", "🐝", "🐞", "🦋",  "💐", "🌸", "💮", "🌹", "🌺",
    "🌻", "🌼", "🌷", "🌱", "🌲", "🌳", "🌴", "🌵", "🌾", "🌿", "🍀", "🍁", "🍂", "🍃",
    "🌍","🌎","🌏","🌐","🌑","🌒","🌓","🌔","🌕","🌖","🌗","🌘","🌙","🌚",
    "🌛","🌜","☀","🌝","🌞","⭐","🌟","🌠","☁","⛅","☔","⚡","❄","🔥","💧","🌊",
    "🏀", "🏈", "🏉", "🎾", "🎱", "🎳", "⛳", "🎣", "🎽", "🎿",
    "😈", "👿", "👹", "👺", "💀", "☠", "👻", "👽", "👾", "💣",
    "🌋", "🗻", "🏠", "🏡", "🏢", "🏣", "🏤", "🏥", "🏦", "🏨",
    "⛲", "🌁", "🌃", "🌆", "🌇", "🌉", "🌌", "🎠", "🎡", "🎢", "🚂",
    "🚌", "🚍", "🚎", "🚏", "🚐", "🚑", "🚒", "🚓", "🚔", "🚕", "🚖", "🚗", "🚘",
    "💌", "💎", "🔪", "💈", "🚪", "🚽", "🚿", "🛁", "⌛", "⏳", "⌚", "⏰", "🎈", "🎉",
    "💤", "💢", "💬", "💭", "♨", "🌀", "🔔", "🔕", "✡", "✝", "🔯", "📛", "🔰", "🔱", "⭕", "✅",
    "☑", "✔", "✖", "❌", "❎", "➕", "➖", "➗", "➰", "➿", "〽", "✳", "✴", "❇", "‼", "⁉", "❓", "❔", "❕", "❗",
    "🕛", "🕧", "🕐", "🕜", "🕑", "🕝", "🕒", "🕞", "🕓", "🕟", "🕔", "🕠", "🕕", "🕡",
    "🕖", "🕢", "🕗", "🕣", "🕘", "🕤", "🕙", "🕥", "🕚", "🕦", "⏱", "⏲", "🕰",
    "💘", "❤", "💓", "💔", "💕", "💖", "💗", "💙", "💚", "💛", "💜", "💝", "💞", "💟❣",
    "🍇", "🍈", "🍉", "🍊", "🍋", "🍌", "🍍", "🍎", "🍏", "🍐", "🍑", "🍒", "🍓",
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/490982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA常用配置及使用技巧

文章目录 下载插件JRebel and XRebelChinese Language PackMybatis XEasyCodeTranslationAuto filling Java call argumentsCodota AI Autocomplete for Java and JavaScriptAlibaba Java Coding GuidelinesEasyYapiGenerateAllSetterGit Commit TemplateGitToolBoxSQL Params …

基于YOLOv5的儿童睡眠检测

注意&#xff1a; 由于SOPHGO SE5微服务器的CPU是基于ARM架构&#xff0c;部分步骤将在 基于x86架构CPU的开发环境中完成 一、初始化开发环境(基于x86架构CPU的开发环境中完成) 二、模型转换 (基于x86架构CPU的开发环境中完成) 三、YOLOv5模型部署测试&#xff08;在SOPHGO SE5…

FT2000+ qemu kvm 64C64G 通过频繁设置CPU online 状态导致虚拟机openEuler 操作系统假死测试用例2

前文&#xff1a; https://hknaruto.blog.csdn.net/article/details/130408240 测试程序 /** tcti.cpp参考&#xff1a; https://www.cnblogs.com/organic/p/17321523.htmlg -stdc11 -lpthread trigger_cgroup_timer_inactive.cpp -o inactive_timer ./inactive_timer 100000…

linux内核网络子系统初探---概述

linux内核网络子系统初探—概述 一、网络模型 简单介绍 学习网络时&#xff0c;必定能在各种教材资料里见到以下三种网络模型&#xff1a; 三种模型间的差异&#xff1a; OSI七层模型是理论上的网络模型&#xff0c;从功能方面分成了相对独立的7个层次&#xff0c;由于太复…

如何通过 Rancher 轻松实现多云部署

“多云”通过不同的云厂商分发应用程序提高了弹性&#xff0c;能够帮助企业强化自身的竞争力。此外&#xff0c;多云还降低了被云厂商锁定的可能性&#xff0c;让企业避免过于依赖某个云厂商。 虽然多云的优势很多&#xff0c;但是管理多云 Kubernetes 的困难还是让人望而却步…

MCU自动化测量单元—峟思工程仪器仪表的智能助力

随着科技的不断发展&#xff0c;峟思工程仪器仪表在工程测量领域不断创新&#xff0c;其中MCU自动化测量单元作为一项颇具潜力的技术&#xff0c;正逐渐引起行业的广泛关注。MCU自动化测量单元作为峟思工程仪器仪表的重要组成部分&#xff0c;其应用带来了许多正面影响&#xf…

用右雅克比对旋转矩阵进行求导

考虑一个向量 a \bold{a} a对其进行旋转, 旋转用旋转矩阵 R \bold{R} R表示, 用朴素的倒数定义进行求导而不是用扰动模型, 我得到了这个过程与结果 和高博的新书结果 − R J r a ∧ -\bold{R}\bold{J}_{r}\bold{a}^{\wedge} −RJr​a∧结果不一样, 雅克比矩阵位置不同, 是不是…

神经网络结构搜索NAS

推荐课程&#xff1a;神经网络结构搜索 感谢博主ShusenWang提供的课程讲解&#xff01; 目录 1. 为什么要学习神经网络结构搜索NAS&#xff1f; 2. 什么是神经网络结构搜索NAS&#xff1f; &#xff08;1&#xff09;随机搜素Random Search 1. 为什么要学习神经网络结构搜…

位图的简单实现和使用

文章目录 1. 什么是位图2. 位图的简单实现3. 测试位图代码 1. 什么是位图 位图, 是一种非常常见的结构, 它使用每个二进制位来存放一个值的状态, 就类似于 Java 当中 HashSet 存储元素的功能. 在 Java 当中, 可以使用HashSet完成如下操作: add(T v): 添加一个元素到 HashSet…

算法:递归启蒙-汉诺塔

基本所有的讲递归的书和视频都会以汉诺塔作为开始&#xff0c;因为它足够经典 汉诺塔问题要求整个挪动的过程中都符合小压大的原则&#xff0c;就是如果同一个柱子上有超过1个的话&#xff0c;那必须下面是最大的&#xff0c;上面依次变小&#xff0c;不能出现大盘压小盘的情况…

Element Plus的Pagination 组件用法

5.2 Pagination 组件 分页组件通常与表格组件一同使用&#xff0c;在数据量很大的时候&#xff0c;通常不会在表格中一次性显示所有的数据&#xff0c;因为如果所有数据都展示在一个页面&#xff0c;数据量庞大&#xff0c;容易造成浏览器崩溃&#xff0c;就算数据可以完全展…

【CV2NLP】Chinese-Vicuna 中文小羊驼

学习一个短语&#xff01; gain proficiency in 熟练掌握 &#xff08;用我最爱的文心一言造个句子&#xff09; 最近羊驼家族百花齐放&#xff0c;赶紧学习一下 ChatBot 的背后细节。Chinese-Vicuna 中文小羊驼是基于 Vicuna 模型使用中文数据 LORA 方案来微调的一种中文对…

数值分析-牛顿-柯特斯公式的概念、推导与应用

目录 一、引言 二、牛顿-柯特斯公式的基本概念 三、牛顿-柯特斯公式的推导 四、牛顿-柯特斯公式的应用 五、牛顿-柯特斯公式的优缺点 六、总结 一、引言 数值分析是数学中的一个重要分支&#xff0c;它研究如何利用数值方法来解决实际问题。在数值分析中&#xff0c;牛顿…

Redux 学习系列(一) —— 基础概念入门篇

简介 Redux 是一个可预测的 JavaScript 应用状态管理容器&#xff0c;也可以说是一个应用数据流框架。 作用 Redux 主要是用作应用状态的管理。它抽离所有组件的状态&#xff0c;构造一个中心化的单独常量状态树&#xff08;对象&#xff09;来保存这一整个应用的状态。这棵…

Java经典笔试题—day02

Java经典笔试题—day02 &#x1f50e;选择题&#x1f50e;编程题&#x1f95d;排序子序列&#x1f95d;倒置字符串 &#x1f50e;结尾 &#x1f50e;选择题 (1)A 派生出子类 B &#xff0c; B 派生出子类 C &#xff0c;并且在 java 源代码有如下声明&#xff1a; A a0new A(…

HTTPS协议介绍

文章目录 一、HTTPS协议的认识二、常见的加密方式1.对称加密2.非对称加密 三、数据摘要四、HTTPS的工作过程探究1.只使用对称加密2.只使用非对称加密3.双方都使用非对称加密4.非对称加密对称加密5.中间人攻击6.引入证书7.非对称加密对称加密证书认证 一、HTTPS协议的认识 HTTP…

【数据库】面试高频问题汇总及详细解答

【C语言部分】面试高频问题汇总及详细解答 【操作系统(Linux)】面试高频问题汇总及详细解答 【计算机网络】面试高频问题汇总及详细解答 本文目录 1. SQL1.1 介绍一下数据库分页1.2 介绍一下SQL中的聚合函数1.3 表跟表是怎么关联的1.4 说一说你对外连接的了解1.5 说说SQL中怎么…

VM虚拟机安装Ubuntu server 22.04网络问题

在使用vm虚拟机安装ubuntu server 22.04的时候会遇到一些网络问题&#xff0c;例如虚拟机内的Ubuntu不能上网&#xff0c;ping www.baidu.com不通&#xff0c;主机使用远程工具不能建立远程连接&#xff0c;Ubuntu ping本地主机不通&#xff0c;本地主机ping虚拟机也不通的问题…

vue3+vite项目优化。

最近开发的一个vue3vitets项目&#xff0c;build后发现体积过大&#xff0c;所以针对于项目体积进行一次优化。 一: 使用rollup-plugin-visualizer 可视化分析包 npm i rollup-plugin-visualizer -S 在vite.config.js中引入 在 plugins里面 然后执行npm run build就自动打开…

最新开源Chatgpt人工智能对话源码系统如何搭建?含详细安装教程分享和源码

人工智能对话系统市场需求正在不断增长。随着人们对智能化、自动化服务的需求不断提高&#xff0c;人工智能对话系统成为越来越多企业和组织的首选解决方案&#xff0c;可以有效提升用户体验、降低成本、提高效率。 一、Chatgpt人工智能对话源码系统定义 ChatGPT是一种基于深…