【视频】横屏播放,uniapp,微信小程序,可选择播放速度,暂停和继续播放


javascript 复制代码
<template>
	<view class="form1box u-f">
		<image src="@/static/img/fanhui.png" mode="" class="u-w-25.86 u-h-25.86 u-m-r-21" @click="leftClick"></image>
		
		<view class="content">
			<video id="myVideo"
			class="u-w-460"
			:style="{'height':winheight+'px'}"   
			autoplay
			:src="videosrc"
			object-fit='cover'
			:controls='true'
			:show-fullscreen-btn='false'
			:show-center-play-btn='false'
			:show-play-btn='false'
			@ended='endedFun'
			></video>
		</view>
		<view class="operate u-m-l-12" >
			<view class="u-flex" @click="zhFun">
				<image src="@/static/img/sw1.png" mode="" class="u-w-36.95 u-h-19.4 u-m-r-21.71" v-if="isZH"></image>
				<image src="@/static/img/sw.png" mode="" class="u-w-36.95 u-h-19.4 u-m-r-21.71" v-else></image>
				<text>添加中文朗读</text>
			</view>
			<view class="u-flex" @click="sjFun">
				<image src="@/static/img/suiji.png" mode="" class="u-w-36.48 u-h-36.48 u-m-r-21.24" v-if="issj"></image>
				<image src="@/static/img/zan1.png" mode="" class="u-w-36.48 u-h-36.48 u-m-r-21.24" v-else></image>
				<text> {{issj?'随机播放':'暂停'}}</text>
			</view>
			<view class="u-flex" @click="bofangFun">
				<image src="@/static/img/you.png" mode="" class="u-w-36.48 u-h-36.48 u-m-r-21.24" v-if="isbofang"></image>
				<image src="@/static/img/zan1.png" mode="" class="u-w-36.48 u-h-36.48 u-m-r-21.24" v-else></image>
				<text>{{isbofang?'自动播放':'暂停'}}</text>
			</view>
			<view class="bigbox">
				<view class="scrollbox" v-if="suduShow">
					<view 
					v-for="(item,i) in suduList" :key="i"
					class="u-m-b-10"
					:class="item.choose ? 'ac' :''"
					@click="suduFun(i)"
					>{{item.name}}X</view>
				</view>
				<view @click="suduShow=!suduShow" class="u-flex">
					<view class="sudu u-w-36.95 u-m-r-21.71">{{sudu}}</view>
					<text>播放速度</text>
				</view>
			</view>
			<view class="bigbox">
				<view class="scrollbox" v-if="scrollShow">
					<view 
					v-for="(item,i) in timeList" :key="i"
					class="u-m-b-10"
					:class="item.choose ? 'ac' :''"
					@click="timeFun(i)"
					>{{item.time}}s</view>
				</view>
				
				<view @click="scrollShow=!scrollShow" class="u-flex">
					<view class="sudu u-w-36.95 u-m-r-21.71">{{time}}s</view>
					<text>间隔距离</text>
				</view>
			
			</view>
		</view>
	</view>
</template>

<script>
	// import {
	//   xxx
	//  } from "@/api/index/index.js"
	export default {
		components: {},
		data() {
			return {
				winheight:0,
				videosrc:'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/2minute-demo.mp4', // 视频
				
				scrollShow:false, // 时间间隔默认不显示false
				timeList:[
					{choose:false,time:'1.0'},
					{choose:false,time:'1.5'},
					{choose:false,time:'2.0'},
					{choose:true,time:'2.5'},
					{choose:false,time:'3.0'},
					{choose:false,time:'3.5'},
					{choose:false,time:'4.0'},
					{choose:false,time:'4.5'},
					{choose:false,time:'5.0'},
				],
				time:'2.5' ,// 时间间隔 默认2.5s
				
				suduShow:false, // 播放速度默认不显示false
				suduList:[
					{choose:false,name:'0.25'},
					{choose:false,name:'0.5'},
					{choose:false,name:'0.75'},
					{choose:true,name:'1.0'},
					{choose:false,name:'1.25'},
					{choose:false,name:'1.5'},
					{choose:false,name:'1.75'},
					{choose:false,name:'2.0'},
					{choose:false,name:'2.5'},
				],
				sudu:'1.0' ,//播放速度 默认1.0X
				
				isZH:false, // 是否中文朗读 默认false否
				issj:true, // 是否随机播放 默认true是
				isbofang:true, // 是否自动播放 默认true是
			}
		},
		onLoad(option) {
			let that = this;
			uni.getSystemInfo({
				success: function (res) {
					that.winheight = res.windowHeight - 80;
				}
			});
			this.videoContext = uni.createVideoContext("myVideo", this);
			this.$nextTick(() => {
				this.videoContext.play();
			});
			
		},
		methods: {
			// 选中 时间间隔,自动默认循环和开始播放
			timeFun(i){
				this.suduShow = false; // 速度false
				this.timeList.forEach((item,index) => {
						if(i == index){
							item.choose = true;
							this.time = item.time;
							this.scrollShow = false;
						} else {
							item.choose = false;
						}
				});
			},
			// 选中 速度 
			suduFun(i){
				this.scrollShow = false; // 时间false
				this.suduList.forEach((item,index) => {
						if(i == index){
							item.choose = true;
							this.sudu = item.name;
							this.suduShow = false;
							// 播放速度
							this.videoContext.playbackRate(Number(item.name))
						} else {
							item.choose = false;
						}
				});
			},
			//  当播放到末尾时触发 ended 事件,先暂停再延迟多长时间重新播放
			endedFun(){
				let that = this;
				let a = Number(this.time)*1000;
				
				this.$nextTick(() => {
					this.videoContext.pause();
				});
				
				setTimeout(function() {
						console.log('延迟时间开始播放新的视频',a);
						// that.videoContext.play();
				}, a);
			},
			
			leftClick(){
				uni.navigateBack();
			},
			// 中文朗读
			zhFun(){
				this.isZH = !this.isZH;
			},
			// 随机播放
			sjFun(){
				this.issj = !this.issj;
			},
			// 播放或暂停
			bofangFun(){
				this.isbofang = !this.isbofang;
				if(this.isbofang){
					console.log('播放');
					this.$nextTick(() => {
						this.videoContext.play();
					});
				} else {
					console.log('暂停');
					this.$nextTick(() => {
						this.videoContext.pause();
					});
				}
			},
			
		},
	}
</script>


<style lang='scss' scoped>
	.form1box{
		padding: 40rpx 16rpx 7rpx 40rpx;
		box-sizing: border-box;
		height: 100vh;
		.operate{
			box-sizing: border-box;
			display: flex;
			justify-content: space-around;
			flex-direction: column;
			color: #000000;
			font-size: 12rpx;
			font-family: MicrosoftYaHei;
			padding: 20rpx 0;
			.sudu{
				color: #B0B0B0;
				font-family: Adobe Heiti Std R;
			}
			
			.bigbox{
				position: relative;
			}
			
			.scrollbox{
				box-sizing: border-box;
				position: absolute;
				/* top: -250rpx; */
				bottom:20rpx;
				left: 0rpx;
				background-color: #fff;
				width: 148rpx;
				height: 170rpx;
				overflow: auto;
				border: 1rpx solid #000000;
				color:#B0B0B0;
				font-size: 12rpx;
				font-family: MicrosoftYaHei;
				padding: 9rpx 12rpx;
				.ac{
					color: #000000;
				}
			}
			
		}
	}
</style>
相关推荐
微笑的曙光26 分钟前
第一期 · 本地优先 MVP:不写一个后端,如何做出完整体验
微信小程序
linux_cfan1 小时前
videojs v10 源代码系列解读:10 · `DestroyMixin`:双重 rAF 延迟销毁
前端·javascript·音视频
EatFan1 小时前
Java接入微信支付保姆式教程(三):SpringBoot 接入微信支付并完成统一下单
微信小程序·微信支付·springboot
QQ_21696290963 小时前
基于SpringBoot+Vue的小生活平台的设计与实现
java·数据库·vue.js·spring boot·spring·微信小程序·生活
飞梦工作室3 小时前
H5页面能否直接播放视频号直播?实战方案与踩坑总结
微信小程序·小程序
云上先途19 小时前
标签化服务适合哪些人?常见适用场景一次讲清
大数据·人工智能·算法·音视频
2601_9623807619 小时前
MoneyPrinterTurbo 本地部署与出片全流程:从环境配置到一键生成短视频
音视频
StevenLdh19 小时前
情绪小恐龙:一个微信小程序从架构设计到部署上线的全记录
微信小程序·小程序·notepad++
可乐鸡翅yeah_21 小时前
HLS视频编码兼容性全解,H.264/H.265流媒体浏览器适配排错实战
音视频·firefox·safari·m3u8
FlightYe1 天前
音视频修炼之编码器(一):AVC、HEVC编码器内部
android·linux·c++·音视频