vue音乐添加,控制开关

本文记录了一个手机微信端项目中解决音乐播放问题的方法。在iOS设备上,由于系统限制,需要用户触摸后才能播放声音,而在Android设备上则可以直接自动播放。代码示例展示了如何在Vue.js中实现自动播放音乐,包括监听DOM加载和WeixinJSBridgeReady事件,以及在用户点击开关按钮时控制音乐播放与暂停。
摘要由CSDN通过智能技术生成

最近做的手机微信端项目,没有声音,应客户要求,加上了声音,ios手机端需要用户触碰后才能播放声音,安卓上来直接就可以播放声音,博主在这里记录一下代码内容。

<template>
  <div id="father">
    <audio
      src="http://xxx.mp3"
      id="MusicPlay"
      class="media-audio"
      loop
      autoplay
      preload
      ref="MusicPlay"
    ></audio>
    <audio
      :src="mus2"
      id="MusicPlay2"
      class="media-audio"
      loop
      preload
      ref="MusicPlay2"
    ></audio>
    <keep-alive>
      <router-view v-if="$route.meta.keepAlive"></router-view>
    </keep-alive>
    <!-- <transition name="slide-fade"> -->
    <router-view v-if="!$route.meta.keepAlive"></router-view>
    <!-- </transition> -->

    <MySwitch></MySwitch>
  </div>
</template>

<script>
import MySwitch from "./components/switch.vue";
export default {
  data() {
    return {
      mus2: require("./xxx.mp3"),
    }
  },
  components: {
    MySwitch
  },
  mounted() {
    let vm = this;
    setTimeout(() => {
    this.autoPlayMusic();
    }, 1000);
  },
  activated(){
    this.musicPlay(true);
  },
  methods: {
    autoPlayMusic() {
      // 自动播放音乐效果,解决浏览器或者APP自动播放问题
      document.body.addEventListener("touchstart", this.musicInBrowserHandler);
      // 自动播放音乐效果,解决微信自动播放问题
      document.addEventListener("DOMContentLoaded", this.musicInWeixinHandler);
    },
    musicInBrowserHandler() {
      this.musicPlay(true);
      this.musicPlay2(false);
      document.body.removeEventListener("touchstart", this.musicInBrowserHandler);
    },
    musicInWeixinHandler() {
      this.musicPlay(true);
      document.addEventListener(
        "WeixinJSBridgeReady",
        function () {
          this.musicPlay(true);
          this.musicPlay2(false);
        },
        false
      );
      document.removeEventListener("DOMContentLoaded", this.musicInWeixinHandler);
    },
    musicPlay(isPlay) {
      var audio = document.getElementById("MusicPlay");
      if (isPlay && audio.paused) {
        audio.play();
      }
      if (!isPlay && !audio.paused) {
        audio.pause();
      }
    },

    musicPlay2(isPlay) {
      var audio2 = document.getElementById("MusicPlay2");
      if (isPlay && audio2.paused) {
        audio2.play();
      }
      if (!isPlay && !audio2.paused) {
        audio2.pause();
      }
    },

    // musicPause() {
    //   this.$refs.MusicPlay.pause();
    // },

    // /**
    //  * 播放音乐并开始旋转
    //  */
    // musicPlay() {
    //   this.$refs.MusicPlay.play();
    // },
  },
};
</script>
<style lang="scss">
html,
body {
  padding: 0;
  margin: 0;
  width: 100%;
  height: 100%;
}

#father {
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;

  .slide-fade {
    position: absolute;
    left: 0;
    right: 0;
  }

  .slide-fade-enter-active {
    transition: all 1.2s ease;
  }
  .slide-fade-leave-active {
    transition: all 0.1s cubic-bezier(2, 0.6, 0.8, 1);
  }
  .slide-fade-enter,
  .slide-fade-leave-to {
    left: 0;
    right: 0;
    opacity: 0;
  }
}
</style>

开关按钮

<template>
  <!-- <div :class="cname"></div> -->
  <div :class="cname" @click="onClick()"></div>
</template>

<script>
export default {
  data() {
    return {
      flag: true,
      //   cname: "music",
      cname: "ison",
    };
  },
  methods: {
    onClick() {
      this.flag = !this.flag;
      //   this.flag ? (this.cname = "music pause") : (this.cname = "music");
      this.flag ? (this.cname = "ison") : (this.cname = "isoff");

      if (this.flag) {
        this.musicPlay(true);
      } else {
        this.musicPlay(false);
        this.musicPlay2(false);
      }
    },
    musicPlay(isPlay) {
      var audio = document.getElementById("MusicPlay");
      if (isPlay && audio.paused) {
        audio.play();
      }
      if (!isPlay && !audio.paused) {
        audio.pause();
      }
    },

    musicPlay2(isPlay) {
      var audio2 = document.getElementById("MusicPlay2");
      if (isPlay && audio2.paused) {
        audio2.play();
      }
      if (!isPlay && !audio2.paused) {
        audio2.pause();
      }
    },
  },
};
</script>

<style lang="scss">
.ison {
  width: 2.5rem;
  height: 2.5rem;
  position: absolute;
  top: 1.2rem;
  right: 0.5rem;
  transform-origin: center center;
  animation: rotate 5s linear infinite; /*开始动画后无限循环,用来控制rotate*/
  background: url("../assets/nc/main/ison.png") no-repeat;
  background-repeat: no-repeat;
  background-size: 100% 100%;
}

.isoff {
  width: 2.5rem;
  height: 2.5rem;
  position: absolute;
  top: 1.2rem;
  right: 0.5rem;

  background: url("../assets/nc/main/isoff.png") no-repeat;
  background-repeat: no-repeat;
  background-size: 100% 100%;
}

@keyframes rotate {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(359deg);
  }
}
</style>

项目着急,写的粗糙,这里只做记录,望大神勿喷。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值