[baozhangchao] 3 년 전
부모
커밋
287207956b
1개의 변경된 파일40개의 추가작업 그리고 18개의 파일을 삭제
  1. 40
    18
      src/components/BgMusic.vue

+ 40
- 18
src/components/BgMusic.vue 파일 보기

@@ -1,30 +1,44 @@
1 1
 <template>
2
-  <div class="bg-music" :class="{ ['icon-playing']: playing }" @click="handleClick" v-show="show">
3
-    <audio :src="url" ref="audioRef" loop @loadedmetadata="show = true" @play="handlePlay"></audio>
2
+  <div
3
+    class="bg-music"
4
+    :class="{ ['icon-playing']: playing }"
5
+    @click="handleClick"
6
+    v-show="data.value.show"
7
+  >
8
+    <audio
9
+      :src="data.value.url"
10
+      ref="audioRef"
11
+      loop
12
+      @loadedmetadata="data.value.show = true"
13
+      @play="handlePlay"
14
+    ></audio>
4 15
   </div>
5 16
 </template>
6 17
 
18
+
19
+
7 20
 <script>
21
+import { onMounted, ref } from 'vue'
22
+
8 23
 export default {
9
-  name: 'BgMusic',
10
-  data() {
24
+  setup() {
11 25
     const { origin, pathname } = window.location
12 26
 
13
-    return {
27
+    let data = ref({
14 28
       show: false,
15 29
       playing: false,
16 30
       url: `${origin}${pathname}music/bg.mp3`
17
-    }
18
-  },
19
-  mounted() {
20
-    document.body.addEventListener('click', this.handleClick)
31
+    })
32
+
33
+    onMounted(() => {
34
+      document.body.addEventListener('click', this.handleClick)
21 35
 
22
-    this.$nextTick(() => {
23
-      this.handleIOSAudio()
36
+      this.$nextTick(() => {
37
+        this.handleIOSAudio()
38
+      })
24 39
     })
25
-  },
26
-  methods: {
27
-    handleIOSAudio() {
40
+
41
+    const handleIOSAudio = () => {
28 42
       const isiOS = !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)
29 43
       if (isiOS) {
30 44
         document.addEventListener(
@@ -35,8 +49,8 @@ export default {
35 49
           false
36 50
         )
37 51
       }
38
-    },
39
-    handleClick() {
52
+    }
53
+    const handleClick = () => {
40 54
       if (!this.show || !this.$refs.audioRef) return
41 55
 
42 56
       if (this.playing) {
@@ -46,15 +60,23 @@ export default {
46 60
       }
47 61
 
48 62
       this.playing = !this.playing
49
-    },
63
+    }
50 64
 
51
-    handlePlay() {
65
+    const handlePlay = () => {
52 66
       document.body.removeEventListener('click', this.handleClick)
53 67
     }
68
+
69
+    return {
70
+      data,
71
+      handleIOSAudio,
72
+      handleClick,
73
+      handlePlay
74
+    }
54 75
   }
55 76
 }
56 77
 </script>
57 78
 
79
+
58 80
 <style lang="less" scoped>
59 81
 .bg-music {
60 82
   position: fixed;