最近小龙宝宝相册改版了几次,发现小程序每次进来都是自动加载所有的video,即便用户并不打算看,这样就无端的浪费掉了很多流量。原来的代码如下:

<video src="{{resource.url}}" poster="{{resource.cover_url}}" play-btn-position=\'center\' objectFit="contain" controls duration="{{resource.duration}}"></video>

后来尝试动态设置src属性,在电脑上调试没问题,但是到手机上真机调试就不行了,直接显示黑屏,点击后data里面是改好的,但是视图层就是没反应。代码如下:

<!-- 当点击video组件的时候把url_lazy设置成真实的url -->

<video src="{{resource.url_lazy}}" poster="{{resource.cover_url}}" play-btn-position=\'center\' objectFit="contain" controls duration="{{resource.duration}}" bindtap="startPlay"></video>
startPlay(e){
    var resource = this.data.resource
    resource.url_lazy = resource.url
    this.setData({
        resource: resource
    })
}

继续探索别的办法,尝试在video上覆盖一层封面图,然后点击的时候再把video组件渲染出来,再添加一个autoplay,这次终于成功了,代码如下:

<video src="{{resource.url}}" poster="{{resource.cover_url}}" play-btn-position=\'center\' objectFit="contain" controls autoplay duration="{{resource.duration}}" wx:if=\'{{videoShow}}\'></video>

<image src="{{resource.cover_url}}" mode="aspectFill"  wx:if="{{!videoShow}}" bindtap=\'startPlay\'></image>

<view class="play-button-div" bindtap=\'startPlay\' wx:if="{{!videoShow}}">
    <view class="play-button">
            <image src="../../images/play.png"></image>
        </view>
</view>
startPlay(e){
    var videoShow = this.data.videoShow 
    videoShow = true
    this.setData({
        videoShow: videoShow 
    })
}