vue3动态加载音频文件,用于不同场景加载不同的文件

在这里插入图片描述

本文主要介绍如何在vue3中动态加载音频文件。

目录

  • 前言
  • 静态加载
  • 动态加载
    • import函数
    • watch函数
    • 使用watch函数和import函数动态加载音频文件

前言

在vue3中,我们通常使用import xxx from 'xxxxxx'来加载文件,但是如果我们需要加载哪些文件,是需要条件去判断的,那该怎么做呢?

静态加载

先来看看最普遍的加载方式——静态加载
假设现在我需要加载one、two、three三个音频文件,这3个音频文件分别有中文版和英文版。那么按照最简单的加载方式,我应该直接import,代码如下:

import one_cn from './assets/sounds/cn/one.mp3'
import two_cn from './assets/sounds/cn/two.mp3'
import three_cn from './assets/sounds/cn/three.mp3'

import one_en from './assets/sounds/en/one.mp3'
import two_en from './assets/sounds/en/two.mp3'
import three_en from './assets/sounds/en/three.mp3'

这段代码是使用 JavaScript 导入音频文件。具体来说,它从特定的目录导入了不同语言的音频文件。这样的代码通常用于在一个程序中管理和引用不同的音频资源,可以根据需要播放不同语言的音频文件。例如,如果你想播放中文的音频,你就可以使用 one_cn,如果想播放英文的音频,你就可以使用 one_en。

但这种方式不好的地方是所有音频都会加载进来,而我们一般只需要用到其中一种,这样做的话会比较耗费资源。所以我们应该寻找一种可以动态加载文件的方法。

动态加载

动态加载需要用到import()函数和watch()函数,这里我简单介绍一下。

import函数

在Vue 3中,import()函数可以实现动态导入模块。我们使用import()函数可以异步地加载一个JavaScript模块,而无需在应用程序启动时加载整个模块。

import()函数返回一个Promise对象,当模块加载完成后,该Promise对象会被resolved。

下面是一些使用import()函数的例子:

// 加载单个模块
import('/modules/myModule.js')
  .then((module) => {
    // 使用myModule中的功能
    console.log(module.myFunction());
  });

// 加载多个模块
Promise.all([
  import('/modules/myModule1.js'),
  import('/modules/myModule2.js'),
  import('/modules/myModule3.js')
]).then(([module1, module2, module3]) => {
  // 使用myModule1、myModule2和myModule3的功能
  console.log(module1.myFunction());
  console.log(module2.myFunction());
  console.log(module3.myFunction());
});

使用import()函数可以延迟模块的加载时间,这可以提高应用程序的性能并减少初始加载时间。不过需要注意,使用import()函数会增加网络请求,因此在使用时需要权衡好加载时间和网络请求数量的关系。

watch函数

在Vue3中,watch()函数是用来监听Vue实例上的一个数据变化,并对其进行相应的处理。其基本语法如下:

watch(source, callback, options)

其中,source是一个函数或一个字符串,用来监听的数据源。callback是一个函数,以参数的形式接收被监听的数据变化。options是一个可选的配置对象,其中包含了如下选项:

  • deep:是否深度监听,默认值为false
  • immediate:是否在watcher被创建后立即执行回调函数,默认值为false
  • flush:用于控制watcher的触发时机。默认值为"pre",即在Vue更新DOM前触发watcher。可选的值还有"post""sync"

在Vue3中,使用watch()函数的方式与Vue2有些区别。Vue2中使用的是一个对象来进行配置,而Vue3中则是将配置分散到了函数的参数中,使得使用更加灵活和方便。同时,在Vue3中,watch()的返回值是一个函数,可以用来停止监听。

举个例子,下面是在Vue3中使用watch()进行数据监听的示例:

import { watch } from 'vue'

export default {
  data() {
    return {
      count: 0
    }
  },
  mounted() {
    // 监听数据变化
    watch(() => this.count, (newVal, oldVal) => {
      console.log(`count变化了:${oldVal} => ${newVal}`)
    }, {
      deep: false,
      immediate: true
    })
  }
}

在这个例子中,我们监听了count数据的变化,并在回调函数中打印了变化前后的值。同时,我们还将配置项deepimmediate分别设置为falsetrue,表示监听数据的深度和是否立即执行回调函数。

使用watch函数和import函数动态加载音频文件

使用watch()函数监听语言的变化,自定义一个dynamicLoadingMp3()函数执行加载函数import
话不多说,下面是代码示例:

<script setup>
import { ref, watch } from 'vue'

let language = ref('cn')
// 监听语言变化
watch(() => language,(now, prev) => {
	//now是language变化后的最新值
	dynamicLoadingMp3()//重新加载音频文件
});

// 根据语言动态加载音频文件
const dynamicLoadingMp3 = function(){
	// 根据语言环境的变量选择目录进行加载
	import(`./assets/sounds/${language.value}/one.mp3`).then((oneSound) => {
		//在此处使用音频文件oneSound
	});
	import(`./assets/sounds/${language.value}/two.mp3`).then((twoSound) => {
		//在此处使用音频文件twoSound
	});
	import(`./assets/sounds/${language.value}/three.mp3`).then((threeSound) => {
		//在此处使用音频文件threeSound
	});
}
dynamicLoadingMp3()
</script>

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java数据结构(哈希表—HashMap)含LeetCode例题讲解

目录 1、HashMap的基本方法 1.1、基础方法&#xff08;增删改查&#xff09; 1.2、其他方法 2、HashMap的相关例题 2.1、题目介绍 2.2、解题 2.2.1、解题思路 2.2.2、解题图解 2.3、解题代码 1、HashMap的基本方法 HashMap 是一个散列表&#xff0c;它存储的内容是键…

Peter算法小课堂—差分与前缀和

差分 Codeforces802 D2C C代码详解 差分_哔哩哔哩_bilibili 一维差分 差分与前缀和可以说成减法和加法的关系、除法和乘法的关系、积分和微分的关系&#xff08;听不懂吧&#xff09; 给定数组A&#xff0c;S为A的前缀和数组&#xff0c;则A为S的差分数组 差分数组构造 现…

电子学会C/C++编程等级考试2021年06月(四级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数字三角形问题 (图1) 图1给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 注意:路径上的每一步只能从一个数走到下一层上和它…

Android Studio新版UI介绍

顶部菜单栏 左侧主要菜单入口项目名称分支名称 展开之后&#xff0c;主要功能与原来菜单栏功能一样&#xff0c;最大的变化就是把setting独立出去了。 而项目名称这里&#xff0c;展开就可以看到打开的历史工程列表&#xff0c;可以直接新建工程&#xff0c;原来需要在项目名称…

vivado实现分析与收敛技巧3-面向非工程用户的智能设计运行建议

要使用智能设计运行功能特性 &#xff0c; 需要 Vivado 工程。这是因为需要进行运行管理。以下指示信息解释了创建综合后工程的最简单方法。这些信息适用于以下流程的用户&#xff1a; • 非工程实现运行 • 使用较低版本的 Vivado 或第三方综合工具进行综合 访问智能设计…

Git——分支应用进阶

主要内容包括以下几个方面&#xff1a; 长期分支和短期分支的类型以及用途。多种分支模型&#xff0c;其中包括基于工作流的主题分支。不同分支模型的发布流程。在多个预览版程序中使用分支修复安全问题。远程跟踪分支和refspecs规范&#xff0c;以及默认远程版本库配置。拉取…

测评补单助力亚马逊,速卖通,国际站卖家抢占市场,提升转化和评分

想要快速提升商品的销量&#xff0c;测评补单这种方法见效是最快的。特别是新品上线&#xff0c;缺少用户评价&#xff0c;转化率不好&#xff0c;很多商家新品上线都会做测评补单&#xff0c;搞些商品好评&#xff0c;不但可以提升转化&#xff0c;同时在平台也可以获得更多展…

Redis:主从复制

目录 概念配置步骤通过命令配置主从复制原理薪火相传反客为主哨兵(Sentinel)模式原理配置SpringBoot整合Sentinel模式 概念 主机更新后根据配置和策略&#xff0c;自动同步到备机的master/slave机制&#xff0c;Master以写为主&#xff0c;Slave以读为主。 作用&#xff1a; …

Python+Requests模块添加cookie

请求中添加cookies 对于某些网站&#xff0c;登录然后从浏览器中获取cookies&#xff0c;以后就可以直接拿着cookie登录了&#xff0c;无需输入用户 名密码。 一、在参数中添加cookie 在发送请求时使用cookies 代码示例&#xff1a; import requests # 1&#xff0c;在参数…

ZFPlayer 在tableView列表中播放视频架构设计

需求背景 需要在如图所示的列表中播放视频&#xff0c;并且播放视频在对应的卡片上&#xff0c;滚动结束的时候&#xff0c; 完整露出封面图的第一个视频自动播放 分析 根据需求&#xff0c;是滚动的时候获取符合条件的cell&#xff0c;并且 在cell的封面图上播放视频&#x…

CSS中的非布局样式+CSS布局 前端开发入门笔记(十一)

CSS中的非布局样式 在CSS中&#xff0c;非布局样式是指那些不会直接影响页面布局的样式。这些样式主要关注的是元素的颜色、字体、背景、边框、阴影等视觉效果。以下是一些常见的非布局CSS样式&#xff1a; 文本样式&#xff1a;包括字体&#xff08;font-family&#xff09;…

传统算法:使用 Pygame 实现归并排序

使用 Pygame 模块实现了归并排序的动画演示。首先,它生成一个包含随机整数的数组,并通过 Pygame 在屏幕上绘制这个数组的条形图。接着,通过归并排序算法对数组进行排序,动画效果可视化每一步的排序过程。在排序的过程中,程序将数组递归地分成两半,分别进行排序,然后再将…

小白备战蓝桥杯:Java常用API

一、什么是API 就是别人写好的一些类&#xff0c;给咱们程序员直接拿去调用即可解决问题的 我们之前接触过的Scanner和Random都是API 但java中提供的API很多&#xff0c;我们没有必要去学习所有的API&#xff0c;只需要知道一些常用的API&#xff0c;再借助帮助文档去使用AP…

从HumanEval到CoderEval: 你的代码生成模型真的work吗?

本文主要介绍了一个名为CoderEval的代码生成大模型评估基准&#xff0c;并对三个代码生成模型&#xff08;CodeGen、PanGu-Coder和ChatGPT&#xff09;在该基准上的表现进行了评估和比较。研究人员从真实的开源项目中的选取了代码生成任务来构建CoderEval&#xff0c;并根据对外…

Python函数专题(下)侯小啾python领航班系列(十三)】

Python函数专题(下)侯小啾python领航班系列(十三)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

腾讯云年末感恩回馈:2核2G4M云服务器118元1年,新老用户同享!

腾讯云年末感恩回馈活动开始了&#xff0c;年度爆款2核2G4M云服务器118元/年&#xff0c;新老用户同享&#xff0c;记得抓住上云好时机&#xff01; 活动地址&#xff1a; 点此直达腾讯云年末感恩回馈 活动详情&#xff1a; 配置说明&#xff1a; 2核2G 独享CPU性能50GB SSD…

观《王牌对王牌:国宝回国》有感 —— AI绘画之古画修复对比图

一、前言 上周《王牌对王牌》节目的主题是《国宝回国》&#xff0c;而今天的AI绘画的灵感&#xff0c;就来源于这期节目。 下面这组图&#xff0c;左侧部分因时间的流逝而显现出褪色和损伤的痕迹&#xff0c;色彩变得暗淡&#xff0c;细节也因年代久远而变得模糊不清。 而右…

知虾平台丨优化Shopee店铺运营,提升销售利润——了解知虾平台

在如今竞争激烈的电商市场中&#xff0c;Shopee作为一家快速发展的平台&#xff0c;吸引了众多卖家加入。然而&#xff0c;要在Shopee上取得成功并实现可观的销售利润&#xff0c;并不是一件容易的事情。为了帮助卖家更好地了解市场趋势、优化商品关键词、监控竞争对手等&#…

c题目13:验证100以内的数是否满足哥德巴赫猜想。(任一大于2的偶数都可以写成两个质数之和)

每日小语 活下去的诀窍是&#xff1a;保持愚蠢&#xff0c;又不能知道自己有多蠢。——王小波 自己思考 即要让第一个质数与这个数减去第一个质数的值都为质数&#xff0c;所以要满足几个条件 1.abc 2.a为质数 3.b为质数 这里是否可以用到我之前刚学的自己设置的那个判断…

daima8资源网整站数据打包完整代码(集成了ripro9.1主题,开箱即用)

基于ripro9.1完全明文无加密后门版本定制开发&#xff0c;无需独立服务器&#xff0c;虚拟主机也可以完美运营&#xff0c;只要主机支持php和mysql即可。整合了微信登录和几款第三方的主题文件&#xff0c;看起来更美观一些。站长本人就是程序员&#xff0c;所以本站的代码资源…