欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

创意实现!在 uni-app 小程序产品详情页轮播中嵌入视频播放功能

最编程 2024-09-30 08:02:56
...
<template> <view class='product-bg'> <swiper :indicator-dots="indicatorDots" indicator-active-color="#E93323" :autoplay="autoplay" :circular="circular" :interval="interval" :duration="duration" @change="change"> <swiper-item v-if="videoline"> <view class="item"> <view v-if="!controls" style="width:100%;height:100% "> <video id="myVideo" :src='videoline' objectFit="cover" controls style="width:100%;height:100% " show-center-play-btn show-mute-btn="true" auto-pause-if-navigate :custom-cache="false" :enable-progress-gesture="false" :poster="imgUrls[0]" @pause="videoPause"></video> </view> <view class="poster" v-if="controls"> <image class="image" :src="imgUrls[0]"></image> </view> <view class="stop" v-if="controls" @tap="bindPause"> <image class="image" src="../../static/images/stop.png"></image> </view> </view> </swiper-item> <block v-for="(item,index) in imgUrls" :key='index'> <swiper-item> <image :src="item" class="slide-image" /> </swiper-item> </block> </swiper> </view> </template> <script> export default { props: { imgUrls: { type: Array, default: function() { return []; } }, videoline: { type: String, value: "" } }, data() { return { indicatorDots: true, circular: true, autoplay: true, interval: 3000, duration: 500, currents: "1", controls: true, isPlay: true, videoContext: null }; }, mounted() { if (this.videoline) { this.imgUrls.shift() this.videoContext = uni.createVideoContext('myVideo', this); // 创建videoContext } }, methods: { videoPause(e) {}, bindPause: function() { if (this.videoContext) { this.videoContext.play(); // 调用play方法 this.$set(this, 'controls', false); this.autoplay = false; } }, change: function(e) { this.$set(this, 'currents', e.detail.current + 1); } } } </script> <style scoped lang="scss"> .product-bg { width: 100%; height: 750rpx; position: relative; } .product-bg swiper { width: 100%; height: 100%; position: relative; } .product-bg .slide-image { width: 100%; height: 100%; } .product-bg .pages { position: absolute; background-color: #fff; height: 34rpx; padding: 0 10rpx; border-radius: 3rpx; right: 30rpx; bottom: 30rpx; line-height: 34rpx; font-size: 24rpx; color: #050505; } #myVideo { width: 100%; height: 100% } .product-bg .item { position: relative; width: 100%; height: 100%; } .product-bg .item .poster { position: absolute; top: 0; left: 0; height: 750rpx; width: 100%; z-index: 9; } .product-bg .item .poster .image { width: 100%; height: 100%; } .product-bg .item .stop { position: absolute; top: 50%; left: 50%; width: 136rpx; height: 136rpx; margin-top: -68rpx; margin-left: -68rpx; z-index: 9; } .product-bg .item .stop .image { width: 100%; height: 100%; } </style>