Skip to content

Commit 046dd10

Browse files
committed
split code and add mute prop
1 parent a9806ea commit 046dd10

File tree

2 files changed

+90
-87
lines changed

2 files changed

+90
-87
lines changed

src/index.js

Lines changed: 1 addition & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -2,96 +2,10 @@
22

33
import { getIdFromURL, getTimeFromURL } from './utils'
44
import container from './container'
5+
import YouTubePlayer from './player'
56

67
export { getIdFromURL, getTimeFromURL }
78

8-
let pid = 0
9-
10-
export const YouTubePlayer = {
11-
props: ['playerHeight', 'playerWidth', 'playerVars', 'videoId'],
12-
render (h) {
13-
return h('div', [
14-
h('div', { attrs: { id: this.elementId }})
15-
])
16-
},
17-
template: '<div><div :id="elementId"></div></div>',
18-
watch: {
19-
playerWidth: 'setSize',
20-
playerHeight: 'setSize',
21-
videoId: 'update'
22-
},
23-
data () {
24-
pid += 1
25-
return {
26-
elementId: `youtube-player-${pid}`,
27-
player: {}
28-
}
29-
},
30-
methods: {
31-
setSize () {
32-
this.player.setSize(this.playerWidth || '640', this.playerHeight || '390')
33-
},
34-
setMute () {
35-
if (this.mute && this.player.isMuted()) {
36-
this.player.mute()
37-
} else {
38-
this.player.unMute()
39-
}
40-
},
41-
update (videoId) {
42-
const {
43-
playerVars = { autoplay: 0 }
44-
} = this
45-
const name = `${playerVars.autoplay ? 'load' : 'cue'}VideoById`
46-
if (this.player.hasOwnProperty(name)) {
47-
this.player[name](videoId)
48-
} else {
49-
setTimeout(function () {
50-
this.update(videoId)
51-
}.bind(this), 100)
52-
}
53-
}
54-
},
55-
mounted () {
56-
container.register((YouTube) => {
57-
const {
58-
playerHeight: height = '390',
59-
playerWidth: width = '640',
60-
playerVars = { autoplay: 0, start: 0 },
61-
videoId
62-
} = this
63-
64-
this.player = new YouTube.Player(this.elementId, {
65-
height,
66-
width,
67-
playerVars,
68-
videoId,
69-
events: {
70-
onReady: (event) => {
71-
this.$emit('ready', event.target)
72-
},
73-
onStateChange: (event) => {
74-
if (event.data !== -1) {
75-
this.$emit(container.events[event.data], event.target)
76-
}
77-
},
78-
onError: (event) => {
79-
this.$emit('error', event.target)
80-
}
81-
}
82-
})
83-
84-
this.setMute()
85-
})
86-
},
87-
beforeDestroy () {
88-
if (this.player !== null) {
89-
this.player.destroy()
90-
}
91-
delete this.player
92-
}
93-
}
94-
959
export function install (Vue) {
9610
container.Vue = Vue
9711
YouTubePlayer.ready = YouTubePlayer.mounted

src/player.js

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import container from './container'
2+
3+
let pid = 0
4+
5+
export default {
6+
props: ['playerHeight', 'playerWidth', 'playerVars', 'videoId', 'mute'],
7+
render (h) {
8+
return h('div', [
9+
h('div', { attrs: { id: this.elementId }})
10+
])
11+
},
12+
template: '<div><div :id="elementId"></div></div>',
13+
watch: {
14+
playerWidth: 'setSize',
15+
playerHeight: 'setSize',
16+
videoId: 'update',
17+
mute: 'setMute'
18+
},
19+
data () {
20+
pid += 1
21+
return {
22+
elementId: `youtube-player-${pid}`,
23+
player: {}
24+
}
25+
},
26+
methods: {
27+
setSize () {
28+
this.player.setSize(this.playerWidth || '640', this.playerHeight || '390')
29+
},
30+
setMute () {
31+
if (this.mute && this.player.isMuted()) {
32+
this.player.mute()
33+
} else {
34+
this.player.unMute()
35+
}
36+
},
37+
update (videoId) {
38+
const {
39+
playerVars = { autoplay: 0 }
40+
} = this
41+
const name = `${playerVars.autoplay ? 'load' : 'cue'}VideoById`
42+
if (this.player.hasOwnProperty(name)) {
43+
this.player[name](videoId)
44+
} else {
45+
setTimeout(function () {
46+
this.update(videoId)
47+
}.bind(this), 100)
48+
}
49+
}
50+
},
51+
mounted () {
52+
container.register((YouTube) => {
53+
const {
54+
playerHeight: height = '390',
55+
playerWidth: width = '640',
56+
playerVars = { autoplay: 0, start: 0 },
57+
videoId
58+
} = this
59+
60+
this.player = new YouTube.Player(this.elementId, {
61+
height,
62+
width,
63+
playerVars,
64+
videoId,
65+
events: {
66+
onReady: (event) => {
67+
this.$emit('ready', event.target)
68+
},
69+
onStateChange: (event) => {
70+
if (event.data !== -1) {
71+
this.$emit(container.events[event.data], event.target)
72+
}
73+
},
74+
onError: (event) => {
75+
this.$emit('error', event.target)
76+
}
77+
}
78+
})
79+
80+
this.setMute()
81+
})
82+
},
83+
beforeDestroy () {
84+
if (this.player !== null) {
85+
this.player.destroy()
86+
}
87+
delete this.player
88+
}
89+
}

0 commit comments

Comments
 (0)