本文首發於個人我的博客: http://www.fogcrane.org
在微信小程序的開發中,總有一些「VIP」組件,他們的層級,高得讓人抓狂,老是凌駕於不少其餘低層級組件之上。
諸如:video組件、map組件、canvas組件等。如今就讓我來說講如何巧妙的解決掉這個問題。css
因爲視頻組件層級太高而且沒法使用z-index進行控制層級,致使許多人都沒法在視頻組件之上放置一些其餘的組件。
爲此,一些漂亮的視頻設計每每還沒開始就宣告告終束。上一張官方文檔的相關說明:
canvas
解決思路其實也挺簡單的。今天就暫且不宣揚愚公移山的精神了,咱們今天選擇繞過眼前的大山。既然視頻層級很高
很高,而且咱們不能下降視頻層級或者提高其餘組件層級已覆蓋視頻組件。那麼咱們就選擇只在恰當的時候才讓視頻
組件出如今咱們的頁面中。那麼問題就顯得簡單起來了。思路大體以下:小程序
接下來直接上代碼了:
首先是wxml的代碼:微信小程序
<!--index.wxml--> <view> <view class="margin_bottom--100" wx:for="{{items}}" wx:key="unique"> <view class="video-container"> <view class="video" data-id="{{item.id}}" bindtap="videoPlay" > <video wx:if="{{curr_id == item.id}}" id="myVideo" style="width: 750rpx;height: calc(9 * 750rpx / 16);" id="myVideo" src="{{item.src}}" poster="{{item.poster}}" objectFit="cover" controls></video> <view wx:else > <image class="model-img" style="width: 750rpx;height: calc(9 * 750rpx / 16);" mode="aspectFill" src="{{item.poster}}"></image> <view class="model-btn"> <view class="play-icon"></view> </view> </view> </view> </view> </view> <view class="text"> <text>我是遮擋層。</text> </view> </view>
接着是js的代碼:微信
//index.js Page({ data: { curr_id: '', //當前打開的視頻id items: [ { id: 1, src: 'https://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400', poster: 'http://ow74m25lk.bkt.clouddn.com/shilan.jpg' }, { id: 2, src: 'https://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400', poster: 'http://ow74m25lk.bkt.clouddn.com/shilan.jpg' }, { id: 3, src: 'https://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400', poster: 'http://ow74m25lk.bkt.clouddn.com/shilan.jpg' }, { id: 4, src: 'https://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400', poster: 'http://ow74m25lk.bkt.clouddn.com/shilan.jpg' }, ], }, onReady: function () { //建立視頻上下文對象 this.videoContext = wx.createVideoContext('myVideo') }, videoPlay(e) { this.setData({ curr_id: e.currentTarget.dataset.id, }) this.videoContext.play() } })
最後是css的代碼:xss
/*index.wxss*/ .video{ margin-bottom: 40rpx; position: relative; } .model-img{ width: 100%; height: 420rpx; } .model-btn{ position:absolute; left:0; top:0; bottom:0; right:0; margin:auto; width:100rpx; height:100rpx; border-radius:50%; background-color: rgba(0,0,0,.3); } .play-icon{ margin:28rpx 42rpx; border-top:26rpx solid transparent; border-left:36rpx solid #fff; border-bottom:22rpx solid transparent; } .text{ width: 100%; height: 100rpx; line-height: 100rpx; text-align: center; background-color: red; color: #fff; position: fixed; bottom: 0; }
以上,就是所有代碼了,附上運行結果圖:
ide
自定義視頻組件代碼,密碼爲30s3post
好看的皮囊千篇一概,有趣的靈魂萬里挑一。祝各位都是有趣的程序媛/猿。嗨起來٩(๑❛ᴗ❛๑)۶this