本文首发于个人我的博客: 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