小編給大家分享一下小程序處理鍵盤覆蓋輸入框的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
為船山等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及船山網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、船山網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
在移動(dòng)端里, 當(dāng)輸入框處于頁面比較下方的時(shí)候回發(fā)生鍵盤覆蓋輸入框的情況, 在小程序中也發(fā)生了類似情況, 但小程序提供了一些api, 但不能達(dá)到需求. 這里來簡(jiǎn)單說一下解決思路.
小程序的默認(rèn)行為
在發(fā)生了鍵盤覆蓋輸入框的時(shí)候, 在不操作任何api的情況下, 小程序會(huì)把屏幕向上推, 推到輸入框正好在鍵盤上方的位置.
也就是如果不經(jīng)過處理, 小程序的鍵盤是不會(huì)覆蓋輸入框的. 但是在我的需求里這樣還不夠, 因?yàn)轫撁嫔喜糠质切枰掷m(xù)展示的內(nèi)容, 不希望把頁面向上推.
所以下面要通過小程序的api來解決這些問題.
cursor-spacing
在比較正常的UI設(shè)計(jì)中, 輸入框外面實(shí)際都會(huì)有一層wrapper, 而很明顯小程序是默認(rèn)行為是不知道的, 所以結(jié)果是會(huì)把這層wrapper的下半部分(輸入框以下的)切掉. 那么就非常難看了.
引入這個(gè)apicursor-spacing, 設(shè)多少, input下面就留多少. 這個(gè)數(shù)字應(yīng)當(dāng)是'輸入框下邊緣到wrapper結(jié)束的距離".
小程序的坑在于: 文檔上的單位是錯(cuò)的, 本來就需要試才知道這個(gè)屬性的含義是什么, 所以單位錯(cuò)導(dǎo)致無效果就讓一(大)部分人放棄了. 正確的單位是帶有單位的字符串. 例如10px
或者100rpx
.
adjust-position
剛才說到我的需求, 我希望頁面不向上推, 而直接把輸入框頂上來.
于是嘗試了這個(gè)api. 默認(rèn)是true, 把他設(shè)為false. 效果變成了: 點(diǎn)了輸入框, 鍵盤完美覆蓋輸入框.
于是在加上cursor-spacing, 發(fā)現(xiàn)這兩個(gè)api是不能同時(shí)生效的.
所以最后結(jié)論是: 單純用提供的api無法實(shí)現(xiàn)需求了. 所以只能監(jiān)聽事件自己做.
解決方案
手動(dòng)操作輸入框思路:
adjust-position設(shè)為false.
在輸入框的wrapper的bottom樣式綁到本地?cái)?shù)據(jù), 并設(shè)為absolute定位.
在focus事件里改變輸入框的位置.
在blur事件里復(fù)原輸入框的位置.
按照這個(gè)思路操作, 遇到了幾個(gè)問題:
如何確定輸入框的位置
發(fā)現(xiàn)在bindfocus事件中可以獲得鍵盤的高度, 經(jīng)過嘗試, 鍵盤的高度是以px為單位的. 所以直接把bottom的值設(shè)為px高度就行了.
如果輸入框wrapper的相對(duì)定位不是頁面底部, 情況就比較復(fù)雜, 若是用rpx為單位, 需要獲得屏幕寬高來計(jì)算px數(shù), 在不麻煩的情況下可以調(diào)整布局使wrapper相對(duì)于頁面底部定位.
在改變style后輸入框立即失去焦點(diǎn)
發(fā)生了這個(gè)情況后表現(xiàn)為: 點(diǎn)了輸入框, 輸入框的wrapper閃一下又回原處. (因?yàn)槭ソ裹c(diǎn))
經(jīng)過多次試驗(yàn), 需要做的是在綁定一個(gè)本地變量到focus
屬性.
然后用wx:if根據(jù)是否focus隱藏輸入框, 放一個(gè)假的輸入框, 點(diǎn)擊以后使改變focus屬性來喚起鍵盤.
看完了這篇文章,相信你對(duì)小程序處理鍵盤覆蓋輸入框的方法有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!