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

資訊專欄INFORMATION COLUMN

Issues with position fixed & scroll(移動(dòng)端 fixed

ZoomQuiet / 1097人閱讀

摘要:同時(shí),請(qǐng)?jiān)谄渌苿?dòng)端瀏覽器也這么處理,不要只對(duì)蘋果做這些處理。蘋果對(duì)于虎頭蛇尾的做法真讓人頭疼,這作風(fēng)跟巨硬真像。

轉(zhuǎn)載請(qǐng)注明英文原文及譯文出處

原文地址:Issues with position fixed & scrolling on iOS
原文作者:Remy Sharp
譯文地址:移動(dòng)端 fixed 和 scroll 問(wèn)題
譯文作者:鎏金圣手火麒麟

最近在做iOS端的H5頁(yè)面時(shí),遇到了一個(gè)定位問(wèn)題:
1、position: fixed 元素在頁(yè)面滾動(dòng)時(shí)屬性值變?yōu)閍bsolute,在頁(yè)面停止?jié)L動(dòng)瞬間,才恢復(fù)fixed;
2、當(dāng)使用 fixed 定位的元素,存在于進(jìn)行滾動(dòng)的容器元素內(nèi)時(shí),拖動(dòng)容器元素會(huì)使出現(xiàn)閃動(dòng)問(wèn)題。

在尋求解決方案的過(guò)程中,看到了這一篇文章,對(duì)這個(gè)問(wèn)題的原因解釋得不錯(cuò),故翻譯過(guò)來(lái),供大家參考。
翻譯的過(guò)程中,對(duì)原文小標(biāo)題做了修改,方便大家閱讀。
翻譯不對(duì)的地方,也可以在評(píng)論中幫忙指出,謝謝。

以下是譯文:

隨著iOS 5的發(fā)布,fixed 定位據(jù)說(shuō)將會(huì)支持移動(dòng)端Safari。

當(dāng)然,這個(gè)說(shuō)法并不一定是真的,因?yàn)樵谙挛闹形覍⒔o大家展示各種各樣的bug。

順帶一提,在iOS 5的測(cè)試階段,我已經(jīng)向蘋果的bug報(bào)告工具上傳了一些bug,但天知道這個(gè)工具是怎么運(yùn)行的,所以我不知道這些問(wèn)題的編號(hào)(此處有爭(zhēng)議,原文:the issue numbers)。

更新:基于 Corey Duston 指出關(guān)于 position fixed 的更多bug,我已經(jīng)添加了 "scrolling == unusable position:fixed element"模塊。
position:fixed, who cares?

我認(rèn)為對(duì)于一個(gè)好的app而言,不一定非要使用到 fixed 定位。但是,我也注意到有越來(lái)越多的 iOS app 開始使用 fixed 定位的工具欄,比如 mini-MobileSafaris,蘋果應(yīng)用商店的原生 Facebook app 和 Instagram。



AppStore via @devongovett, Facebook via @9eggs

問(wèn)題

我已經(jīng)創(chuàng)建了一些示例頁(yè)面,方便大家自行查看。(以下視頻來(lái)自油管,需要梯子)

問(wèn)題1:抖動(dòng)

如果你將 position: fixed 用任何正常的方式添加到桌面級(jí)頁(yè)面中,你就會(huì)在滑動(dòng)頁(yè)面的時(shí)候,看到一定程度的抖動(dòng)問(wèn)題。

視頻鏈接:https://www.youtube.com/embed/yps8Ea5GO4I?fs=1&feature=oembed

請(qǐng)注意這是在模擬器上出現(xiàn)了該bug,但我同樣在 iPhone 真機(jī)上捕獲了相同的bug。
模擬地址:http://jsbin.com/3/ixewok/6/

問(wèn)題2:滑動(dòng)時(shí)無(wú)法更新數(shù)據(jù)

眼尖的小伙伴可能已經(jīng)發(fā)現(xiàn)了視頻中的某些值發(fā)生了變化。我監(jiān)控了 window.scrollTopwindow.pageYOffset(還有另一個(gè)值將會(huì)在下文提到)。你會(huì)注意到這兩個(gè)值只有在頁(yè)面滑動(dòng)完全停止后才會(huì)發(fā)生變化。

當(dāng)你想要在通訊錄APP中模擬碰撞和分流式頭部目錄時(shí),這就是個(gè)問(wèn)題了。
(這句翻譯的不好,原文:This is a problem if you want to monitor the page position to simulate effects like the bumping and shunting of category headings like you might see in the address book app.)

問(wèn)題3:位置漂移

如果頁(yè)面被放大到最大倍數(shù),比如在 iOS 上,當(dāng)用戶將頁(yè)面從縱向旋轉(zhuǎn)到橫向后,再進(jìn)行任何比例超過(guò)1的縮放操作(比例放大),定位元素就會(huì)向上漂移。(我曾在其他網(wǎng)站見過(guò)元素徹底漂移出視窗的情況)

視頻鏈接:https://www.youtube.com/embed/YIOdPf7jqK4?fs=1&feature=oembed
模擬地址:http://jsbin.com/3/ixewok/6/

問(wèn)題4:獲取焦點(diǎn)后跳躍

如果在 fixed 定位的元素中存在一個(gè)可以獲取焦點(diǎn)的元素,比如 input 元素,這就有可能導(dǎo)致整個(gè) fixed 元素跳到其他地方。這種情況只會(huì)在用戶滑動(dòng)頁(yè)面的時(shí)候出現(xiàn)(如果這正是你想要的效果,那當(dāng)我沒(méi)說(shuō) XD)。

視頻地址:https://www.youtube.com/embed/lrnvZDwgJRc?rel=0
模擬地址:http://jsbin.com/3/ixewok/8/

問(wèn)題5:Scrolling == 無(wú)法使用的 position: fixed 元素

Corey Dutson指出還有另一個(gè)與 fixed 有關(guān)的bug。盡管在他的示例中滾動(dòng)是通過(guò)JavaScript來(lái)實(shí)現(xiàn),但核心問(wèn)題是:如果頁(yè)面是由腳本控制移動(dòng),那么在移動(dòng)之后,fixed 定位的元素將不可使用。

從截屏中我已經(jīng)做了記錄,你可以通過(guò)iWebInspector看到,盡管 MobileSafari 已經(jīng)在位置上渲染了 fixed 定位的元素,但它實(shí)際上并不在應(yīng)該在的位置。當(dāng)你再次觸碰和移動(dòng)頁(yè)面時(shí),真正的元素才會(huì)保持在正確的位置上。

視頻地址:https://www.youtube.com/embed/R2MzdeJSCKw?fs=1&feature=oembed
模擬地址:http://jsbin.com/3/ixewok/13/

盡管我還沒(méi)有找到這個(gè)bug的解決辦法,并且我覺(jué)得可能這是 MobileSafari 自身的渲染問(wèn)題,不過(guò)我還是會(huì)繼續(xù)看看是否有辦法解決。

解決抖動(dòng)

隨著 iOS 5 的發(fā)布,MobileSafari 同樣支持了 -webkit-overflow-scrolling: touch。這實(shí)際上是用于頁(yè)面內(nèi)容的行內(nèi)塊元素(這句不知如何翻譯:I mean inline with respect to the document)。

如果我在前文的示例中改變 css,并且設(shè)置 html、body、內(nèi)容塊的高度為100%,然后將 scrolling touch 屬性應(yīng)用到內(nèi)容上,那么抖動(dòng)就會(huì)消失了。然而,這并不能徹底解決問(wèn)題。

有個(gè)巧妙的辦法是這樣的:確保使用 fixed 定位的元素不是一個(gè)“移動(dòng)畫布”。這個(gè)示例展示了一個(gè) fixed 元素放置在一個(gè)滾動(dòng)元素的上方,但在dom結(jié)構(gòu)中,它并不是滾動(dòng)元素的子級(jí)。

所以當(dāng)我嘗試將這個(gè)辦法用在 body 元素上時(shí),抖動(dòng)問(wèn)題還是存在,因?yàn)?fixed 定位元素仍然位于滾動(dòng)元素內(nèi)。

視頻地址:https://www.youtube.com/embed/suXz5dKtlcA?rel=0

我同樣在真機(jī)上捕獲了這個(gè)問(wèn)題:點(diǎn)擊這里。

模擬地址:http://jsbin.com/3/ixewok/10/

滾動(dòng)位置更新

再來(lái)一次,仔細(xì)的小伙伴應(yīng)該也注意到了某些值又發(fā)生了改變。請(qǐng)注意,由于我已經(jīng)更改了CSS,因此 body 不再滾動(dòng),所以左右的 0 值分別對(duì)應(yīng) window.scrollTopwindow.pageYOffset。當(dāng)窗口不可滑動(dòng)時(shí),內(nèi)容塊處于溢出狀態(tài),值也就不會(huì)改變。

但是,content.scrollX 的值仍在變化——但這不是默認(rèn)的。

首先,你需要添加觸摸事件,用來(lái)在用戶滑動(dòng)(或者觸摸)時(shí)更新該值,所以在 JavaScript 中我可以添加:

content.ontouchstart = function() {};

touch 事件會(huì)發(fā)生在 start, end, move三個(gè)階段,并且只需要一個(gè)值集(翻譯的不好:a value set)。
(請(qǐng)注意,我并沒(méi)有嘗試直接將其設(shè)置為 true——這可能也能起作用)。

然而,這依然是不完美的。你可以在上面的視頻中看到,值只會(huì)在我觸摸的時(shí)候更新。當(dāng)我的手指離開屏幕,讓頁(yè)面慣性滾動(dòng)時(shí),值就不會(huì)更新了。

我仍會(huì)繼續(xù)嘗試有沒(méi)有可能獲取該值(無(wú)奈……)

總結(jié) / TL;DR

1、不要在滾動(dòng)元素內(nèi)部使用 position: fixed,否則它會(huì)出現(xiàn)抖動(dòng)bug并且看起來(lái)很糟糕(我曾見過(guò)比視頻中抖動(dòng)得更瘋狂的情況)。
2、確保使用 -webkit-overflow-scrolling: touch
3、如果你想要獲取 scroll 的相關(guān)值,請(qǐng)確保你在滾動(dòng)元素上添加了 touch 的監(jiān)聽事件。

同時(shí),請(qǐng)?jiān)谄渌苿?dòng)端瀏覽器也這么處理,不要只對(duì)蘋果做這些處理。蘋果對(duì)于 position: fixed 虎頭蛇尾的做法真讓人頭疼,這作風(fēng)跟巨硬真像。

Posted 24-May 2012

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

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

相關(guān)文章

  • Issues with position fixed & scroll移動(dòng) fixed

    摘要:同時(shí),請(qǐng)?jiān)谄渌苿?dòng)端瀏覽器也這么處理,不要只對(duì)蘋果做這些處理。蘋果對(duì)于虎頭蛇尾的做法真讓人頭疼,這作風(fēng)跟巨硬真像。 轉(zhuǎn)載請(qǐng)注明英文原文及譯文出處 原文地址:Issues with position fixed & scrolling on iOS 原文作者:Remy Sharp譯文地址:移動(dòng)端 fixed 和 scroll 問(wèn)題 譯文作者:鎏金圣手火麒麟 最近在做iOS端的H5頁(yè)面...

    Jiavan 評(píng)論0 收藏0
  • 移動(dòng)滾動(dòng)穿透問(wèn)題完美解決方案

    摘要:?jiǎn)栴}眾所周知,移動(dòng)端當(dāng)有遮罩背景和彈出層時(shí),在屏幕上滑動(dòng)能夠滑動(dòng)背景下面的內(nèi)容,這就是著名的滾動(dòng)穿透問(wèn)題之前搜索了一圈,找到下面兩種方案之頁(yè)面彈出層上將添加到上,禁用和的滾動(dòng)條但是這個(gè)方案有兩個(gè)缺點(diǎn)由于和的滾動(dòng)條都被禁用,彈出層 問(wèn)題 眾所周知,移動(dòng)端當(dāng)有 fixed 遮罩背景和彈出層時(shí),在屏幕上滑動(dòng)能夠滑動(dòng)背景下面的內(nèi)容,這就是著名的滾動(dòng)穿透問(wèn)題 之前搜索了一圈,找到下面兩種方案 c...

    sewerganger 評(píng)論0 收藏0
  • 移動(dòng) Modal 組件開發(fā)雜談

    摘要:網(wǎng)上谷歌一下滾動(dòng)穿透關(guān)鍵字其實(shí)可以發(fā)現(xiàn)很多種解決方案,每個(gè)方案也各有優(yōu)缺點(diǎn),但我們選擇的解決方案是團(tuán)隊(duì)的一姐一篇移動(dòng)端體驗(yàn)優(yōu)化的博文中得到的啟示博文地址花式提升移動(dòng)端交互體驗(yàn)。 Vant 是有贊開發(fā)的一套基于 Vue 2.0 的 Mobile 組件庫(kù),在開發(fā)的過(guò)程中也踩了很多坑,今天我們就來(lái)聊一聊開發(fā)一個(gè)移動(dòng)端 Modal 組件(在有贊該組件被稱為 Popup )需要注意的一些坑。 在...

    learn_shifeng 評(píng)論0 收藏0
  • WEB移動(dòng)粘黏吸頂效果的解決方案

    摘要:原文鏈接一般的吸頂,通常是給上一個(gè)定位便可實(shí)現(xiàn),而類似于上圖這樣的粘黏吸頂,也是一個(gè)比較常見的需求粘黏吸頂大概的思路是這樣首先,給吸頂欄一個(gè)或者定位,通過(guò)去監(jiān)聽事件觸發(fā)一個(gè)判斷吸頂欄高度的函數(shù),當(dāng)吸頂欄的高度距離可視區(qū)域頂部小于等于時(shí),將其 原文鏈接: Fyerls Blog showImg(https://segmentfault.com/img/bVJMAs?w=360&h=240...

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

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

0條評(píng)論

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