🧑💻 寫在開頭
點贊 + 收藏 === 學會🤣🤣🤣
1.web-view覆蓋層問題
問題由來
web-view
是一個 web 瀏覽器元件,可以用來承載網頁的容器,會自動鋪滿整個頁面。
所以這得多噁心。。。不僅鋪滿,還覆蓋了普通的標籤,調z-index都無解。
解決辦法
web-view內部使用cover-view
,調整cover-view的樣式即可覆蓋在web-view上。
cover-view
覆蓋在原生元件上的文字檢視。
app-vue和小程式框架,渲染引擎是webview的。但為了最佳化體驗,部分元件如map、video、textarea、canvas透過原生控制元件實現,原生元件層級高於前端元件(類似flash層級高於div)。為了能正常覆蓋原生元件,設計了cover-view。
支援的平臺:
具體實現
<template> <view> <web-view :src="viewUrl" v-if="viewUrl" > <cover-view class="close-view" @click="closeView()"> <cover-image class="close-icon" src="../../static/design/close-icon.png"></cover-image> </cover-view> </web-view> </view> </template>
.close-view{ position: fixed; z-index: 99999; top: 30rpx; left: 45vw; .close-icon{ width: 100rpx; height: 80rpx; } }
程式碼說明:
這裡的案例是一個關閉按鈕圖示懸浮在webview上,點選圖示可以關閉當前預覽的webview。
注意
僅僅真機上才生效,開發者工具上是看不到效果的,如果要調整覆蓋層的樣式,可以先把web-view標籤註釋了,寫完樣式沒問題再釋放web-view標籤。
2.web-view導航欄返回
問題由來
- 小程式端 web-view 元件一定有原生導航欄,下面一定是全屏的 web-view 元件,navigationStyle: custom 對 web-view 元件無效。
場景
使用者在巢狀的webview裡填寫表單,不小心按到導航欄的返回了,就全沒了。
解決辦法
使用page-container容器,點選到返回的時候,給個提示。
page-container
頁面容器。
小程式如果在頁面內進行復雜的介面設計(如在頁面內彈出半屏的彈窗、在頁面內載入一個全屏的子頁面等),使用者進行返回操作會直接離開當前頁面,不符合使用者預期,預期應為關閉當前彈出的元件。 為此提供“假頁”容器元件,效果類似於 popup
彈出層,頁面記憶體在該容器時,當使用者進行返回操作,關閉該容器不關閉頁面。返回操作包括三種情形,右滑手勢、安卓物理返回鍵和呼叫 navigateBack
介面。
具體實現
<template> <view> <web-view :src="viewUrl" v-if="viewUrl" > <cover-view class="close-view" @click="closeView()"> <cover-image class="close-icon" src="../../static/design/close-icon.png"></cover-image> </cover-view> </web-view> <!--這裡這裡,就這一句--> <page-container :show="isShow" :overlay="false" @beforeleave="beforeleave"></page-container> </view> </template> export default { data() { return { isShow: true } }, methods: { beforeleave(){ this.isShow = false uni.showToast({ title: '別點這裡', icon: 'none', duration: 3000 }) } } }
結語
算是小完美的解決了吧,這裡記錄一下,看看就行,勿噴。
連夜更新安卓cover-view失效問題
由於之前一直用ios測試的,今晚才發現這個問題
解決辦法
cover-view, cover-image{ visibility: visible!important; z-index: 99999; }
如果對您有所幫助,歡迎您點個關注,我會定時更新技術文件,大家一起討論學習,一起進步。