【音视频】 视频的播放和暂停,当播放到末尾时触发 ended 事件,循环播放,播放速度

news2025/1/17 2:55:26

在这里插入图片描述

video 也可以 播放 MP3 音频,当不想让 视频显示出来的话,可以 给 video 设置宽和高 1rpx ,不可以隐藏

<template>
	<view class="form2box">
		<u-navbar  @leftClick="leftClick">
			<view slot="left">
				<image src="@/static/img/fanhui.png" mode="" class="u-w-56 u-h-56" ></image>
			</view>
		</u-navbar>
		<view class="content">
			<video id="myVideo" 
			class="u-w-714"
			autoplay
			:style="{'height':winheight+'px'}"   
			:src="videosrc"
			object-fit='cover'
			:controls='true'
			:show-fullscreen-btn='false'
			:show-center-play-btn='false'
			:show-play-btn='false'
			:loop='loop'
			@ended='endedFun'
			></video>
			<!-- 暂停 图标TODO..-->
			<image src="@/static/img/zan1.png" mode="" class="anniu" @click="playFun(1)" v-if="item == 0"></image>
			<!-- 播放 -->
			<image src="@/static/img/you.png" mode="" class="anniu" @click="playFun(0)" v-if="item == 1"></image> 
		</view>
		<view class="fixbox">
			<!-- 图标TODO..  -->
			<view class="flex_col flex_between" @click="loopFun">
				<image src="../../static/img/zan1.png" mode="" class="u-w-134 u-h-134"  v-if="loop"></image>
				<image src="../../static/img/xunhuan.png" mode="" class="u-w-134 u-h-134" v-else></image>
				<view class="text"> {{loop ? '暂停' : '循环播放'}}</view>
			</view>
			<view class="you ">
				<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 class="flex_col flex_between" @click="scrollShow=!scrollShow">
					<view class="miao">{{time}}s</view>
					<view class="text">间隔距离</view>
				</view>
			</view>
		</view>
	</view>
</template>

<script>
	// import {
	//   xxx
	//  } from "@/api/index/index.js"
	export default {
		components: {},
		data() {
			return {
				winheight:0,
				item:1, // 1默认播放 0暂停
				videosrc:'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/2minute-demo.mp4', // 视频
				videoContext:'',
				loop:true, // 是否循环播放 默认true是
				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
			}
		},
		onLoad(option) {
			let that = this;
			uni.getSystemInfo({
				success: function (res) {
					// deviceOrientation获取到设备方向,横屏还是竖屏
					that.winheight = res.windowHeight - 240;
				}
			});
			this.videoContext = uni.createVideoContext("myVideo", this);
			// 播放速度
			// this.videoContext.playbackRate(Number(2.0))
		},
		methods: {
			playFun(num){
				this.item = num;
				if(num == 1){
					console.log('播放');
					this.$nextTick(() => {
						this.videoContext.play();
					});
				} else {
					console.log('暂停');
					this.$nextTick(() => {
						this.videoContext.pause();
					});
				}
			},
			// 是否循环播放
			loopFun(){
				this.loop = !this.loop;
				console.log(this.loop,'循环播放')
				if(this.item == 1 &&this.loop){
					this.videoContext.play();
				}
			},
			// 选中 时间间隔,自动默认循环和开始播放
			timeFun(i){
				this.timeList.forEach((item,index) => {
						if(i == index){
							item.choose = true;
							this.time = item.time;
							this.scrollShow = false;
							this.loop = true;
							this.item = 1;
						} else {
							item.choose = false;
						}
				});
			},
			//  当播放到末尾时触发 ended 事件,先暂停再延迟多长时间重新播放
			endedFun(){
				let that = this;
				let a = Number(this.time)*1000;
				
				this.$nextTick(() => {
					this.videoContext.pause();
				});
				
				setTimeout(function() {
					if(that.item == 1 && that.loop){
						console.log('延迟时间开始播放了',a);
						that.videoContext.play();
					}
				}, a);
			},
			leftClick(){
				uni.navigateBack();
			}
		},
	}
</script>

<style lang='scss'>
	page{
		background: #F8F8F8;
	}
	
</style>
<style lang='scss' scoped>
	.form2box{
		.content{
			padding: 0 18rpx;
			box-sizing: border-box;
			width:750rpx;
			position: relative;
			.anniu{
				position: absolute;
				bottom: -107rpx;
				left: 50%;
				transform: translateX(-50%);
				width: 214rpx;
				height: 214rpx;
			}
		}
		.fixbox{
			position: fixed;
			bottom: 100rpx;
			width:750rpx;
			box-sizing: border-box;
			background: #FAFAFA;
			display: flex;
			align-items: center;
			justify-content: space-around;
			.miao{
				width: 134rpx;
				height:134rpx;
				line-height: 134rpx;
				text-align: center;
				color: #B0B0B0;
				font-size: 33.33rpx;
				font-family: MicrosoftYaHei;
			}
			.text{
				margin-top: 25rpx;
				font-family: Adobe Heiti Std R;
				font-size: 25rpx;
				color: #000000;
			}
			.you{
				position: relative;
				.scrollbox{
					box-sizing: border-box;
					position: absolute;
					top: -385rpx;
					left: -15rpx;
					background-color: #fff;
					width: 248rpx;
					border: 2rpx solid #000000;
					color:#B0B0B0;
					font-size: 25rpx;
					font-family: MicrosoftYaHei;
					padding: 20rpx 25rpx 0;
					.ac{
						color: #000000;
					}
				}
			}
		}
	}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/926487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抖音短视频seo矩阵系统源码开发代码分享--开源

前言&#xff1a; 适用于抖音seo源码&#xff0c;抖音矩阵源码&#xff0c;抖音短视频seo源码&#xff0c;抖音短视频矩阵源码开发与实践等。 产品开发代码展示&#xff1a; <?php /** * Created by PhpStorm. * User: ikinvin * Date: 2021/2/24 * Time: 11:32 AM …

Ingress 响应超时504故障排除

Ingress 响应超时504故障排除 1. 故障现象: 在阿里云的ACK新上了一套系统.该系统有个将查询结果导出为excle并下载的功能,当第一次下载时等待1分钟后就跳出504,点击返回后再次下载可以正常下载. 2. 分析判断 根据504的页面应该是和Ingress配置相关和超时时间长短有关 3. …

【1448. 统计二叉树中好节点的数目】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一棵根为 root 的二叉树&#xff0c;请你返回二叉树中好节点的数目。 「好节点」X 定义为&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。 示例 1&#…

vue实现富文本

效果图展示 一、安装依赖 npm install vue-quill-editor --save二、具体使用 html <template><!-- 富文本 --><quill-editorref"myQuillEditor"v-model"content":options"editorOption"blur"onEditorBlur($event)"…

力扣:73. 矩阵置零(Python3)

题目&#xff1a; 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚…

net start mysql 提示:服务名无效 请键入NET HELPING 2185

解决办法&#xff1a; 使用windowr打开运行&#xff0c;输入services.msc, 可以看到名称是mysql80&#xff0c;而且服务已经启动

Vite知识体系

一、浅谈构建工具 1、前端工程的痛点 &#xff08;1&#xff09;前端项目的组成部分&#xff08;核心要素--文件资源&#xff09; ①逻辑代码&#xff1a;js、ts、jsx ②样式代码&#xff1a;css、scss、less ③静态资源&#xff1a;jpg、png、webp &#xff08;2&#xff0…

【打印流】常用方法以及应用场景

打印流常用方法以及应用场景 1.打印流是什么&#xff1f; 可以实现更方便、更高效地写数据&#xff0c;分为字节打印流PrintStream和字符打印流PrintWriter&#xff0c;使用方便&#xff0c;性能高效&#xff0c;底层封装了高效流 字节打印流PrintStream&#xff1a;继承Out…

自己搭建Minecraft服务器并通过cpolar内网穿透实现与公网小伙伴联机我的世界

文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …

Python遥感图像处理应用篇037 GDAL+Scikit-image遥感图像主成分分析PCA

1.计算效果图 使用多波段遥感图像进行主成分分析,这里使用了6个波段的数据计算和显示效果图如下:左边是原图像IR+R+G显示图,右边是计算得到的3个主成分组合显示的RGB图像。 2.计算方法详解 使用GDAL库读取和保存遥感图像,使用numpy对图像数据进行相应的变换和计算,使用…

App Inventor 2 开发 ChatGPT 对话App

ChatGPT大家应该不会陌生&#xff0c;它的回答内容非常的专业及深入&#xff0c;具有实际的可指导性。我们通过App Inventor 2开发一个简单的对话App&#xff0c;先看效果&#xff1a; App Inventor 2 ChatGPT教育领域对话演示 代码块如下&#xff1a; 用到的核心组件“ChatBot…

人工智能浅浅的入门

目录 人工智能——让机器具备人的思维 一、人工智能三学派&#xff08;主流方向——连接主义&#xff09; 1.行为主义 2.符号主义 3.连接主义 二、连接主义的神经网络设计过程 1.举例&#xff1a;神经元 2.大致过程 三、人工智能的理解与涉及的重要点 1.个人观点 2.M…

牛客网Verilog刷题 | 入门特别版本

文章目录 1、 VL1 输出12、VL2 wire连线3、 VL3 多wire连接4、VL4 反相器5、VL5 与门6、VL6 NOR 门7、VL7 XOR 门8、VL8 逻辑运算10、VL10 逻辑运算211、VL11 多位信号12、VL12 信号顺序调整13、VL13 位运算与逻辑运算14、VL14 对信号按位操作15、VL15 信号级联合并16、VL16 信…

【redis问题】Caused by: io.netty.channel

遇到的问题&#xff1a; 在使用 RedisTemplate 连接 Redis 进行操作的时候&#xff0c;发生了如下报错&#xff1a; 测试代码为&#xff1a; 配置文件&#xff1a; 问题根源&#xff1a; redis没有添加端口映射解决方案&#xff1a; 删除原来的redis容器&#xff0c;添加新…

【附安装包】Flash2015安装教程|装机必备

软件下载 软件&#xff1a;Flash版本&#xff1a;2015语言&#xff1a;简体中文大小&#xff1a;897.8M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨下载链接&#xff1a;https://pan.baidu.com/s…

【Linux】权限问题

Linux权限 一、Linux 权限的概念二、Linux 权限管理1. 文件访问者的分类2. 文件类型和访问权限&#xff08;事物属性&#xff09;3. 文件访问权限的相关设置方法 三、默认权限1. 对文件和目录进行操作需要的权限2. 文件和目录的默认权限3. 粘滞位 一、Linux 权限的概念 Linux …

Linux下的Shell基础——正则表达式入门(四)

前言&#xff1a; 正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里&#xff0c;正则表达式通常被用来检索、替换那些符合某个模式的文本。 在Linux 中&#xff0c;grep&#xff0c;sed&#xff0c;awk 等文本处理工具都支持…

馈纸式扫描仪:解放双手,告别繁琐

来百度APP畅享高清图片 扫描仪是OCR中获取高质量图片的重要设备&#xff0c;前面我们介绍了平板扫描仪&#xff0c;也略有提到馈纸式扫描仪&#xff0c;那么&#xff0c;什么样的扫描仪才是馈纸式的扫描仪&#xff1f;它长什么样呢&#xff1f; 馈纸式扫描仪&#xff08;Automa…

Mybatis查询数据

上一篇我们介绍了在pom文件中引入mybatis依赖&#xff0c;配置了mybatis配置文件&#xff0c;通过读取配置文件创建了会话工厂&#xff0c;使用会话工厂创建会话获取连接对象读取到了数据库的基本信息。 如果您需要对上面的内容进行了解&#xff0c;可以参考Mybatis引入与使用…

前端进阶之———浏览器调试巧技

有幸的参加了一次腾讯的面试&#xff0c;被面试官问到了JS能不能在浏览器上import依赖已经遇到一个错误函数应该怎么解决。之前的经验是做一些简单的html&#xff0c;css样式调试以及他的报错信息&#xff0c;忽略了浏览器js调试的强大功能。觉得还是非常有必要的&#xff0c;很…