h5页面添加背景音乐

【需求】h5页面添加背景音乐,支持微信、QQ、各种APP。

【实现思路】1、通过audio标签,设置自动播放,是一种方法,但是此方法只适合微信、QQ,并不兼容我司的APP,需要主动触发下播放事件。

      2、针对可以自动播放的渠道,通过this.audio.addEventListene监听playing事件,控制小喇叭的状态。

【知识点】audio标签、addEventListener、classList

【代码】封装了一个公共组件:

 1 <template>
 2     <div class="music">
 3         <audio src={{musicsrc}} id="Jaudio" class="media-audio"  preload loop="loop" hidden="false"></audio>  
 4         <div class="icon"></div>
 5     </div>
 6 </template>
 7 <script>
 8 /* eslint-disable */
 9     export default{
10         data() {
11             return {}
12         },
13         props: {
14             musicsrc: {}
15         },
16         methods: {
17              // 音乐背景 
18             play() {
19                 this.audio.play()
20                 this.icon.classList.add('play');
21                 this.icon.classList.remove('stop');
22             },
23             stop() {
24                 this.audio.pause()
25                 this.icon.classList.add('stop');
26                 this.icon.classList.remove('play');
27             },
28             audioAutoPlay() {
29                 this.audio.play();
30                 var that=this;
31                 //控制小喇叭的播放状态
32                 this.audio.addEventListener("playing", function(){        
33                     that.icon.classList.add('play');
34                     that.icon.classList.remove('stop');
35                 });
36                 this.audio.addEventListener("pause", function(){
37                     that.icon.classList.add('stop');
38                     that.icon.classList.remove('play');
39                 });               
40                 document.addEventListener("WeixinJSBridgeReady", function () {  
41                     that.audio.play();
42                     this.icon.classList.add('play');
43                     this.icon.classList.remove('stop');
44                 }, false);
45                 this.icon.addEventListener("click", () => {
46                     if (this.audio.paused) {
47                         this.play()
48                     } else {
49                         this.stop()
50                     } 
51                 }, false);
52                 // 触发播放音乐效果,解决浏览器或者APP自动播放问题
53                 document.addEventListener("touchstart", () => {
54                     if(!this.isPlay) {
55                         this.play();
56                         this.isPlay = true;
57                     }
58                 }, false) 
59             },
60           
61         },
62         ready() {
63             this.audio = window.document.querySelector('.media-audio');
64             this.icon = window.document.querySelector('.icon');        
65             this.audioAutoPlay();
66         }
67     }
68 </script>
69 <style  rel="stylesheet/scss" lang="scss">
70     .music {
71     position:fixed;
72     z-index:1000;
73     top:50px;
74     right:20px;
75     
76     .icon{
77         60px;
78         height:50px;
79         background:url('https://pic.51zhangdan.com/u51/storage/dd/df9e5296-1fa9-f3c4-6151-afeab9c2f34d.png') no-repeat;
80         background-size: 100%;  
81         &.play{
82             animation: 4s linear 0s normal none infinite rotate;
83             // animation-fill-mode:forwards;
84             // animation-play-state: running;
85         }
86         &.stop{
87             // animation: 4s linear 0s normal none infinite rotate;
88             // animation-fill-mode:forwards;
89             // animation-play-state: paused;
90         }
91     }
92 }
93 
94 @keyframes rotate{
95     from{transform:rotate(0deg)}
96     to{transform:rotate(360deg)}
97 }
98 </style>

 组件调用:

 1 <template>
 2     <bgmusic :musicsrc='musicbg'></bgmusic> 
 3 </template>
 4 <script>
 5  import bgmusic from '../../components/music/bgmusic.vue'
 6 
 7  export default {
 8         data() {
 9             return {
10                 musicbg: "../../assets/music/musicbg.mp3",
11             }
12         }
13 }    
14 
15 </script>
原文地址:https://www.cnblogs.com/xiaoli52qd/p/7354846.html