xgplayer 2.32.2 → 2.32.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/controls/airplay.js +1 -1
- package/browser/controls/cssFullscreen.js +1 -1
- package/browser/controls/danmu.js +1 -1
- package/browser/controls/definition.js +1 -1
- package/browser/controls/download.js +1 -1
- package/browser/controls/enter.js +1 -1
- package/browser/controls/error.js +1 -1
- package/browser/controls/errorRetry.js +1 -1
- package/browser/controls/flex.js +1 -1
- package/browser/controls/fullscreen.js +1 -1
- package/browser/controls/loading.js +1 -1
- package/browser/controls/memoryPlay.js +1 -1
- package/browser/controls/miniplayer.js +7 -9
- package/browser/controls/mobile.js +1 -1
- package/browser/controls/nativeTextTrack.js +1 -1
- package/browser/controls/pip.js +1 -1
- package/browser/controls/play.js +1 -1
- package/browser/controls/playNext.js +1 -1
- package/browser/controls/playbackRate.js +1 -1
- package/browser/controls/poster.js +1 -1
- package/browser/controls/progress.js +1 -1
- package/browser/controls/reload.js +1 -1
- package/browser/controls/replay.js +1 -1
- package/browser/controls/rotate.js +1 -1
- package/browser/controls/screenShot.js +1 -1
- package/browser/controls/start.js +1 -1
- package/browser/controls/textTrack.js +1 -1
- package/browser/controls/time.js +1 -1
- package/browser/controls/volume.js +1 -1
- package/browser/core_player.js +1 -1
- package/browser/core_player.js.map +1 -1
- package/browser/index.js +7 -9
- package/browser/index.js.map +1 -1
- package/browser/simple_player.js +1 -1
- package/browser/simple_player.js.map +1 -1
- package/dist/controls/airplay.js +1 -1
- package/dist/controls/cssFullscreen.js +1 -1
- package/dist/controls/danmu.js +1 -1
- package/dist/controls/definition.js +1 -1
- package/dist/controls/download.js +1 -1
- package/dist/controls/enter.js +1 -1
- package/dist/controls/error.js +1 -1
- package/dist/controls/errorRetry.js +1 -1
- package/dist/controls/flex.js +1 -1
- package/dist/controls/fullscreen.js +1 -1
- package/dist/controls/loading.js +1 -1
- package/dist/controls/memoryPlay.js +1 -1
- package/dist/controls/miniplayer.js +7 -9
- package/dist/controls/mobile.js +1 -1
- package/dist/controls/nativeTextTrack.js +1 -1
- package/dist/controls/pip.js +1 -1
- package/dist/controls/play.js +1 -1
- package/dist/controls/playNext.js +1 -1
- package/dist/controls/playbackRate.js +1 -1
- package/dist/controls/poster.js +1 -1
- package/dist/controls/progress.js +1 -1
- package/dist/controls/reload.js +1 -1
- package/dist/controls/replay.js +1 -1
- package/dist/controls/rotate.js +1 -1
- package/dist/controls/screenShot.js +1 -1
- package/dist/controls/start.js +1 -1
- package/dist/controls/textTrack.js +1 -1
- package/dist/controls/time.js +1 -1
- package/dist/controls/volume.js +1 -1
- package/dist/core_player.js +2904 -2970
- package/dist/core_player.js.map +1 -1
- package/dist/index.js +3161 -1856
- package/dist/index.js.map +1 -1
- package/dist/simple_player.js +190 -165
- package/dist/simple_player.js.map +1 -1
- package/es/controls/airplay.js +1 -1
- package/es/controls/cssFullscreen.js +1 -1
- package/es/controls/danmu.js +1 -1
- package/es/controls/definition.js +1 -1
- package/es/controls/download.js +1 -1
- package/es/controls/enter.js +1 -1
- package/es/controls/error.js +1 -1
- package/es/controls/errorRetry.js +1 -1
- package/es/controls/flex.js +1 -1
- package/es/controls/fullscreen.js +1 -1
- package/es/controls/i18n.js +1 -1
- package/es/controls/keyboard.js +1 -1
- package/es/controls/loading.js +1 -1
- package/es/controls/localPreview.js +1 -1
- package/es/controls/memoryPlay.js +1 -1
- package/es/controls/miniplayer.js +7 -9
- package/es/controls/mobile.js +1 -1
- package/es/controls/nativeTextTrack.js +1 -1
- package/es/controls/pc.js +1 -1
- package/es/controls/pip.js +1 -1
- package/es/controls/play.js +1 -1
- package/es/controls/playNext.js +1 -1
- package/es/controls/playbackRate.js +1 -1
- package/es/controls/poster.js +1 -1
- package/es/controls/progress.js +1 -1
- package/es/controls/reload.js +1 -1
- package/es/controls/replay.js +1 -1
- package/es/controls/rotate.js +1 -1
- package/es/controls/screenShot.js +1 -1
- package/es/controls/start.js +1 -1
- package/es/controls/textTrack.js +1 -1
- package/es/controls/time.js +1 -1
- package/es/controls/volume.js +1 -1
- package/es/core_player.js +1 -1
- package/es/core_player.js.map +1 -1
- package/es/index.js +7 -9
- package/es/index.js.map +1 -1
- package/es/simple_player.js +1 -1
- package/es/simple_player.js.map +1 -1
- package/package.json +12 -2
- package/types/index.d.ts +0 -11
- package/postcss.config.js +0 -7
- package/src/bind/airplay.js +0 -10
- package/src/bind/cssFullscreen.js +0 -10
- package/src/bind/danmu.js +0 -10
- package/src/bind/definition.js +0 -10
- package/src/bind/download.js +0 -10
- package/src/bind/enter.js +0 -8
- package/src/bind/error.js +0 -8
- package/src/bind/errorRetry.js +0 -8
- package/src/bind/flex.js +0 -8
- package/src/bind/fullscreen.js +0 -10
- package/src/bind/i18n.js +0 -8
- package/src/bind/keyboard.js +0 -8
- package/src/bind/loading.js +0 -8
- package/src/bind/localPreview.js +0 -10
- package/src/bind/memoryPlay.js +0 -10
- package/src/bind/miniplayer.js +0 -10
- package/src/bind/mobile.js +0 -8
- package/src/bind/nativeTextTrack.js +0 -8
- package/src/bind/pc.js +0 -8
- package/src/bind/pip.js +0 -10
- package/src/bind/play.js +0 -10
- package/src/bind/playNext.js +0 -10
- package/src/bind/playbackRate.js +0 -8
- package/src/bind/poster.js +0 -8
- package/src/bind/progress.js +0 -8
- package/src/bind/reload.js +0 -10
- package/src/bind/replay.js +0 -10
- package/src/bind/rotate.js +0 -10
- package/src/bind/screenShot.js +0 -10
- package/src/bind/stallCheck.js +0 -8
- package/src/bind/start.js +0 -10
- package/src/bind/textTrack.js +0 -8
- package/src/bind/time.js +0 -8
- package/src/bind/volume.js +0 -10
- package/src/controls/airplay.js +0 -20
- package/src/controls/cssFullscreen.js +0 -49
- package/src/controls/danmu.js +0 -75
- package/src/controls/definition.js +0 -13
- package/src/controls/download.js +0 -28
- package/src/controls/errorRetry.js +0 -132
- package/src/controls/fullscreen.js +0 -145
- package/src/controls/keyboard.js +0 -214
- package/src/controls/localPreview.js +0 -32
- package/src/controls/memoryPlay.js +0 -14
- package/src/controls/miniplayer.js +0 -128
- package/src/controls/mobile.js +0 -100
- package/src/controls/pc.js +0 -123
- package/src/controls/pip.js +0 -52
- package/src/controls/play.js +0 -34
- package/src/controls/playNext.js +0 -29
- package/src/controls/reload.js +0 -24
- package/src/controls/replay.js +0 -30
- package/src/controls/rotate.js +0 -99
- package/src/controls/screenShot.js +0 -65
- package/src/controls/stallCheck.js +0 -38
- package/src/controls/start.js +0 -60
- package/src/controls/textTrack.js +0 -182
- package/src/controls/volume.js +0 -178
- package/src/controls.js +0 -36
- package/src/core_player.js +0 -13
- package/src/error.js +0 -74
- package/src/index.js +0 -57
- package/src/player.js +0 -553
- package/src/proxy.js +0 -495
- package/src/simple_player.js +0 -42
- package/src/skin/assets/airplay.svg +0 -1
- package/src/skin/assets/download.svg +0 -14
- package/src/skin/assets/exitCssFull.svg +0 -3
- package/src/skin/assets/exitFull.svg +0 -3
- package/src/skin/assets/loading.svg +0 -3
- package/src/skin/assets/panel.svg +0 -4
- package/src/skin/assets/pause.svg +0 -3
- package/src/skin/assets/play.svg +0 -3
- package/src/skin/assets/playNext.svg +0 -3
- package/src/skin/assets/reload.svg +0 -3
- package/src/skin/assets/replay.svg +0 -3
- package/src/skin/assets/requestCssFull.svg +0 -3
- package/src/skin/assets/requestFull.svg +0 -3
- package/src/skin/assets/rotate.svg +0 -11
- package/src/skin/assets/startPause.svg +0 -3
- package/src/skin/assets/startPlay.svg +0 -3
- package/src/skin/assets/volumeLarge.svg +0 -4
- package/src/skin/assets/volumeMuted.svg +0 -4
- package/src/skin/assets/volumeSmall.svg +0 -4
- package/src/skin/controls/airplay.js +0 -44
- package/src/skin/controls/cssFullscreen.js +0 -36
- package/src/skin/controls/danmu.js +0 -214
- package/src/skin/controls/definition.js +0 -251
- package/src/skin/controls/download.js +0 -29
- package/src/skin/controls/enter.js +0 -21
- package/src/skin/controls/error.js +0 -57
- package/src/skin/controls/flex.js +0 -13
- package/src/skin/controls/fullscreen.js +0 -43
- package/src/skin/controls/i18n.js +0 -168
- package/src/skin/controls/loading.js +0 -17
- package/src/skin/controls/localPreview.js +0 -18
- package/src/skin/controls/memoryPlay.js +0 -39
- package/src/skin/controls/miniplayer.js +0 -26
- package/src/skin/controls/nativeTextTrack.js +0 -153
- package/src/skin/controls/pip.js +0 -26
- package/src/skin/controls/play.js +0 -43
- package/src/skin/controls/playNext.js +0 -41
- package/src/skin/controls/playbackRate.js +0 -141
- package/src/skin/controls/poster.js +0 -18
- package/src/skin/controls/progress.js +0 -407
- package/src/skin/controls/reload.js +0 -29
- package/src/skin/controls/replay.js +0 -56
- package/src/skin/controls/rotate.js +0 -29
- package/src/skin/controls/screenShot.js +0 -27
- package/src/skin/controls/start.js +0 -62
- package/src/skin/controls/textTrack.js +0 -113
- package/src/skin/controls/time.js +0 -40
- package/src/skin/controls/volume.js +0 -63
- package/src/skin/index.js +0 -63
- package/src/skin/style/common/animation.scss +0 -16
- package/src/skin/style/common/svg-url.scss +0 -70
- package/src/skin/style/controls/airplay.scss +0 -35
- package/src/skin/style/controls/controls.scss +0 -40
- package/src/skin/style/controls/cssfullscreen.scss +0 -103
- package/src/skin/style/controls/danmu.scss +0 -333
- package/src/skin/style/controls/definition.scss +0 -76
- package/src/skin/style/controls/download.scss +0 -45
- package/src/skin/style/controls/enter.scss +0 -55
- package/src/skin/style/controls/error.scss +0 -34
- package/src/skin/style/controls/fullscreen.scss +0 -60
- package/src/skin/style/controls/icon.scss +0 -12
- package/src/skin/style/controls/live.scss +0 -9
- package/src/skin/style/controls/loading.scss +0 -44
- package/src/skin/style/controls/memoryPlay.scss +0 -28
- package/src/skin/style/controls/miniplayer.scss +0 -104
- package/src/skin/style/controls/pip.scss +0 -42
- package/src/skin/style/controls/placeholder.scss +0 -7
- package/src/skin/style/controls/play.scss +0 -79
- package/src/skin/style/controls/playNext.scss +0 -44
- package/src/skin/style/controls/playbackRate.scss +0 -82
- package/src/skin/style/controls/poster.scss +0 -19
- package/src/skin/style/controls/progress.scss +0 -182
- package/src/skin/style/controls/reload.scss +0 -43
- package/src/skin/style/controls/replay.scss +0 -46
- package/src/skin/style/controls/rotate.scss +0 -41
- package/src/skin/style/controls/screenShot.scss +0 -42
- package/src/skin/style/controls/start.scss +0 -78
- package/src/skin/style/controls/textTrack.scss +0 -87
- package/src/skin/style/controls/time.scss +0 -24
- package/src/skin/style/controls/tips.scss +0 -24
- package/src/skin/style/controls/videoProxy.scss +0 -6
- package/src/skin/style/controls/volume.scss +0 -143
- package/src/skin/style/index.scss +0 -88
- package/src/utils/sniffer.js +0 -47
- package/src/utils/url.js +0 -10
- package/src/utils/util.js +0 -358
- package/src/utils/xgplayerTimeRange.js +0 -17
- package/src/version.js +0 -7
- package/version.json +0 -3
- package/webpack.config.js +0 -168
package/src/controls/mobile.js
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { hasClass } from '../utils/util'
|
|
2
|
-
|
|
3
|
-
let mobile = function () {
|
|
4
|
-
let player = this
|
|
5
|
-
let root = player.root
|
|
6
|
-
let clk = 0; let _click_
|
|
7
|
-
let clickedTime = {
|
|
8
|
-
first: '',
|
|
9
|
-
second: ''
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
player.onElementTouchend = function (e, element) {
|
|
13
|
-
if(!this.config.closeVideoPreventDefault) {
|
|
14
|
-
e.preventDefault()
|
|
15
|
-
}
|
|
16
|
-
if(!this.config.closeVideoStopPropagation) {
|
|
17
|
-
e.stopPropagation()
|
|
18
|
-
}
|
|
19
|
-
let player = this
|
|
20
|
-
if (hasClass(root, 'xgplayer-inactive')) {
|
|
21
|
-
player.emit('focus')
|
|
22
|
-
} else {
|
|
23
|
-
player.emit('blur')
|
|
24
|
-
}
|
|
25
|
-
if (!player.config.closeVideoTouch && !player.isTouchMove) {
|
|
26
|
-
function onTouch() {
|
|
27
|
-
_click_ = setTimeout(function () {
|
|
28
|
-
if (hasClass(player.root, 'xgplayer-nostart')) {
|
|
29
|
-
return false
|
|
30
|
-
} else if (!player.ended) {
|
|
31
|
-
if (player.paused) {
|
|
32
|
-
let playPromise = player.play()
|
|
33
|
-
if (playPromise !== undefined && playPromise) {
|
|
34
|
-
playPromise.catch(err => {})
|
|
35
|
-
}
|
|
36
|
-
} else {
|
|
37
|
-
player.pause()
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
clk = 0
|
|
41
|
-
}, 200)
|
|
42
|
-
}
|
|
43
|
-
if (!player.config.closeVideoClick) {
|
|
44
|
-
clk++
|
|
45
|
-
if (_click_) {
|
|
46
|
-
clearTimeout(_click_)
|
|
47
|
-
}
|
|
48
|
-
if (clk === 1) {
|
|
49
|
-
if(player.config.enableVideoDbltouch) {
|
|
50
|
-
clickedTime.first = new Date()
|
|
51
|
-
} else {
|
|
52
|
-
onTouch()
|
|
53
|
-
}
|
|
54
|
-
} else if (clk === 2) {
|
|
55
|
-
if(player.config.enableVideoDbltouch) {
|
|
56
|
-
clickedTime.second = new Date()
|
|
57
|
-
if (Math.abs(clickedTime.first - clickedTime.second) < 400) {
|
|
58
|
-
// 双击
|
|
59
|
-
onTouch()
|
|
60
|
-
} else {
|
|
61
|
-
clickedTime.first = new Date()
|
|
62
|
-
clk = 1
|
|
63
|
-
}
|
|
64
|
-
} else {
|
|
65
|
-
clk = 0
|
|
66
|
-
}
|
|
67
|
-
} else {
|
|
68
|
-
clk = 0
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function onReady (e) {
|
|
75
|
-
player.video.addEventListener('touchend', function (e) {
|
|
76
|
-
player.onElementTouchend(e, player.video)
|
|
77
|
-
})
|
|
78
|
-
player.video.addEventListener('touchstart', () => {
|
|
79
|
-
player.isTouchMove = false
|
|
80
|
-
})
|
|
81
|
-
player.video.addEventListener('touchmove', () => {
|
|
82
|
-
player.isTouchMove = true
|
|
83
|
-
})
|
|
84
|
-
if (player.config.autoplay) {
|
|
85
|
-
player.start()
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
player.once('ready', onReady)
|
|
89
|
-
|
|
90
|
-
function onDestroy () {
|
|
91
|
-
player.off('ready', onReady)
|
|
92
|
-
player.off('destroy', onDestroy)
|
|
93
|
-
}
|
|
94
|
-
player.once('destroy', onDestroy)
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export default {
|
|
98
|
-
name: 'mobile',
|
|
99
|
-
method: mobile
|
|
100
|
-
}
|
package/src/controls/pc.js
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { hasClass } from '../utils/util'
|
|
2
|
-
|
|
3
|
-
let pc = function () {
|
|
4
|
-
let player = this
|
|
5
|
-
if(!player.controls || !player.video) return
|
|
6
|
-
let controls = player.controls; let root = player.root
|
|
7
|
-
let clk = 0; let _click_
|
|
8
|
-
|
|
9
|
-
player.onElementClick = function (e, element) {
|
|
10
|
-
if(!this.config.closeVideoPreventDefault) {
|
|
11
|
-
e.preventDefault()
|
|
12
|
-
}
|
|
13
|
-
if(!this.config.closeVideoStopPropagation) {
|
|
14
|
-
e.stopPropagation()
|
|
15
|
-
}
|
|
16
|
-
let player = this
|
|
17
|
-
if (!player.config.closeVideoClick) {
|
|
18
|
-
clk++
|
|
19
|
-
if (_click_) {
|
|
20
|
-
clearTimeout(_click_)
|
|
21
|
-
}
|
|
22
|
-
if (clk === 1) {
|
|
23
|
-
_click_ = setTimeout(function () {
|
|
24
|
-
if (hasClass(player.root, 'xgplayer-nostart')) {
|
|
25
|
-
return false
|
|
26
|
-
} else if (!player.ended) {
|
|
27
|
-
if (player.paused) {
|
|
28
|
-
let playPromise = player.play()
|
|
29
|
-
if (playPromise !== undefined && playPromise) {
|
|
30
|
-
playPromise.catch(err => {})
|
|
31
|
-
}
|
|
32
|
-
} else {
|
|
33
|
-
player.pause()
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
clk = 0
|
|
37
|
-
}, 200)
|
|
38
|
-
} else {
|
|
39
|
-
clk = 0
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
player.video.addEventListener('click', function (e) { player.onElementClick(e, player.video) }, false)
|
|
44
|
-
|
|
45
|
-
player.onElementDblclick = function (e, element) {
|
|
46
|
-
if(!this.config.closeVideoPreventDefault) {
|
|
47
|
-
e.preventDefault()
|
|
48
|
-
}
|
|
49
|
-
if(!this.config.closeVideoStopPropagation) {
|
|
50
|
-
e.stopPropagation()
|
|
51
|
-
}
|
|
52
|
-
let player = this
|
|
53
|
-
if (!player.config.closeVideoDblclick) {
|
|
54
|
-
let fullscreen = controls.querySelector('.xgplayer-fullscreen')
|
|
55
|
-
if (fullscreen) {
|
|
56
|
-
let clk
|
|
57
|
-
if (document.createEvent) {
|
|
58
|
-
clk = document.createEvent('Event')
|
|
59
|
-
clk.initEvent('click', true, true)
|
|
60
|
-
} else {
|
|
61
|
-
clk = new Event('click')
|
|
62
|
-
}
|
|
63
|
-
fullscreen.dispatchEvent(clk)
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
player.video.addEventListener('dblclick', function (e) { player.onElementDblclick(e, player.video) }, false)
|
|
68
|
-
|
|
69
|
-
function onMouseEnter () {
|
|
70
|
-
clearTimeout(player.leavePlayerTimer)
|
|
71
|
-
player.emit('focus', player)
|
|
72
|
-
}
|
|
73
|
-
root.addEventListener('mouseenter', onMouseEnter)
|
|
74
|
-
|
|
75
|
-
function onMouseLeave () {
|
|
76
|
-
if(!player.config.closePlayerBlur) {
|
|
77
|
-
player.leavePlayerTimer = setTimeout(function () {
|
|
78
|
-
player.emit('blur', player)
|
|
79
|
-
}, player.config.leavePlayerTime || 0)
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
root.addEventListener('mouseleave', onMouseLeave)
|
|
83
|
-
|
|
84
|
-
function onControlMouseEnter (e) {
|
|
85
|
-
if (player.userTimer) {
|
|
86
|
-
clearTimeout(player.userTimer)
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
controls.addEventListener('mouseenter', onControlMouseEnter)
|
|
90
|
-
|
|
91
|
-
function onControlMouseLeave (e) {
|
|
92
|
-
if(!player.config.closeControlsBlur) {
|
|
93
|
-
player.emit('focus', player)
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
controls.addEventListener('mouseleave', onControlMouseLeave)
|
|
97
|
-
|
|
98
|
-
function onControlClick (e) {
|
|
99
|
-
e.preventDefault()
|
|
100
|
-
e.stopPropagation()
|
|
101
|
-
}
|
|
102
|
-
controls.addEventListener('click', onControlClick)
|
|
103
|
-
|
|
104
|
-
function onReady (e) {
|
|
105
|
-
if (player.config.autoplay) {
|
|
106
|
-
player.start()
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
player.once('ready', onReady)
|
|
110
|
-
|
|
111
|
-
function onDestroy () {
|
|
112
|
-
root.removeEventListener('mouseenter', onMouseEnter)
|
|
113
|
-
root.removeEventListener('mouseleave', onMouseLeave)
|
|
114
|
-
player.off('ready', onReady)
|
|
115
|
-
player.off('destroy', onDestroy)
|
|
116
|
-
}
|
|
117
|
-
player.once('destroy', onDestroy)
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export default {
|
|
121
|
-
name: 'pc',
|
|
122
|
-
method: pc
|
|
123
|
-
}
|
package/src/controls/pip.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { PresentationMode, checkWebkitSetPresentationMode, addClass, removeClass} from '../utils/util'
|
|
3
|
-
|
|
4
|
-
let pip = function () {
|
|
5
|
-
let player = this
|
|
6
|
-
function onPipBtnClick () {
|
|
7
|
-
if (player.video !== document.pictureInPictureElement) {
|
|
8
|
-
player.video.requestPictureInPicture()
|
|
9
|
-
} else {
|
|
10
|
-
document.exitPictureInPicture()
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
player.on('pipBtnClick', onPipBtnClick)
|
|
14
|
-
|
|
15
|
-
const onWebkitpresentationmodechanged = (e) => {
|
|
16
|
-
const mode = player.video.webkitPresentationMode
|
|
17
|
-
this.pMode = mode
|
|
18
|
-
if (mode === PresentationMode.PIP) {
|
|
19
|
-
// 进入pip模式
|
|
20
|
-
player.emit('requestPictureInPicture', e.pictureInPictureWindow)
|
|
21
|
-
} else if (mode === PresentationMode.INLINE) {
|
|
22
|
-
// 退出pip,进去inline模式
|
|
23
|
-
player.emit('exitPictureInPicture')
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
player.video.addEventListener('enterpictureinpicture', function (pipWindow) {
|
|
28
|
-
addClass(player.root, 'xgplayer-pip-active')
|
|
29
|
-
player.emit('requestPictureInPicture', pipWindow)
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
player.video.addEventListener('leavepictureinpicture', function () {
|
|
33
|
-
removeClass(player.root, 'xgplayer-pip-active')
|
|
34
|
-
player.emit('exitPictureInPicture')
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
checkWebkitSetPresentationMode(player.video) &&
|
|
38
|
-
player.video.addEventListener('webkitpresentationmodechanged', onWebkitpresentationmodechanged)
|
|
39
|
-
|
|
40
|
-
function onDestroy () {
|
|
41
|
-
player.off('pipBtnClick', onPipBtnClick)
|
|
42
|
-
player.off('destroy', onDestroy)
|
|
43
|
-
checkWebkitSetPresentationMode(player.video) &&
|
|
44
|
-
player.video.removeEventListener('webkitpresentationmodechanged', onWebkitpresentationmodechanged)
|
|
45
|
-
}
|
|
46
|
-
player.once('destroy', onDestroy)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export default {
|
|
50
|
-
name: 'pip',
|
|
51
|
-
method: pip
|
|
52
|
-
}
|
package/src/controls/play.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { hasClass } from '../utils/util'
|
|
2
|
-
|
|
3
|
-
let play = function () {
|
|
4
|
-
let player = this
|
|
5
|
-
|
|
6
|
-
function onPlayBtnClick () {
|
|
7
|
-
if (!player.config.allowPlayAfterEnded && player.ended) {
|
|
8
|
-
return
|
|
9
|
-
}
|
|
10
|
-
if(hasClass(player.root, 'xgplayer-nostart')) {
|
|
11
|
-
player.start()
|
|
12
|
-
}
|
|
13
|
-
if (player.paused) {
|
|
14
|
-
let playPromise = player.play()
|
|
15
|
-
if (playPromise !== undefined && playPromise) {
|
|
16
|
-
playPromise.catch(err => {})
|
|
17
|
-
}
|
|
18
|
-
} else {
|
|
19
|
-
player.pause()
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
player.on('playBtnClick', onPlayBtnClick)
|
|
23
|
-
|
|
24
|
-
function onDestroy () {
|
|
25
|
-
player.off('playBtnClick', onPlayBtnClick)
|
|
26
|
-
player.off('destroy', onDestroy)
|
|
27
|
-
}
|
|
28
|
-
player.once('destroy', onDestroy)
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export default {
|
|
32
|
-
name: 'play',
|
|
33
|
-
method: play
|
|
34
|
-
}
|
package/src/controls/playNext.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
let playNext = function () {
|
|
2
|
-
let player = this
|
|
3
|
-
let nextBtn = player.config.playNext
|
|
4
|
-
player.currentVideoIndex = -1
|
|
5
|
-
|
|
6
|
-
function onPlayNextBtnClick () {
|
|
7
|
-
if (player.currentVideoIndex + 1 < nextBtn.urlList.length) {
|
|
8
|
-
player.currentVideoIndex++
|
|
9
|
-
player.video.autoplay = true
|
|
10
|
-
player.src = nextBtn.urlList[player.currentVideoIndex]
|
|
11
|
-
player.emit('playerNext', player.currentVideoIndex + 1)
|
|
12
|
-
if (player.currentVideoIndex + 1 === nextBtn.urlList.length) {
|
|
13
|
-
player.emit('urlListEnd')
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
player.on('playNextBtnClick', onPlayNextBtnClick)
|
|
18
|
-
|
|
19
|
-
function onDestroy () {
|
|
20
|
-
player.off('playNextBtnClick', onPlayNextBtnClick)
|
|
21
|
-
player.off('destroy', onDestroy)
|
|
22
|
-
}
|
|
23
|
-
player.once('destroy', onDestroy)
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export default {
|
|
27
|
-
name: 'playNext',
|
|
28
|
-
method: playNext
|
|
29
|
-
}
|
package/src/controls/reload.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { removeClass } from '../utils/util'
|
|
2
|
-
|
|
3
|
-
let reload = function () {
|
|
4
|
-
let player = this
|
|
5
|
-
let reloadConfig = player.config.reload
|
|
6
|
-
if (!reloadConfig) { return }
|
|
7
|
-
|
|
8
|
-
function onReloadBtnClick () {
|
|
9
|
-
removeClass(player.root, 'xgplayer-is-error')
|
|
10
|
-
player.src = player.config.url
|
|
11
|
-
}
|
|
12
|
-
player.on('reloadBtnClick', onReloadBtnClick)
|
|
13
|
-
|
|
14
|
-
function onDestroy () {
|
|
15
|
-
player.off('reloadBtnClick', onReloadBtnClick)
|
|
16
|
-
player.off('destroy', onDestroy)
|
|
17
|
-
}
|
|
18
|
-
player.once('destroy', onDestroy)
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export default {
|
|
22
|
-
name: 'reload',
|
|
23
|
-
method: reload
|
|
24
|
-
}
|
package/src/controls/replay.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { addClass, removeClass } from '../utils/util'
|
|
2
|
-
|
|
3
|
-
let replay = function () {
|
|
4
|
-
let player = this
|
|
5
|
-
let root = player.root
|
|
6
|
-
|
|
7
|
-
function onReplayBtnClick () {
|
|
8
|
-
removeClass(root, 'xgplayer-is-replay')
|
|
9
|
-
player.replay()
|
|
10
|
-
}
|
|
11
|
-
player.on('replayBtnClick', onReplayBtnClick)
|
|
12
|
-
|
|
13
|
-
function onEnded () {
|
|
14
|
-
if (!player.config.loop) {
|
|
15
|
-
addClass(root, 'xgplayer-is-replay')
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
player.on('ended', onEnded)
|
|
19
|
-
|
|
20
|
-
function onDestroy () {
|
|
21
|
-
player.off('replayBtnClick', onReplayBtnClick)
|
|
22
|
-
player.off('destroy', onDestroy)
|
|
23
|
-
}
|
|
24
|
-
player.once('destroy', onDestroy)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export default {
|
|
28
|
-
name: 'replay',
|
|
29
|
-
method: replay
|
|
30
|
-
}
|
package/src/controls/rotate.js
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
let rotate = function () {
|
|
2
|
-
let player = this
|
|
3
|
-
let rotateConfig = player.config.rotate
|
|
4
|
-
if (!rotateConfig) { return }
|
|
5
|
-
|
|
6
|
-
function onRotateBtnClick () {
|
|
7
|
-
player.rotate(rotateConfig.clockwise, rotateConfig.innerRotate)
|
|
8
|
-
}
|
|
9
|
-
player.on('rotateBtnClick', onRotateBtnClick)
|
|
10
|
-
|
|
11
|
-
function onDestroy () {
|
|
12
|
-
player.off('rotateBtnClick', onRotateBtnClick)
|
|
13
|
-
player.off('destroy', onDestroy)
|
|
14
|
-
}
|
|
15
|
-
player.once('destroy', onDestroy)
|
|
16
|
-
|
|
17
|
-
player.updateRotateDeg = function () {
|
|
18
|
-
let player = this;
|
|
19
|
-
if (!player.rotateDeg) {
|
|
20
|
-
player.rotateDeg = 0
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
let width = player.root.offsetWidth
|
|
24
|
-
let height = player.root.offsetHeight
|
|
25
|
-
let targetWidth = player.video.videoWidth
|
|
26
|
-
let targetHeight = player.video.videoHeight
|
|
27
|
-
|
|
28
|
-
if (!player.config.rotate.innerRotate && player.config.rotate.controlsFix) {
|
|
29
|
-
player.root.style.width = height + 'px'
|
|
30
|
-
player.root.style.height = width + 'px'
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
let scale
|
|
34
|
-
if (player.rotateDeg === 0.25 || player.rotateDeg === 0.75) {
|
|
35
|
-
if (player.config.rotate.innerRotate) {
|
|
36
|
-
if ((targetWidth / targetHeight) > (height / width)) { // 旋转后纵向撑满
|
|
37
|
-
let videoWidth = 0
|
|
38
|
-
if ((targetHeight / targetWidth) > (height / width)) { // 旋转前是纵向撑满
|
|
39
|
-
videoWidth = height * targetWidth / targetHeight
|
|
40
|
-
} else { // 旋转前是横向撑满
|
|
41
|
-
videoWidth = width
|
|
42
|
-
}
|
|
43
|
-
scale = height / videoWidth
|
|
44
|
-
} else { // 旋转后横向撑满
|
|
45
|
-
let videoHeight = 0
|
|
46
|
-
if ((targetHeight / targetWidth) > (height / width)) { // 旋转前是纵向撑满
|
|
47
|
-
videoHeight = height
|
|
48
|
-
} else { // 旋转前是横向撑满
|
|
49
|
-
videoHeight = width * targetHeight / targetWidth
|
|
50
|
-
}
|
|
51
|
-
scale = width / videoHeight
|
|
52
|
-
}
|
|
53
|
-
} else {
|
|
54
|
-
if (width >= height) {
|
|
55
|
-
scale = width / height
|
|
56
|
-
} else {
|
|
57
|
-
scale = height / width
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
scale = Number(scale.toFixed(5))
|
|
61
|
-
} else {
|
|
62
|
-
scale = 1
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (player.config.rotate.innerRotate) {
|
|
66
|
-
player.video.style.transformOrigin = 'center center'
|
|
67
|
-
player.video.style.transform = `rotate(${player.rotateDeg}turn) scale(${scale})`
|
|
68
|
-
player.video.style.webKitTransform = `rotate(${player.rotateDeg}turn) scale(${scale})`
|
|
69
|
-
} else {
|
|
70
|
-
if (player.config.rotate.controlsFix) {
|
|
71
|
-
player.video.style.transformOrigin = 'center center'
|
|
72
|
-
player.video.style.transform = `rotate(${player.rotateDeg}turn) scale(${scale})`
|
|
73
|
-
player.video.style.webKitTransform = `rotate(${player.rotateDeg}turn) scale(${scale})`
|
|
74
|
-
} else {
|
|
75
|
-
player.root.style.transformOrigin = 'center center'
|
|
76
|
-
player.root.style.transform = `rotate(${player.rotateDeg}turn) scale(${1})`
|
|
77
|
-
player.root.style.webKitTransform = `rotate(${player.rotateDeg}turn) scale(${1})`
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
player.rotate = function (clockwise = false, innerRotate = true, times = 1) {
|
|
83
|
-
let player = this;
|
|
84
|
-
if (!player.rotateDeg) {
|
|
85
|
-
player.rotateDeg = 0
|
|
86
|
-
}
|
|
87
|
-
let factor = clockwise ? 1 : -1
|
|
88
|
-
|
|
89
|
-
player.rotateDeg = (player.rotateDeg + 1 + factor * 0.25 * times) % 1
|
|
90
|
-
this.updateRotateDeg()
|
|
91
|
-
|
|
92
|
-
player.emit('rotate', player.rotateDeg * 360)
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export default {
|
|
97
|
-
name: 'rotate',
|
|
98
|
-
method: rotate
|
|
99
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
let screenShot = function () {
|
|
2
|
-
let player = this
|
|
3
|
-
let screenShotOptions = player.config.screenShot
|
|
4
|
-
let callBack = null
|
|
5
|
-
if (!screenShotOptions) {
|
|
6
|
-
return
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
player.video.setAttribute('crossOrigin', 'anonymous')
|
|
10
|
-
|
|
11
|
-
let encoderOptions = 0.92
|
|
12
|
-
|
|
13
|
-
if (screenShotOptions.quality || screenShotOptions.quality === 0) {
|
|
14
|
-
encoderOptions = screenShotOptions.quality
|
|
15
|
-
}
|
|
16
|
-
let type = screenShotOptions.type === undefined ? 'image/png' : screenShotOptions.type
|
|
17
|
-
let format = screenShotOptions.format === undefined ? '.png' : screenShotOptions.format
|
|
18
|
-
|
|
19
|
-
let canvas = document.createElement('canvas')
|
|
20
|
-
let canvasCtx = canvas.getContext('2d')
|
|
21
|
-
let img = new Image()
|
|
22
|
-
|
|
23
|
-
canvas.width = this.config.width || 600
|
|
24
|
-
canvas.height = this.config.height || 337.5
|
|
25
|
-
let saveScreenShot = function (data, filename) {
|
|
26
|
-
let saveLink = document.createElement('a')
|
|
27
|
-
saveLink.href = data
|
|
28
|
-
saveLink.download = filename
|
|
29
|
-
let event = document.createEvent('MouseEvents')
|
|
30
|
-
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
|
|
31
|
-
saveLink.dispatchEvent(event)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
player.screenShot = function (save = true) {
|
|
35
|
-
save = screenShotOptions.saveImg === undefined ? save : screenShotOptions.saveImg
|
|
36
|
-
canvas.width = player.video.videoWidth || 600
|
|
37
|
-
canvas.height = player.video.videoHeight || 337.5
|
|
38
|
-
callBack = screenShotOptions.callBack
|
|
39
|
-
img.onload = (function () {
|
|
40
|
-
canvasCtx.drawImage(player.video, 0, 0, canvas.width, canvas.height)
|
|
41
|
-
img.src = canvas.toDataURL(type, encoderOptions).replace(type, 'image/octet-stream')
|
|
42
|
-
let screenShotImg = img.src.replace(/^data:image\/[^;]+/, 'data:application/octet-stream')
|
|
43
|
-
let saveFileName = screenShotOptions.fileName || player.lang.SCREENSHOT
|
|
44
|
-
|
|
45
|
-
player.emit('screenShot', screenShotImg)
|
|
46
|
-
if (save && callBack) {
|
|
47
|
-
callBack(screenShotImg, saveFileName, format)
|
|
48
|
-
} else {
|
|
49
|
-
save && saveScreenShot(screenShotImg, saveFileName + format)
|
|
50
|
-
}
|
|
51
|
-
})()
|
|
52
|
-
}
|
|
53
|
-
player.on('screenShotBtnClick', player.screenShot)
|
|
54
|
-
|
|
55
|
-
function onDestroy () {
|
|
56
|
-
player.off('screenShotBtnClick', player.screenShot)
|
|
57
|
-
player.off('destroy', onDestroy)
|
|
58
|
-
}
|
|
59
|
-
player.once('destroy', onDestroy)
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export default {
|
|
63
|
-
name: 'screenShot',
|
|
64
|
-
method: screenShot
|
|
65
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import Errors from '../error'
|
|
2
|
-
|
|
3
|
-
function stallCheck () {
|
|
4
|
-
const player = this
|
|
5
|
-
if(!player.config.enableStallCheck) return;
|
|
6
|
-
let lastCurrentTime = 0;
|
|
7
|
-
let stallFlag, stallCheckTimer, progressTimer;
|
|
8
|
-
player.once('complete', () => {
|
|
9
|
-
progressTimer = setInterval(() => {
|
|
10
|
-
if (player.currentTime - (lastCurrentTime || 0) > 0.1 || player.paused) {
|
|
11
|
-
if (stallFlag === 1 || stallFlag === 2) {
|
|
12
|
-
stallFlag = 0;
|
|
13
|
-
clearTimeout(stallCheckTimer);
|
|
14
|
-
stallCheckTimer = null;
|
|
15
|
-
}
|
|
16
|
-
} else {
|
|
17
|
-
if (!stallFlag) {
|
|
18
|
-
stallFlag = 1;
|
|
19
|
-
stallCheckTimer = setTimeout(() => {
|
|
20
|
-
if (stallFlag === 1) {
|
|
21
|
-
stallFlag = 2;
|
|
22
|
-
player.emit('error', new Errors('STALL'));
|
|
23
|
-
}
|
|
24
|
-
stallCheckTimer = null;
|
|
25
|
-
}, 20000);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
lastCurrentTime = player.currentTime;
|
|
29
|
-
}, 1000);
|
|
30
|
-
})
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export default {
|
|
34
|
-
name: 'stallCheck',
|
|
35
|
-
method: stallCheck
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
|
package/src/controls/start.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { addClass, hasClass, removeClass } from '../utils/util'
|
|
2
|
-
|
|
3
|
-
let start = function () {
|
|
4
|
-
let player = this
|
|
5
|
-
let root = player.root
|
|
6
|
-
|
|
7
|
-
function onCanPlay () {
|
|
8
|
-
player.off('canplay', onCanPlay)
|
|
9
|
-
let playPromise = player.play()
|
|
10
|
-
if (playPromise !== undefined && playPromise) {
|
|
11
|
-
playPromise.catch(err => {})
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
function onStartBtnClick () {
|
|
16
|
-
if (hasClass(root, 'xgplayer-nostart')) {
|
|
17
|
-
removeClass(root, 'xgplayer-nostart') // for ie quick switch
|
|
18
|
-
addClass(root, 'xgplayer-is-enter')
|
|
19
|
-
|
|
20
|
-
if(typeof root.contains === 'function') {
|
|
21
|
-
if((player.video && player.video.nodeType === 1 && !root.contains(player.video)) || (player.video && player.video.nodeType !== 1 && player.video.mediaSource === undefined)) {
|
|
22
|
-
player.once('canplay', onCanPlay)
|
|
23
|
-
player.start()
|
|
24
|
-
} else {
|
|
25
|
-
onCanPlay()
|
|
26
|
-
}
|
|
27
|
-
} else {
|
|
28
|
-
if((player.video && player.video.nodeType === 1 && !root.querySelector(this.videoConfig.mediaType)) || (player.video && player.video.nodeType !== 1 && player.video.mediaSource === undefined)) {
|
|
29
|
-
player.once('canplay', onCanPlay)
|
|
30
|
-
player.start()
|
|
31
|
-
} else {
|
|
32
|
-
onCanPlay()
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
} else {
|
|
36
|
-
if (player.paused) {
|
|
37
|
-
removeClass(root, 'xgplayer-nostart xgplayer-isloading')
|
|
38
|
-
setTimeout(() => {
|
|
39
|
-
let playPromise = player.play()
|
|
40
|
-
if (playPromise !== undefined && playPromise) {
|
|
41
|
-
playPromise.catch(err => {})
|
|
42
|
-
}
|
|
43
|
-
}, 10)
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
player.on('startBtnClick', onStartBtnClick)
|
|
48
|
-
|
|
49
|
-
function onDestroy () {
|
|
50
|
-
player.off('startBtnClick', onStartBtnClick)
|
|
51
|
-
player.off('canplay', onCanPlay)
|
|
52
|
-
player.off('destroy', onDestroy)
|
|
53
|
-
}
|
|
54
|
-
player.once('destroy', onDestroy)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export default {
|
|
58
|
-
name: 'start',
|
|
59
|
-
method: start
|
|
60
|
-
}
|