成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

IOS評(píng)論框不貼底(ios12新bug)

zeyu / 1305人閱讀

摘要:在系統(tǒng)中,當(dāng)鍵盤彈起的時(shí)候,會(huì)擠壓頁(yè)面,評(píng)論框會(huì)自然在頂部,但是有個(gè)問(wèn)題就是,下面的評(píng)論框會(huì)不貼底,露出下面的東西,所以在之前的解決辦法就是在評(píng)論框觸發(fā)的時(shí)候讓頁(yè)面滾動(dòng)到底部,代碼如下如果輸入框失去焦點(diǎn),就讓頁(yè)面滾動(dòng)到先前的位置。

結(jié)構(gòu)如下

我們需要做的就是當(dāng)聚焦評(píng)論框的時(shí)候,ios需要讓鍵盤頂起評(píng)論框。在ios系統(tǒng)中,當(dāng)鍵盤彈起的時(shí)候,會(huì)擠壓頁(yè)面,評(píng)論框會(huì)自然在頂部,但是有個(gè)問(wèn)題就是,下面的評(píng)論框會(huì)不貼底,露出下面的東西,所以在ios12之前的解決辦法就是在評(píng)論框觸發(fā)focus的時(shí)候讓頁(yè)面滾動(dòng)到底部,代碼如下:

const body = document.dcumentElement.scrollTop ? document.documentELement : document.body;
const {scrollHeight, scrollTop} = body;
const innerHeight = Math.min(window.innerHeight, document.documentElement.clientHeight);
body.scrollTop = scrollHeight - innerHeight;

如果輸入框失去焦點(diǎn),就讓頁(yè)面滾動(dòng)到先前的位置。
代碼如下:

body.scrollTop = scrollTop; // 滾動(dòng)到先前的位置

這種方案在ios12上會(huì)出現(xiàn)兩個(gè)問(wèn)題:


  • 如果在頁(yè)面底部吊起輸入框,輸入框會(huì)被鍵盤擋住

  • 如果在頁(yè)面中部,行為會(huì)變得很奇怪,即使我們用了上面的方法,輸入框會(huì)不貼底,眾所周知在輸入的時(shí)候,fixed定位會(huì)生效,即使我們禁用了touchmove事件,還是能夠滾動(dòng)


所以針對(duì)這些問(wèn)題,我先試了網(wǎng)上這種據(jù)說(shuō)通用的解決方法:
scrollIntoView這種方法,但是報(bào)錯(cuò)了,沒(méi)有這個(gè)方法。

然后我自己分析了一下這個(gè)問(wèn)題,出現(xiàn)各種情況的原因是因?yàn)閺棾鲦I盤時(shí),頁(yè)面能夠滾動(dòng),于是就出現(xiàn)了各種問(wèn)題,那干脆讓頁(yè)面無(wú)法滾動(dòng)。ios11及之前使用了下面的布局:

.parent {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    top: 0;
}

并且禁止了touchmove事件,這樣能夠讓頁(yè)面無(wú)法滾動(dòng),但是ios12并沒(méi)有什么卵用。還是能夠滾動(dòng),那咱們就讓內(nèi)容就一屏,多的被截掉。下面是輸入框focus的代碼:

const {scrollHeight,scrollTop} = body;
const innerHeight = Math.min(window.innerHeight, document.documentElement.clientHeight);
body.style.height = `${innerHeight}px`;
body.style.overflow = "hidden";

然后就是輸入框觸發(fā)blur事件時(shí)的代碼:

body.style.height = `${scrollHeight}px`;
body.style.overflow = "auto";
body.style.scrollTop = scrollTop;

在這里需要重新設(shè)置body的高度,高度為之前獲取的scrollHeight,因?yàn)槲覀冃枰匦聺L動(dòng)到先前的位置,建議不要設(shè)置heightauto,因?yàn)樵谝恍﹫?chǎng)景下我們可能需要監(jiān)聽(tīng)滾動(dòng)事件,會(huì)出現(xiàn)其他的問(wèn)題(穩(wěn)戰(zhàn)穩(wěn)打才能打勝仗)。然后重新設(shè)置bodyoverflow,讓頁(yè)面能夠滾動(dòng),最后滾動(dòng)到先前的位置。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/53686.html

相關(guān)文章

  • IOS評(píng)論框不貼底ios12bug

    摘要:在系統(tǒng)中,當(dāng)鍵盤彈起的時(shí)候,會(huì)擠壓頁(yè)面,評(píng)論框會(huì)自然在頂部,但是有個(gè)問(wèn)題就是,下面的評(píng)論框會(huì)不貼底,露出下面的東西,所以在之前的解決辦法就是在評(píng)論框觸發(fā)的時(shí)候讓頁(yè)面滾動(dòng)到底部,代碼如下如果輸入框失去焦點(diǎn),就讓頁(yè)面滾動(dòng)到先前的位置。 結(jié)構(gòu)如下showImg(https://segmentfault.com/img/remote/1460000018217892?w=640&h=960);...

    Wildcard 評(píng)論0 收藏0
  • iOS設(shè)備下,h5的input框失焦后頁(yè)面被頂起來(lái)一部分bug解決

    摘要:在之后,的框失焦后頁(yè)面會(huì)出現(xiàn)被頂上去一部分的下面就來(lái)看下怎么解決這個(gè),首先我們必須知道這兩個(gè)方法軟鍵盤彈起事件軟鍵盤關(guān)閉事件。 在iOS12之后,h5的input框失焦后頁(yè)面會(huì)出現(xiàn)被頂上去一部分的bug,下面就來(lái)看下怎么解決這個(gè)bug,首先我們必須知道這兩個(gè)方法focusin(軟鍵盤彈起事件)、focusout(軟鍵盤關(guān)閉事件)。注意:這里的input框的位置是在頁(yè)面的底部 廢話不多說(shuō)...

    xiguadada 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<