「頁面滾動穿透」記錄

??最近在做小程序項(xiàng)目的時(shí)候,因?yàn)橐粋€(gè)彈窗滾動事件,造成了「頁面穿透」。簡單解釋一下這個(gè)現(xiàn)象,就是底部頁面是一個(gè)可以滾動的頁面,有一個(gè)絕對定位為fixed的彈窗,這個(gè)彈窗內(nèi)也是可以滾動的,然后在我們滾動彈窗的時(shí)候,發(fā)現(xiàn)彈窗內(nèi)和底部內(nèi)容都一起滾動,這顯然不是我們想要的效果。效果如下圖:

真機(jī)上頁面滾動穿透

??這是為啥呢?我們想要的效果應(yīng)該是滾動彈窗的時(shí)候,不會影響外層的滾動,這就是「頁面滾動穿透」了,我上網(wǎng)查了下,似乎。。。。這是微信小程序的BUG,是一個(gè)大坑。。。不過還是有一些解決方法的。

<!--index.wxml-->
<view class="outer-content">
  outer contentouter contentouter contentouter contentouter contentouter contentouter contentouter content
  <view class="inner-content">
    inner-content inner-content inner-content inner-content inner-content inner-contentinner-content inner-content inner-contentinner-content inner-content inner-contentinner-content inner-content inner-content
    inner-content inner-content inner-content inner-content inner-content inner-contentinner-content inner-content inner-contentinner-content inner-content inner-contentinner-content inner-content inner-content
    inner-content inner-content inner-content inner-content inner-content inner-contentinner-content inner-content inner-contentinner-content inner-content inner-contentinner-content inner-content inner-content
  </view>
</view>

同時(shí)我們也記錄下在「微信開發(fā)者工具」上的效果。上拉彈出層的內(nèi)容,只有在彈出層觸底后,才會在底層頁面進(jìn)行滑動,并且不影響彈出層內(nèi)滑動。


「微信開發(fā)者工具」效果

然后網(wǎng)上搜索總結(jié)了下解決方案:
方案一:增加「catchtouchmove」屬性
??這種情況下是在「inner」層增加一個(gè)「catchtouchmove」。不過增加后,在彈窗層滑動,發(fā)現(xiàn)彈窗層和底層頁面都不能滑動,所以此方案適合:彈窗層不需要滑動的情況。

方案二:可以在彈出層出現(xiàn)的時(shí)候,給底層增加一個(gè)class,然后彈出層消失的時(shí)候去除這個(gè)class。
??這個(gè)class的主要特點(diǎn)就是將底層設(shè)置了一個(gè)絕對定位fixed。但是這里有個(gè)bug,就是如果底層滑動了一部分,彈出層出現(xiàn)后,底層會跳回頂部。這個(gè)就很不友好了,因?yàn)槲覀兿胍氖菑棾鰧映霈F(xiàn),底部沒有變化也不能滑動。
樣式和效果圖如下:

.tripList_root {
  top:0px;

  left: 0px;

  width: 100%;

  height: 100%;

  overflow: hidden;

  position: fixed;

  z-index: 0;
}
真機(jī)上底層彈回頂部效果圖

「微信開發(fā)者工具」和真機(jī)上效果相同。

方案三:使用<scroll-view>標(biāo)簽
??為了達(dá)到理想效果,后來發(fā)現(xiàn)「scroll-view」標(biāo)簽是可以實(shí)現(xiàn)的。同時(shí)記得加上「scroll-y」屬性,就可以上下滑動了,效果如下。

使用「scroll-view」標(biāo)簽的效果

不過在「微信開發(fā)者工具」上效果不同,在彈出層滑到頂部或者底部,再次滑動則會影響到底部頁面。效果如下:


使用<scroll-view>標(biāo)簽后,在「微信開發(fā)者工具」中效果.gif

以上是我對小項(xiàng)目完成一個(gè)功能時(shí)的記錄,但是同樣引起了我的思考。

問題一:在彈出層添加屬性「catchtouchmove」,明明是為了防止彈出層的「touchmove」冒泡影響到底層的滑動,而且彈出層的內(nèi)容是超出顯示區(qū)域的,為啥彈出層不能滑動了?
??答:還是自己對「catchtouchmove」的認(rèn)知不夠全面,查詢資料和對實(shí)際效果的認(rèn)識之后,「catchtouchmove」應(yīng)該不僅會阻止事件的冒泡,還會阻止事件的默認(rèn)行為,相當(dāng)于preventDefault.所以彈出層不能滑動了。

問題二:既然微信小程序有「頁面滾動穿透」的坑,其他頁面是不是也有呢?于是開始嘗試手機(jī)端的web頁面。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,091評論 1 92
  • 這次迭代我們做一個(gè) “老帶新” 的活動頁,總共分為 活動主頁、分享登記頁、邀請記錄頁、分享海報(bào)頁。我本人就使用了當(dāng)...
    你若像風(fēng)閱讀 1,007評論 0 3
  • 許多桌面軟件都采用內(nèi)滾動布局,交互性比較強(qiáng)的的web頁面(如:各種后臺管理系統(tǒng))進(jìn)行桌面軟件化可以使得交互操作更加...
    咚門閱讀 1,307評論 0 13
  • 一般 H5 常見的活動頁,如果當(dāng)前頁面超過一屏,同時(shí)在當(dāng)前頁面顯示彈窗,整個(gè)頁面依舊可以滾動 1.功能 常見的活動...
    Johnson杰閱讀 1,154評論 0 0
  • 經(jīng)過了兩個(gè)星期,接觸了關(guān)于學(xué)習(xí)知識的方面和一些課程。我現(xiàn)在終于發(fā)現(xiàn)了好學(xué)生和學(xué)生學(xué)習(xí)不太好的差別,也終于知...
    璃魅閱讀 272評論 0 0

友情鏈接更多精彩內(nèi)容