解決uni-app微信小程序input輸入框在底部時(shí),鍵盤(pán)彈起頁(yè)面整體上移問(wèn)題
問(wèn)題描述:
最近的做了個(gè)客服聊天的功能,遇到一個(gè)問(wèn)題如下:
在手機(jī)上點(diǎn)擊聊天頁(yè)底部的input框后,鍵盤(pán)彈起同時(shí)頁(yè)面會(huì)整體上移,標(biāo)題欄被頂上去了。如下圖:

問(wèn)題分析:
input 獲取焦點(diǎn)時(shí)會(huì)自動(dòng)調(diào)起手機(jī)鍵盤(pán),設(shè)置 :adjust-position="true",會(huì)導(dǎo)致鍵盤(pán)彈起時(shí)頁(yè)面整體上移
解決思路:
- 設(shè)置使鍵盤(pán)彈起使頁(yè)面不上移
- 設(shè)置輸入框所在盒子為絕對(duì)定位
- 鍵盤(pán)彈起時(shí)獲取鍵盤(pán)高度
- 設(shè)置輸入框所在盒子的bottom的鍵盤(pán)高度
注意:我這里是將消息輸入部分封裝成了組件,引入到它所在的
view里的,所以需要將鍵盤(pán)高度子傳父?jìng)髦到o它所在的盒子,如果是在同一個(gè)文件中的話直接將獲取到的鍵盤(pán)高度賦值給bottom就可以。
1. input
<input class="TUI-message-input-area" :adjust-position="false" // 修改為 false,使鍵盤(pán)彈起頁(yè)面不上移 cursor-spacing="20" v-model="inputText" @input="onInputValueChange" maxlength="140" type="text" placeholder-class="input-placeholder" placeholder="說(shuō)點(diǎn)什么呢~" @focus="inputBindFocus" // 添加獲取焦點(diǎn)鍵盤(pán)彈起事件 @blur="inputBindBlur" // 添加失去焦點(diǎn)鍵盤(pán)隱藏事件 />
重點(diǎn)在這里?。?!我踩坑被折磨很久的一個(gè)地方!?。∫欢ㄒ?px?。?!
methods: {
inputBindFocus(e) {
// 獲取手機(jī)鍵盤(pán)的高度,賦值給input 所在盒子的 bottom 值
// 注意!!! 這里的 px 至關(guān)重要!!! 我搜到的很多解決方案都沒(méi)有說(shuō)這里要添加 px
this.$emit('changeBottomVal', e.detail.height + 'px')
},
inputBindBlur() {
// input 失去焦點(diǎn),鍵盤(pán)隱藏,設(shè)置 input 所在盒子的 bottom 值為0
this.$emit('changeBottomVal', 0)
}
}
2. input 所在的盒子:
<view v-if="showChat" class="message-input" :style="{ bottom: bottomVal }">
<TUI-message-input id="message-input" ref="messageInput" :conversation="conversation" @sendMessage="sendMessage" @changeBottomVal="changeBottomVal"/>
</view>
data() {
return {
bottomVal: ''
}
}
methods: {
changeBottomVal(val) {
this.bottomVal = val
}
}
.message-input {
flex-shrink: 0;
width: 100%;
position: absolute; // input 所在盒子設(shè)置絕對(duì)定位
left: 0;
bottom: 0; // 默認(rèn) 0
z-index: 199;
}
總結(jié):
由于獲取的系統(tǒng)的尺寸單位都是 px ,給 bottom 設(shè)置的值單位也一定要是 px ! 不能因?yàn)槭鞘謾C(jī)端就用 rpx,2倍的 rpx 也不可以,因?yàn)椴⒉皇敲總€(gè)手機(jī)分辨率都是我們?cè)O(shè)計(jì)圖上375的2倍,一定要用 px ?。。?!
到此這篇關(guān)于解決uni-app微信小程序input輸入框在底部時(shí),鍵盤(pán)彈起頁(yè)面整體上移問(wèn)題的文章就介紹到這了,更多相關(guān)uni-app微信小程序input輸入框內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 一文解決微信小程序button、input和image表單組件
- 微信小程序input、textarea層級(jí)過(guò)高穿透的問(wèn)題解決
- 微信小程序點(diǎn)擊按鈕動(dòng)態(tài)切換input的disabled禁用/啟用狀態(tài)功能
- 微信小程序事件 bindtap bindinput代碼實(shí)例
- 微信小程序?qū)崿F(xiàn)提交input信息到后臺(tái)的方法示例
- 詳解微信小程序input標(biāo)簽正則初體驗(yàn)
- 微信小程序input框中加入小圖標(biāo)的實(shí)現(xiàn)方法
- 微信小程序使用input組件實(shí)現(xiàn)密碼框功能【附源碼下載】
- 微信小程序 input輸入及動(dòng)態(tài)設(shè)置按鈕的實(shí)現(xiàn)
- 微信小程序中input標(biāo)簽詳解及簡(jiǎn)單實(shí)例
- 微信小程序中input組件為什么設(shè)置readonly只讀屬性沒(méi)有作用(失效)?
相關(guān)文章
關(guān)于JS數(shù)據(jù)類(lèi)型檢測(cè)的多種方式總結(jié)
Javascript中檢查數(shù)據(jù)類(lèi)型一直是老生常談的問(wèn)題,類(lèi)型判斷在web開(kāi)發(fā)中也有著非常廣泛的應(yīng)用,所以下面這篇文章主要給大家介紹了關(guān)于JS數(shù)據(jù)類(lèi)型檢測(cè)的那些事,需要的朋友可以參考下2021-09-09
html中通過(guò)JS獲取JSON數(shù)據(jù)并加載的方法
本篇內(nèi)容主要給大家講了如何通過(guò)javascript解析JSON并得到數(shù)據(jù)后添加到HTML中的方法,需要的朋友參考下。2017-11-11
微信小程序中如何使用xlsx(xlsx.mini.min.js)實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出功能
這篇文章主要介紹了微信小程序中如何使用xlsx(xlsx.mini.min.js)實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出功能的相關(guān)資料,包括準(zhǔn)備工作、導(dǎo)出Excel的基本流程、導(dǎo)入Excel的基本流程、常用API說(shuō)明以及注意事項(xiàng),需要的朋友可以參考下2026-01-01
JavaScript 定義function的三種方式小結(jié)
JavaScript中定義function有以下三種方式.2009-10-10
如何使用 Electron 打包 Windows 可執(zhí)行程序
在使用 Electron 構(gòu)建桌面應(yīng)用程序時(shí),通常需要將項(xiàng)目打包為可執(zhí)行文件(例如 .exe 文件),以便用戶可以方便地安裝和運(yùn)行,本文將介紹如何使用 electron-builder 將 Electron 項(xiàng)目打包成 Windows 的可執(zhí)行程序,感興趣的朋友一起看看吧2025-04-04

