2022-12-13 工作记录--Vue/JS-音乐的播放与关闭

news2024/11/25 16:23:04

Vue/JS-音乐的播放与关闭

请添加图片描述

一、音频资源

音频资源的位置如下:👇🏻

在这里插入图片描述

二、代码

App.vue

注意点:

  • 1、若切换了音频资源,则需要在 播放音乐前 重新加载资源——见代码里的 myAuto?.load();
  • 2、若切换了页面(重新渲染了dom节点),则需要用到this.$nextTick。解决范例:
    • 比如:ABC三个页面中,只有C页面不展示音乐按钮,当我们从C页面返回B页面时,发现音乐未播放(报错了),这是因为dom节点未渲染完,So 当页面切换了,需要 在dom节点渲染完后,再控制音乐按钮的播放与关闭,代码如下:
      - this.$nextTick(() => { this.handleMusicOpenOrClose(); });
<template>
  <div id="app">
    <!-- 音频(隐藏) -->
    <audio
      :src="require(`@/assets/mp3/bgm_${this.$store.state.status > -1 ? this.$store.state.status : 0}.mp3`)"
      id="myAudio"
      controls="controls"
      loop="true"
      hidden="true"
    ></audio>
    <!-- 音乐图标 -->
    <div
      :class="['music', !this.$store.state.bgmStatus ? 'musicClose' : 'musicOpen']"
      @click.stop="clickMusicIcon"
    ></div>
  </div>
</template>

<script>
export default {
  name: "App",
  // import引入的组件需要注入到对象中才能使用
  components: {},
  // 数据
  data() {
    return {};
  },
  //计算属性-监听属性 类似于data概念
  computed: {},
  //监控data中的数据变化
  watch: {},
  // 方法集合
  methods: {
    /** 点击音乐图标 */
    clickMusicIcon() {
      const { bgmStatus } = this.$store.state;
      // 设置 背景音乐的开启与关闭
      this.$store.commit("setBgmStatus", !bgmStatus);
      console.log("是否播放背景音乐", this.$store.state.bgmStatus);

      // 未切换音频资源,只是控制当前音乐资源的播放和关闭,所以不用传true
      this.handleMusicOpenOrClose();
    },
    /** 处理音乐按钮的开关 */ 
    async handleMusicOpenOrClose(isChangeMusic = false) {
      const myAuto = document.getElementById("myAudio");
      if (this.$store.state.bgmStatus) {
        // myAuto?.load():重新加载资源【注意:若切换了音频资源,播放前则需要调用该方法】
        isChangeMusic && await myAuto?.load();
        // 播放音乐
        myAuto?.play();
      } else {
        // 暂停音乐
        myAuto?.pause();
        myAuto?.load();
      }
    },
  },
  //生命周期 - 创建完成(可以访问当前this实例)
  created() { },
  //生命周期 - 挂载完成(可以访问DOM元素)
  mounted() { },
  beforeCreate() { }, //生命周期 - 创建之前
  beforeMount() { }, //生命周期 - 挂载之前
  beforeUpdate() { }, //生命周期 - 更新之前
  updated() { }, //生命周期 - 更新之后
  beforeDestroy() {}, //生命周期 - 销毁之前
  destroyed() { }, //生命周期 - 销毁完成
  activated() { }, //如果页面有keep-alive缓存功能,这个函数会触发
};
</script>

<style lang="less">
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  font-size: 34px;
  width: 100vw;
  height: 100vh;
  overflow: hidden;
  position: fixed;
}

body {
  margin: 0;
  padding: 0;
  -webkit-user-select: none;
  -moz-user-select: none;
  -webkit-user-select: none;
  -o-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
}

/* 音乐 */
.music {
  width: 53px;
  height: 53px;
  position: absolute;
  top: 30px;
  right: 40px;
  background: no-repeat center/cover;
  z-index: 10;
}

/** 音乐图标-开 */
.musicOpen {
  background-image: url("@/assets/img/common/musicOpenIcon.png");
}

/** 音乐图标-关 */
.musicClose {
  background-image: url("@/assets/img/common/musicCloseIcon.png");
}
</style>

store/index.js【vuex】

import Vue from "vue";
import Vuex from "vuex";
import axios from "axios";

// 1.安装插件
Vue.use(Vuex);

// 2.创建对象
const state = {
  /** 全篇数据 */
  rspData: "",
  /** 贯穿所有页面的状态 */
  status: -1, /** 0-专心备考,1-岁月静好,2-忙着赚钱,3-快乐健身 */
  // 是否播放背景音乐
  bgmStatus: false,
}

const store = new Vuex.Store({ // 这样之后,所有的组件都有$store对象
  // 放状态相关的信息
  state,
  // 当state里的数据是需要变化后再使用时,一般要在getters里面先进行相应操作后,得到对应数据
  getters: {},
  // 方法
  mutations: {
    // 设置 全篇数据
    setRspData(state, data) { state.rspData = data },
    // 设置 页面的状态
    setStatus: (state, data) => (state.status = data),
    // 设置 背景音乐的开启与关闭
    setBgmStatus: (state, data) => { state.bgmStatus = data },
  },
  // 装异步操作的方法
  actions: {
    /** 请求接口部分 */
    getRspDataByHttp({ commit, state }) {
      /***
       * 需要qs的话  再引入qs
       * axios({
                method: "post",
                url: "*****",
                data: postData
            }).
       * */
      axios
        .get("/ifa/v1/api-d3k-year-bills-2022-ful")
        .then((res) => {
          commit('setRspData', res.data)
        })
        .catch((err) => {
          console.log(err);
        });
    },
  },
  modules: {} // modules里面的东西会被放到state里面
});

// 3.导出store独享
export default store;

请添加图片描述

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

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

相关文章

论文学习——秦淮河水文水动力模型及实时校正

文章目录摘要0 引言1 模型构建1.1 流域概况及资料收集1.2 河道一维水流模拟1.3 边界条件处理1.3.1 流量上边界计算1.3.2 水文下边界处理1.4 节点堰闸流量计算2 实时校正方法2.1 KNN 法2.2 反馈法3 模拟及校正结果4 结论作者&#xff1a;孙文宇、姚成、刘志雨 期刊&#xff1a;《…

Allegro如何编辑过孔的封装参数操作指导

Allegro如何编辑过孔的封装参数操作指导 Allegro可以快捷的编辑过孔的封装,具体操作如下 以编辑这个via的封装为例 用Candence安装目录下面的pad_designer打开过孔的pad封装 打开后的效果如下图 如果需要改成钻孔8mil的孔,只需要在Drill diameter把10改成8即可 钻孔尺寸…

一比一手写迷你版vue,彻底搞懂vue运行机制

前言 现在前端面试Vue中都会问到响应式原理以及如何实现的&#xff0c;如果你还只是简单回答通过Object.defineProperty()来劫持属性可能已经不够了。 本篇文章通过学习文档及视频教程实现手写一个简易的Vue源码实现数据双向绑定&#xff0c;解析指令等。 几种实现双向绑定的…

好物安利:老照片修复软件哪个好?

大家都知道&#xff0c;老照片承载了很多的回忆&#xff0c;还有许多见证了城市的变迁及发展。甚至可以说&#xff0c;那些老照片&#xff0c;每一张都蕴藏着一个故事&#xff0c;能还原一段历史。但这些老照片&#xff0c;或多或少因为之前的设备、或储存不当等问题&#xff0…

【Docker】Docker安装Redis,并配置数据备份同步到宿主机

专栏精选文章 《Docker是什么&#xff1f;Docker从介绍到Linux安装图文详细教程》《30条Docker常用命令图文举例总结》《Docker如何构建自己的镜像&#xff1f;从镜像构建到推送远程镜像仓库图文教程》《Docker多个容器和宿主机之间如何进行数据同步和数据共享&#xff1f;容器…

Spring:Aop

目录 一、Aop简介 AOP相关术语 二、使用AOP 一、Aop简介 AOP(Aspect Oriented Programming)面向切面编程&#xff0c;一种编程范式&#xff0c;指导开发者如何组织程序结 构 原理&#xff1a;将复杂的需求分解出不同方面&#xff0c;将散布在系统中的公共功能集中解决 …

MEE: A Novel Multilingual Event Extraction Dataset 论文解读

MEE: A Novel Multilingual Event Extraction Dataset paper&#xff1a;[2211.05955] MEE: A Novel Multilingual Event Extraction Dataset (arxiv.org) code&#xff1a;None 期刊/会议&#xff1a;EMNLP 2022 摘要 事件抽取&#xff08;EE&#xff09;是信息抽取&#…

OS_用户层的IO软件@缓冲区@磁盘高速缓存@异步IO

文章目录OS_用户层的IO软件缓冲区磁盘高速缓存异步IO用户层的IO软件&#x1f388;1.系统调用2.库函数高速缓存与缓冲区磁盘高速媛存(Disk Cache)缓冲区Buffer缓冲的用途设备速度的巨大差异&#x1f388;缓冲和缓存的比较联系区别缓冲区的结构缓冲的引入单缓冲区和双缓冲区单缓冲…

万应视野|蔡鑫莹:One in All,低代码平台从工具向商业的转变

2015年&#xff0c;AI、5G、大数据、云计算等前沿技术开始崭露头角&#xff0c;软件再出发、工业互联网等相关政策逐渐出台&#xff0c;云畅的悠悠创业路自此竟也走过了8年。 风华绝代总爱乱世生。2020年&#xff0c;百年变局与世纪疫情交织&#xff0c;经济全球化遭遇逆流&…

倾斜摄影模型数据在gis中的应用

倾斜摄影是近年来航测领域逐渐发展起来的新技术&#xff0c;可同时获得同一位置多个不同角度的、具有高分辨率的影像&#xff0c;采集丰富的地物侧面纹理及位置信息&#xff0c;批量建立高质量、高精度的三维GIS模型&#xff0c;对市政、轨道交通、水利水电、智慧城市等各工程领…

一个简单的HTML篮球网页【学生网页设计作业源码】

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

大比分领先!ACCV 2022 国际细粒度图像分析挑战赛冠军方案

写在前面 在刚刚结束的 ACCV 2022 国际细粒度图像分析挑战赛中&#xff0c;我们团队在 133 支参赛队伍中脱颖而出&#xff0c;在 Leadboard-B 上以 2.5 的绝对优势取得冠军。 比赛成绩截图 在比赛过程中&#xff0c;我们使用了一些对细粒度分类十分有效的解决方案。 例如&am…

服务器渲染技术-->Thymeleaf

目录 一.基本介绍 1.Thymeleaf 是什么 2.Thymeleaf 的优点 3. Thymeleaf 的缺点 二.Thymeleaf 机制说明 三.Thymeleaf 语法 1. 表达式 1. 表达式一览 2. 字面量 3. 文本操作 2.运算符 1. 数学运算 2. 布尔运算 3. 比较运算 4. 条件运算 3.th 属性 4.迭代 5.条…

PLC模拟量传输过程

网上对PLC模拟量的一些解释含糊不清&#xff0c;令参考人疑惑重重&#xff0c;搞不懂现场—>PLC—>上位机的过程走向。 . 应该了解什么是数字量&#xff1f;什么是模拟量&#xff1f;下面是我的理解。 数字量&#xff1a;没有单位&#xff0c;表示一个数字&#xff0c;0~…

Linux-iNode-软硬链接

文章目录inode磁盘了解站在OS角度磁盘就是线性结构如何确认inode和后面的那个block相关联呢&#xff1f;如何在大的inode Table中安排一个新文件的inode?目录下创建文件的过程都发生了什么软硬链接软链接&#xff1a;特别像快捷方式使用场景硬链接二者区别&#xff1a;硬链接有…

nodejs+vue+element+eachers构建开源项目大型连续剧(1)搭建nodejs服务器

在前端开发过程中&#xff0c;可能某些时候需要自己搭建一台服务器用于一些文件图片请求或者进行后端相关知识的学习。本文主要讲解如何通过nodejs进行一个基础服务器的搭建&#xff0c;包括如何将文件布置的服务器&#xff0c;以及基础接口的开发。后面可能会更新关于通过node…

从根源帮助改变数据延误, Qlik 辅助金融行业实现信贷渠道预测

信贷行业面临的业务挑战 传统方式下&#xff0c;营利性增长和正确管理信贷组合风险的能力是通过静态报告和电子表格完成的&#xff0c;不仅数据单独进行汇总&#xff0c;同时交付过程也存在延迟。这种情况导致组织不得不基于不完整的信息来制定关键的信贷和定价决策。信贷员需…

研发中台拆分过程的一些心得总结

背景在 21 年&#xff0c;中台拆分在 21 年&#xff0c;以下为中台拆分的过程心得&#xff0c;带有一定的主观&#xff0c;偏向于中小团队中台建设参考&#xff08;这里的中小团队指 3-100 人的团队&#xff09;&#xff0c;对于大型团队不太适用&#xff0c;毕竟大型团队人中 …

Elasticsearch8系列【2】Windows环境安装ES8

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 文章目录前言Windows安装Elasticsearch8.5.21. 下载2. 获取密码3. 注册服务4. 登录安装可视化工具前言 Elasticsearch使用Java语言开发&#xff0c;在安装之前需要安装JDK环境。基本支持所有主流操作系统…

Kioptrix Level2靶机

0x01信息收集 nmap -sV -O 10.121.65.83 0x02 万能密码&&命令执行 访问80端口(经测试 443端口并没有办法访问) 登录框尝试弱口令和sql注入 发现存在万能密码 admin# 存在一个ping命令&#xff0c;尝试通过管道符看是否会执行命令 127.0.0.0|id 存在命令执行漏洞&am…