彈出 fixed 彈窗後,在彈窗上滑動會致使下層的頁面一塊兒跟着滾動。vue
場景一:彈窗內無滾動內容微信
能夠在彈窗最外層元素綁定touchmove事件,觸發事件返回false即(在vue類框架中也能夠加.stop阻止冒泡)。框架
簡單寫法:catchtouchmove='preventTouchMove',在js文件中定義一個方法preventTouchMove() { return } 便可。函數
此種方式會阻止彈窗內內容的滾動。spa
場景二:彈窗內有滾動內容code
在彈窗外層根元素動態添加一個no-scroll樣式,定義no-scroll爲{height: 100%; overflow: hidden;}xml
當須要阻止滑動的彈窗顯示時添加no-scroll,彈窗關閉去掉no-scroll便可。blog
此種方式的缺點是當彈窗顯示增長no-scrll後彈窗下面的頁面會回到頂部。事件
場景三:get
WXML
將整個底層頁面使用 scroll-view 包裹起來,設置 scroll-y 當顯示彈出層的時候爲 true, 閉關彈出層的時候爲 false
<scroll-view scroll-y="{{showModalStatus?'true':'false'}}" style="height:{{windowHeight}}px"
> </scroll-view>
WXSS
Page 設置爲絕對定位,寬高各百分之百 , scroll-view 高度 百分之百
Page{ position: absolute; width: 100%; height: 100%; display: block; overflow-y: hidden; } .scroll-view { height: 100%; }
JS
data {
windowHeight: wx.getSystemInfoSync().windowHeight,
showModalStatus: false
},
JS 控制 showModalStatus 的開關。
不過這引入了新的問題,沒法觸發 onReachBottom 頁面上拉觸底和下拉刷新事件的處理函數
不介意的話可使用 scroll-view 的 bindscrolltolower 進行解決 bindscrolltolower 方法觸發 onReachBottom(), 用scroll-view 的bindscrolltoupper進行解決 bindscrolltoupper方法觸發onPullDownRefresh()
WXML
<scroll-view bindscrolltolower='bindscrolltolower'
scroll-y="{{showModalStatus?'true':'false'}}" style="height:{{windowHeight}}px"
> </scroll-view>
JS
data {
},
bindscrolltolower:function(){ console.log('bindscrolltolower') var page = getCurrentPages().pop() console.log(page) page.onReachBottom() },
親測有效,有問題能夠聯繫我:
QQ:412606846(微信同號)