摘要:參考地址首先,是這樣的布局父容器里面放一個輸入框和一個按鈕思路是父容器定位,為,為布局在其他事件觸發輸入框出現的時候例如一個評論的,父容器值變為,被軟鍵盤頂上來。
參考地址:
https://segmentfault.com/a/11...1.首先,是這樣的布局:父容器里面放一個輸入框 和一個按鈕
https://blog.csdn.net/github_...
思路是:父容器fixed定位,bottom為0,left為-100%;flex布局;在其他事件觸發輸入框出現的時候(例如一個評論的icon),父容器 left值變為0,被軟鍵盤頂上來。
.ipt-box { position: fixed; left: -100%; bottom: 0; width: 100%; z-index: 9999999; display: flex; align-items: center; &.iptfcs { left: 0; } }發送
好吧,結果是根本頂不上來!需要多加一層父容器!
2.其次,是這樣的布局:父容器---父容器---輸入框+按鈕.ipt-box { position: fixed; left: -100%; bottom: 0; width: 100%; z-index: 9999999; &.iptfcs { left: 0; } .ipt-box-cont{ width: 100%; display: flex; align-items: center; } }發送
這樣做,終于是頂上來了。點擊評論icon,showCipt 設置為true后,this.$refs.ctxt.focus() 聚焦準備書寫。但是ios出現點擊聚焦不靈敏的情況!需要強制聚焦!
3.打開fastclick插件,將focus方法加入一行,強制聚焦:FastClick.prototype.focus = function(targetElement) { var length; if (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf("date") !== 0 && targetElement.type !== "time" && targetElement.type !== "month") { length = targetElement.value.length; targetElement.focus(); //新增這一行 targetElement.setSelectionRange(length, length); } else { targetElement.focus(); } };
這下點擊一次就可以聚焦了,而且經過我的iphone7系統輸入法測試,沒有出現什么問題,當我切換搜狗輸入法后,悲劇又發生了,遮擋一半!!換了xr測試,完全遮擋!!!!
4.輸入法兼容問題有哪些確實大部分 Android 瀏覽器是沒問題的,但是測試在 IOS 上,UC 瀏覽器配合原生輸入法和第三方輸入法(比如搜狗輸入法),輸入框都會被完全擋住;QQ 瀏覽器或微信瀏覽器,配合第三方輸入法,輸入框會被遮住一半;百度瀏覽器配合第三方輸入法輸入框也會被完全遮住。
5.軟鍵盤彈起,在安卓上是縮小了內容區域的高度, 軟鍵盤將下半部分進行遮擋;ios上則是整個webview整體上移,改變了整個內容區域的scrollTop值。經過篩選,最終選擇使用定時器,思路如下:
點擊觸發input-------------在獲取焦點(軟鍵盤彈起)前,先將頁面的scrollTop值存起來-------
------獲取焦點------------判斷瀏覽器類型--------如果是ios,設置定時器,將此時內容的高度值賦值給瀏覽器當前滾動高度(確保完全顯示)------
-----失去光標--------------判斷瀏覽器類型------若為ios,清除定時器,并設置瀏覽器當前滾動高度值為一開始鍵盤未彈起的scrollTop值
//解決第三方軟鍵盤喚起時底部input輸入框被遮擋問題 var bfscrolltop = document.body.scrollTop;//獲取軟鍵盤喚起前瀏覽器滾動部分的高度 $("input.inputframe").focus(function(){//在這里‘input.inputframe’是我的底部輸入欄的輸入框,當它獲取焦點時觸發事件 interval = setInterval(function(){//設置一個計時器,時間設置與軟鍵盤彈出所需時間相近 document.body.scrollTop = document.body.scrollHeight;//獲取焦點后將瀏覽器內所有內容高度賦給瀏覽器滾動部分高度 },100) }).blur(function(){//設定輸入框失去焦點時的事件 clearInterval(interval);//清除計時器 document.body.scrollTop = bfscrolltop;將軟鍵盤喚起前的瀏覽器滾動部分高度重新賦給改變后的高度 });
應用在我的代碼里面:
//點擊評論icon,觸發軟鍵盤彈起 commentFocus(cid) { let _this = this; _this.scrollerval = document.body.scrollTop; _this.showCipt = true; _this.$refs.ctxt.focus(); if (navigator.userAgent.indexOf("iPhone") > -1||navigator.userAgent.indexOf("iPad") > -1){ _this.timer = setInterval(function () { document.body.scrollTop = document.body.scrollHeight; },1000); } },
//失去光標 resetipt() { let _this = this; _this.showCipt = false; if (navigator.userAgent.indexOf("iPhone") > -1 || navigator.userAgent.indexOf("iPad") > -1){ clearInterval(_this.timer); document.body.scrollTop = _this.scrollerval; } },
當然,把瀏覽器類型存起來用更好啦!
然后,就可以洗洗睡了!!!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/106850.html
摘要:然而,并沒有直接監聽軟鍵盤的原生事件,只能通過軟鍵盤彈起或收起,引發頁面其他方面的表現間接監聽,曲線救國。軟鍵盤收起表現觸發輸入框以外的區域時,輸入框失去焦點,軟鍵盤收起。可以讓軟鍵盤彈起后,讓焦點元素再次滾到可視區,強迫滾到位。 前言 最近一段時間在做 H5 聊天項目,踩過其中一大坑:輸入框獲取焦點,軟鍵盤彈起,要求輸入框吸附(或頂)在輸入法框上。需求很明確,看似很簡單,其實不然。從...
摘要:前言這是一個存在很久的歷史問題了,對于這樣一個具有普遍性的問題瀏覽器偏偏沒有給出解決方案,沒有方案還聊個什么別急,別急,接下來我們一起來扒一扒關于軟鍵盤高度和的問題我們先來看一個短片認識一下這個問題問題描述當操作者進行輸入操作的時候,彈起的 前言 這是一個存在很久的歷史問題了,對于這樣一個具有普遍性的問題瀏覽器偏偏沒有給出解決方案,what?沒有方案還聊個什么? 別急,別急,接下來我們...
摘要:前言這是一個存在很久的歷史問題了,對于這樣一個具有普遍性的問題瀏覽器偏偏沒有給出解決方案,沒有方案還聊個什么別急,別急,接下來我們一起來扒一扒關于軟鍵盤高度和的問題我們先來看一個短片認識一下這個問題問題描述當操作者進行輸入操作的時候,彈起的 前言 這是一個存在很久的歷史問題了,對于這樣一個具有普遍性的問題瀏覽器偏偏沒有給出解決方案,what?沒有方案還聊個什么? 別急,別急,接下來我們...
摘要:前言這是一個存在很久的歷史問題了,對于這樣一個具有普遍性的問題瀏覽器偏偏沒有給出解決方案,沒有方案還聊個什么別急,別急,接下來我們一起來扒一扒關于軟鍵盤高度和的問題我們先來看一個短片認識一下這個問題問題描述當操作者進行輸入操作的時候,彈起的 前言 這是一個存在很久的歷史問題了,對于這樣一個具有普遍性的問題瀏覽器偏偏沒有給出解決方案,what?沒有方案還聊個什么? 別急,別急,接下來我們...
閱讀 916·2023-04-25 18:51
閱讀 1867·2021-09-09 11:39
閱讀 3280·2019-08-30 15:53
閱讀 2096·2019-08-30 13:03
閱讀 1308·2019-08-29 16:17
閱讀 577·2019-08-29 11:33
閱讀 1882·2019-08-26 14:00
閱讀 2123·2019-08-26 13:41