当前位置: 首页 > news >正文

微信小程序mp3音频播放组件,仅需传入url即可

// index.js
// packageChat/components/audio-player/index.js
Component({/*** 组件的属性列表*/properties: {/*** MP3 文件的 URL*/src: {type: String,value: '',observer(newVal, oldVal) {if (newVal !== oldVal && newVal) {// 如果 InnerAudioContext 已存在,先停止并销毁它以避免多个实例if (this.innerAudioContext) {this.innerAudioContext.stop()this.innerAudioContext.destroy()this.innerAudioContext = null}// 初始化音频并获取时长this.initializeAudio()}}}},/*** 组件的初始数据*/data: {playStatus: 0, // 0: 未播放, 1: 正在播放duration: 0, // 音频总时长(秒)remain: 0 // 剩余播放时间(秒)},/*** 组件生命周期*/lifetimes: {attached() {if (this.data.src) {this.initializeAudio()}},detached() {// 组件卸载时,停止并销毁 InnerAudioContextif (this.innerAudioContext) {this.innerAudioContext.stop()this.innerAudioContext.destroy()this.innerAudioContext = null}}},/*** 组件的方法列表*/methods: {/*** 播放按钮点击事件*/playBtn() {const { src, playStatus } = this.dataif (!src) {wx.showToast({title: '没有录音文件',icon: 'none'})return}// 如果 InnerAudioContext 尚未创建,初始化它if (!this.innerAudioContext) {this.initializeAudio()}// 如果当前正在播放,停止播放并重置状态if (playStatus === 1) {this.innerAudioContext.stop()this.setData({playStatus: 0,remain: this.data.duration})return}// 每次点击都重新开始播放this.innerAudioContext.src = srcthis.innerAudioContext.play()// 更新播放状态this.setData({playStatus: 1,remain: this.data.duration})},/*** 初始化 InnerAudioContext 并绑定事件*/initializeAudio() {this.innerAudioContext = wx.createInnerAudioContext()this.innerAudioContext.obeyMuteSwitch = falsethis.innerAudioContext.src = this.data.src// 监听音频能够播放时触发this.innerAudioContext.onCanplay(() => {console.log('音频可以播放')const totalDuration = Math.floor(this.innerAudioContext.duration)if (totalDuration > 0) {this.setData({duration: totalDuration,remain: totalDuration})} else {console.warn('无法获取音频时长')}})// 监听播放开始this.innerAudioContext.onPlay(() => {console.log('音频开始播放')})// 监听播放结束this.innerAudioContext.onEnded(() => {console.log('音频播放结束')this.setData({playStatus: 0,remain: this.data.duration})// 触发自定义事件(如果需要)this.triggerEvent('playComplete')})// 监听播放错误this.innerAudioContext.onError(err => {console.error('播放错误:', err)wx.showToast({title: '播放失败,请重试',icon: 'none'})this.setData({playStatus: 0,remain: this.data.duration})})// 监听播放进度更新this.innerAudioContext.onTimeUpdate(() => {const current = Math.floor(this.innerAudioContext.currentTime)const remain = Math.floor(this.innerAudioContext.duration) - currentthis.setData({remain: remain > 0 ? remain : 0})})}}
})
<view class="voice-msg" bindtap="playBtn"><imagesrc="{{ playStatus === 0 ? '/sendingaudio.png' : '/voice.gif' }}"mode="aspectFill"class="voice-icon"/><text class="voice-msg-text"> {{ playStatus === 1 ? (remain + "''") : (duration + "''") }} </text>
</view>
/* packageChat/components/audio-player/index.wxss */
.voice-msg {display: flex;align-items: center;min-width: 200rpx;padding: 0 20rpx;height: 60rpx;background-color: rgba(149, 236, 105, 0.72);border-radius: 10rpx;box-shadow:0 3rpx 6rpx rgba(0, 0, 0, 0.13);.voice-icon {transform: rotate(180deg);width: 22rpx;height: 32rpx;}.voice-msg-text {margin-left: 10rpx;color:#000000 !important;font-size:30rpx !important;}
}

相关文章:

微信小程序mp3音频播放组件,仅需传入url即可

// index.js // packageChat/components/audio-player/index.js Component({/*** 组件的属性列表*/properties: {/*** MP3 文件的 URL*/src: {type: String,value: ,observer(newVal, oldVal) {if (newVal ! oldVal && newVal) {// 如果 InnerAudioContext 已存在&…...

Sql 创建用户

Sql server 创建用户 Sql server 创建用户SQL MI 创建用户修改其他用户密码 Sql server 创建用户 在对应的数据库执行&#xff0c;该用户得到该库的所有权限 test.database.chinacloudapi.cn DB–01 DB–02 创建服务器登录用户 CREATE LOGIN test WITH PASSWORD zDgXI7rsafkak…...

数据结构:LinkedList与链表—面试题(三)

目录 1、移除链表元素 2、反转链表 3、链表的中间结点 4、返回倒数第k个结点 5、合并两个有序链表 1、移除链表元素 习题链接https://leetcode.cn/problems/remove-linked-list-elements/description/ 描述&#xff1a;给你一个链表的头节点 head 和一个整数 val &#xff…...

【开发日记】Docker修改国内镜像源

1、问题&#xff1a; docker pull镜像时提示以下内容&#xff1a; Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)2、解决 ①…...

Elasticsarch:使用全文搜索在 ES|QL 中进行过滤 - 8.17

8.17 在 ES|QL 中引入了 match 和 qstr 函数&#xff0c;可用于执行全文过滤。本文介绍了它们的作用、使用方法、与现有文本过滤方法的区别、当前的限制以及未来的改进。 ES|QL 现在包含全文函数&#xff0c;可用于使用文本查询过滤数据。我们将回顾可用的文本过滤方法&#xf…...

第432场周赛:跳过交替单元格的之字形遍历、机器人可以获得的最大金币数、图的最大边权的最小值、统计 K 次操作以内得到非递减子数组的数目

Q1、跳过交替单元格的之字形遍历 1、题目描述 给你一个 m x n 的二维数组 grid&#xff0c;数组由 正整数 组成。 你的任务是以 之字形 遍历 grid&#xff0c;同时跳过每个 交替 的单元格。 之字形遍历的定义如下&#xff1a; 从左上角的单元格 (0, 0) 开始。在当前行中向…...

RK3399开发板Linux实时性改造

本次测试基于NanoPC-T4开发板&#xff08;国产化处理器RK3399&#xff09;&#xff0c;4.19.111内核Xenomai实时性改造测试。 Xenomai下载网站&#xff1a;https://xenomai.org/downloads/ NanoPC-T4网站&#xff1a;https://wiki.friendlyarm.com/wiki/index.php/NanoPC-T4/z…...

青少年编程与数学 02-006 前端开发框架VUE 22课题、状态管理

青少年编程与数学 02-006 前端开发框架VUE 22课题、状态管理 一、状态管理二、Vuex1. 安装Vuex2. 创建Vuex Store3. 在Vue应用中使用Store4. 在组件中使用状态5. 模块化Store 三、Vuex应用示例1. 创建项目2. 安装Vuex3. 设置Vuex Store4. 在主项目中使用Store5. 创建组件6. 更新…...

Linux 内核中的 netif_start_queue 函数:启动网络接口发送队列的关键

在 Linux 内核的网络子系统中,netif_start_queue 函数扮演着至关重要的角色。这个函数的主要功能是启动(或启用)网络接口的发送队列,标志着网络接口已经准备好开始发送数据包。本文将深入探讨 netif_start_queue 函数的用途、工作原理以及在实际网络驱动代码中的应用。 函…...

数据结构之顺序结构二叉树(超详解)

文章目录 1 树1.1 树的概念与结构1.2 相关术语1.3 树的表示与运用场景1.3.1 运用场景 2. 二叉树2.1 概念与结构2.1.1 满二叉树2.1.2 完全二叉树 3. 顺序结构二叉树3.1 堆的引入3.1.1 概念与结构 3.2 功能实现3.2.1 堆的结构3.2.2 初始化、销毁 3.3 堆的插入数据3.3.1 向上调整算…...

acwing_5722_十滴水

acwing_5722_十滴水 下面这篇大佬的题解属实是把指针用明白了&#xff0c;可以好好理解一下&#xff1a; 原题解连接&#xff1a;AcWing 5722. 一个简单模拟实现 - AcWing map/unordered_map的用法:见收藏夹 #include<iostream> #include<unordered_map> #incl…...

acwing-3194 最大的矩形

acwing-3194 最大的矩形 这个题程序设计课上有讲过&#xff0c; 平民算法&#xff0c;时间复杂度在 O ( n 2 ) O(n^2) O(n2) // // Created by HUAWEI on 2024/10/28. // #include<iostream>using namespace std;const int Max_size 1e4 20;int N; int h[Max_size];…...

UnityDemo-TheBrave-制作笔记

这是我跟着b站up主MStudio的视频学习制作的&#xff0c;大体上没有去做一些更新的东西&#xff0c;这里只是一个总的总结。在文章的最后&#xff0c;我会放上可以游玩该游戏的链接和exe可执行文件&#xff0c;不过没有对游戏内容进行什么加工&#xff0c;只有基本的功能实现罢了…...

玩转 JMeter:Random Order Controller让测试“乱”出花样

嘿&#xff0c;各位性能测试的小伙伴们&#xff01;今天咱要来唠唠 JMeter 里超级有趣又超实用的 Random Order Controller&#xff08;随机顺序控制器&#xff09;&#xff0c;它就像是性能测试这场大戏里的“魔术棒”&#xff0c;轻轻一挥&#xff0c;就能让测试场景变得千变…...

VTK知识学习(33)-交互问题2

1、前言 主要是针对前面有过实现不了交互的情况进行说明&#xff0c;经过一些尝试和分析调用API&#xff0c;总算实现RenderWindowControl函数回调正常串接&#xff0c;当然这个移动处理事件的效果目前也没有确认。 2、使用 vtkImageReslice reslice vtkImageReslice.New();p…...

Centos9-SSH免密登录配置-修改22端口-关闭密码登录-提高安全性

Centos9-SSH免密登录配置-修改22端口-关闭密码登录 生成秘钥对将公钥信息存进authorized_keys测试登录查询访问记录、比对指纹更换22访问端口关闭账号密码登录生成秘钥对 生成密钥对,指定 备注 和 文件目录命令执行后,默认两次回车,不设置秘钥使用密码ssh-keygen -t rsa -b …...

SqlServer: An expression services limit has been reached异常处理

在工作中遇到一个问题&#xff0c;因为项目很老&#xff0c;代码很不规范&#xff0c;出现一种场景&#xff1a; 查询所有客户(5w条以上)&#xff0c;然后根据客户Id&#xff0c;再去其他表查询&#xff0c;代码中是直接将customerId拼接到sql中去查询&#xff0c;形成的sql如…...

CentOS下安装Docker

Docker 必须要在Linux环境下才能运行&#xff0c;windows下运行也是安装虚拟机后才能下载安装运行&#xff0c;菜鸟教程 下载安装 linux 依次执行下边步骤 更新 yum yum update 卸载旧的Docker yum remove docker docker-client docker-client-latest docker-common doc…...

WPF控件Grid的布局和C1FlexGrid的多选应用

使用 Grid.Column和Grid.Row布局&#xff0c;将多个C1FlexGrid布局其中&#xff0c;使用各种事件来达到所需效果&#xff0c;点击复选框可以加载数据到列表&#xff0c;移除列表的数据&#xff0c;自动取消复选框等 移除复选框的要注意&#xff01;&#xff01;&#xff01;&am…...

Jenkins-持续集成、交付、构建、部署、测试

Jenkins-持续集成、交付、构建、部署、测试 一: Jenkins 介绍1> Jenkins 概念2> Jenkins 目的3> Jenkins 特性4> Jenkins 作用 二&#xff1a;Jenkins 版本三&#xff1a;DevOps流程简述1> 持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff0…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...