xgplayer 2.32.2 → 2.32.3

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.
Files changed (188) hide show
  1. package/browser/controls/danmu.js +3 -1
  2. package/browser/controls/errorRetry.js +1 -1
  3. package/browser/controls/nativeTextTrack.js +1 -1
  4. package/browser/core_player.js +1 -1
  5. package/browser/core_player.js.map +1 -1
  6. package/browser/index.js +7 -5
  7. package/browser/index.js.map +1 -1
  8. package/browser/simple_player.js +1 -1
  9. package/browser/simple_player.js.map +1 -1
  10. package/dist/controls/danmu.js +3 -1
  11. package/dist/controls/errorRetry.js +1 -1
  12. package/dist/controls/nativeTextTrack.js +1 -1
  13. package/dist/core_player.js +6 -7
  14. package/dist/core_player.js.map +1 -1
  15. package/dist/index.js +2881 -1887
  16. package/dist/index.js.map +1 -1
  17. package/dist/index.min.css +1 -0
  18. package/dist/index.min.js +2 -0
  19. package/dist/index.min.js.map +1 -0
  20. package/dist/simple_player.js +6 -7
  21. package/dist/simple_player.js.map +1 -1
  22. package/es/controls/danmu.js +3 -1
  23. package/es/controls/errorRetry.js +1 -1
  24. package/es/controls/nativeTextTrack.js +1 -1
  25. package/es/core_player.js +1 -1
  26. package/es/core_player.js.map +1 -1
  27. package/es/index.js +7 -5
  28. package/es/index.js.map +1 -1
  29. package/es/simple_player.js +1 -1
  30. package/es/simple_player.js.map +1 -1
  31. package/package.json +11 -2
  32. package/types/index.d.ts +0 -11
  33. package/postcss.config.js +0 -7
  34. package/src/bind/airplay.js +0 -10
  35. package/src/bind/cssFullscreen.js +0 -10
  36. package/src/bind/danmu.js +0 -10
  37. package/src/bind/definition.js +0 -10
  38. package/src/bind/download.js +0 -10
  39. package/src/bind/enter.js +0 -8
  40. package/src/bind/error.js +0 -8
  41. package/src/bind/errorRetry.js +0 -8
  42. package/src/bind/flex.js +0 -8
  43. package/src/bind/fullscreen.js +0 -10
  44. package/src/bind/i18n.js +0 -8
  45. package/src/bind/keyboard.js +0 -8
  46. package/src/bind/loading.js +0 -8
  47. package/src/bind/localPreview.js +0 -10
  48. package/src/bind/memoryPlay.js +0 -10
  49. package/src/bind/miniplayer.js +0 -10
  50. package/src/bind/mobile.js +0 -8
  51. package/src/bind/nativeTextTrack.js +0 -8
  52. package/src/bind/pc.js +0 -8
  53. package/src/bind/pip.js +0 -10
  54. package/src/bind/play.js +0 -10
  55. package/src/bind/playNext.js +0 -10
  56. package/src/bind/playbackRate.js +0 -8
  57. package/src/bind/poster.js +0 -8
  58. package/src/bind/progress.js +0 -8
  59. package/src/bind/reload.js +0 -10
  60. package/src/bind/replay.js +0 -10
  61. package/src/bind/rotate.js +0 -10
  62. package/src/bind/screenShot.js +0 -10
  63. package/src/bind/stallCheck.js +0 -8
  64. package/src/bind/start.js +0 -10
  65. package/src/bind/textTrack.js +0 -8
  66. package/src/bind/time.js +0 -8
  67. package/src/bind/volume.js +0 -10
  68. package/src/controls/airplay.js +0 -20
  69. package/src/controls/cssFullscreen.js +0 -49
  70. package/src/controls/danmu.js +0 -75
  71. package/src/controls/definition.js +0 -13
  72. package/src/controls/download.js +0 -28
  73. package/src/controls/errorRetry.js +0 -132
  74. package/src/controls/fullscreen.js +0 -145
  75. package/src/controls/keyboard.js +0 -214
  76. package/src/controls/localPreview.js +0 -32
  77. package/src/controls/memoryPlay.js +0 -14
  78. package/src/controls/miniplayer.js +0 -128
  79. package/src/controls/mobile.js +0 -100
  80. package/src/controls/pc.js +0 -123
  81. package/src/controls/pip.js +0 -52
  82. package/src/controls/play.js +0 -34
  83. package/src/controls/playNext.js +0 -29
  84. package/src/controls/reload.js +0 -24
  85. package/src/controls/replay.js +0 -30
  86. package/src/controls/rotate.js +0 -99
  87. package/src/controls/screenShot.js +0 -65
  88. package/src/controls/stallCheck.js +0 -38
  89. package/src/controls/start.js +0 -60
  90. package/src/controls/textTrack.js +0 -182
  91. package/src/controls/volume.js +0 -178
  92. package/src/controls.js +0 -36
  93. package/src/core_player.js +0 -13
  94. package/src/error.js +0 -74
  95. package/src/index.js +0 -57
  96. package/src/player.js +0 -553
  97. package/src/proxy.js +0 -495
  98. package/src/simple_player.js +0 -42
  99. package/src/skin/assets/airplay.svg +0 -1
  100. package/src/skin/assets/download.svg +0 -14
  101. package/src/skin/assets/exitCssFull.svg +0 -3
  102. package/src/skin/assets/exitFull.svg +0 -3
  103. package/src/skin/assets/loading.svg +0 -3
  104. package/src/skin/assets/panel.svg +0 -4
  105. package/src/skin/assets/pause.svg +0 -3
  106. package/src/skin/assets/play.svg +0 -3
  107. package/src/skin/assets/playNext.svg +0 -3
  108. package/src/skin/assets/reload.svg +0 -3
  109. package/src/skin/assets/replay.svg +0 -3
  110. package/src/skin/assets/requestCssFull.svg +0 -3
  111. package/src/skin/assets/requestFull.svg +0 -3
  112. package/src/skin/assets/rotate.svg +0 -11
  113. package/src/skin/assets/startPause.svg +0 -3
  114. package/src/skin/assets/startPlay.svg +0 -3
  115. package/src/skin/assets/volumeLarge.svg +0 -4
  116. package/src/skin/assets/volumeMuted.svg +0 -4
  117. package/src/skin/assets/volumeSmall.svg +0 -4
  118. package/src/skin/controls/airplay.js +0 -44
  119. package/src/skin/controls/cssFullscreen.js +0 -36
  120. package/src/skin/controls/danmu.js +0 -214
  121. package/src/skin/controls/definition.js +0 -251
  122. package/src/skin/controls/download.js +0 -29
  123. package/src/skin/controls/enter.js +0 -21
  124. package/src/skin/controls/error.js +0 -57
  125. package/src/skin/controls/flex.js +0 -13
  126. package/src/skin/controls/fullscreen.js +0 -43
  127. package/src/skin/controls/i18n.js +0 -168
  128. package/src/skin/controls/loading.js +0 -17
  129. package/src/skin/controls/localPreview.js +0 -18
  130. package/src/skin/controls/memoryPlay.js +0 -39
  131. package/src/skin/controls/miniplayer.js +0 -26
  132. package/src/skin/controls/nativeTextTrack.js +0 -153
  133. package/src/skin/controls/pip.js +0 -26
  134. package/src/skin/controls/play.js +0 -43
  135. package/src/skin/controls/playNext.js +0 -41
  136. package/src/skin/controls/playbackRate.js +0 -141
  137. package/src/skin/controls/poster.js +0 -18
  138. package/src/skin/controls/progress.js +0 -407
  139. package/src/skin/controls/reload.js +0 -29
  140. package/src/skin/controls/replay.js +0 -56
  141. package/src/skin/controls/rotate.js +0 -29
  142. package/src/skin/controls/screenShot.js +0 -27
  143. package/src/skin/controls/start.js +0 -62
  144. package/src/skin/controls/textTrack.js +0 -113
  145. package/src/skin/controls/time.js +0 -40
  146. package/src/skin/controls/volume.js +0 -63
  147. package/src/skin/index.js +0 -63
  148. package/src/skin/style/common/animation.scss +0 -16
  149. package/src/skin/style/common/svg-url.scss +0 -70
  150. package/src/skin/style/controls/airplay.scss +0 -35
  151. package/src/skin/style/controls/controls.scss +0 -40
  152. package/src/skin/style/controls/cssfullscreen.scss +0 -103
  153. package/src/skin/style/controls/danmu.scss +0 -333
  154. package/src/skin/style/controls/definition.scss +0 -76
  155. package/src/skin/style/controls/download.scss +0 -45
  156. package/src/skin/style/controls/enter.scss +0 -55
  157. package/src/skin/style/controls/error.scss +0 -34
  158. package/src/skin/style/controls/fullscreen.scss +0 -60
  159. package/src/skin/style/controls/icon.scss +0 -12
  160. package/src/skin/style/controls/live.scss +0 -9
  161. package/src/skin/style/controls/loading.scss +0 -44
  162. package/src/skin/style/controls/memoryPlay.scss +0 -28
  163. package/src/skin/style/controls/miniplayer.scss +0 -104
  164. package/src/skin/style/controls/pip.scss +0 -42
  165. package/src/skin/style/controls/placeholder.scss +0 -7
  166. package/src/skin/style/controls/play.scss +0 -79
  167. package/src/skin/style/controls/playNext.scss +0 -44
  168. package/src/skin/style/controls/playbackRate.scss +0 -82
  169. package/src/skin/style/controls/poster.scss +0 -19
  170. package/src/skin/style/controls/progress.scss +0 -182
  171. package/src/skin/style/controls/reload.scss +0 -43
  172. package/src/skin/style/controls/replay.scss +0 -46
  173. package/src/skin/style/controls/rotate.scss +0 -41
  174. package/src/skin/style/controls/screenShot.scss +0 -42
  175. package/src/skin/style/controls/start.scss +0 -78
  176. package/src/skin/style/controls/textTrack.scss +0 -87
  177. package/src/skin/style/controls/time.scss +0 -24
  178. package/src/skin/style/controls/tips.scss +0 -24
  179. package/src/skin/style/controls/videoProxy.scss +0 -6
  180. package/src/skin/style/controls/volume.scss +0 -143
  181. package/src/skin/style/index.scss +0 -88
  182. package/src/utils/sniffer.js +0 -47
  183. package/src/utils/url.js +0 -10
  184. package/src/utils/util.js +0 -358
  185. package/src/utils/xgplayerTimeRange.js +0 -17
  186. package/src/version.js +0 -7
  187. package/version.json +0 -3
  188. package/webpack.config.js +0 -168
@@ -1,141 +0,0 @@
1
- import { createDom, addClass, removeClass, hasClass, toggleClass } from '../../utils/util'
2
- import sniffer from '../../utils/sniffer'
3
- import '../style/controls/playbackRate.scss'
4
-
5
- let s_playbackRate = function () {
6
- let player = this
7
- let playbackRateList = []
8
- if (player.config.playbackRate) {
9
- playbackRateList = [].concat(player.config.playbackRate)
10
- playbackRateList.sort((a, b) => b - a)
11
- } else {
12
- return false
13
- }
14
- let unit = player.config.playbackRateUnit !== undefined ? player.config.playbackRateUnit : 'x'
15
- let container = createDom('xg-playbackrate', " ", {}, 'xgplayer-playbackrate')
16
- if (sniffer.device === 'mobile') {
17
- player.config.playbackRateActive = 'click'
18
- }
19
-
20
- let list = []
21
- playbackRateList.forEach(item => {
22
- list.push({name: `${item}`, rate: `${item}${unit}`, selected: false})
23
- })
24
- let selectedSpeed = 1
25
- let tmp = ['<ul>']
26
- list.forEach(item => {
27
- if(player.config.defaultPlaybackRate && player.config.defaultPlaybackRate.toString() === item.name) {
28
- item.selected = true
29
- selectedSpeed = player.config.defaultPlaybackRate
30
- player.once('playing', () => { player.video.playbackRate = player.config.defaultPlaybackRate})
31
- } else if (item.name === '1.0' || item.name === '1') {
32
- if(!player.config.defaultPlaybackRate || player.config.defaultPlaybackRate === 1) {
33
- item.selected = true
34
- }
35
- }
36
- tmp.push(`<li cname='${item.name}' class='${item.selected ? 'selected' : ''}'>${item.rate}</li>`)
37
- })
38
- tmp.push(`</ul><p class='name'>${selectedSpeed}${unit}</p>`)
39
- let playbackDom = player.root.querySelector('.xgplayer-playbackrate')
40
- if (playbackDom) {
41
- playbackDom.innerHTML = tmp.join('')
42
- let cur = playbackDom.querySelector('.name')
43
- if (!player.config.playbackRateActive || player.config.playbackRateActive === 'hover') {
44
- cur.addEventListener('mouseenter', (e) => {
45
- e.preventDefault()
46
- e.stopPropagation()
47
- addClass(player.root, 'xgplayer-playbackrate-active')
48
- playbackDom.focus()
49
- })
50
- }
51
- } else {
52
- container.innerHTML = tmp.join('')
53
- let cur = container.querySelector('.name')
54
- if (!player.config.playbackRateActive || player.config.playbackRateActive === 'hover') {
55
- cur.addEventListener('mouseenter', (e) => {
56
- e.preventDefault()
57
- e.stopPropagation()
58
- addClass(player.root, 'xgplayer-playbackrate-active')
59
- container.focus()
60
- })
61
- }
62
- player.once('ready', () => {
63
- player.controls.appendChild(container)
64
- })
65
- }
66
-
67
- let ev = ['touchend', 'click']
68
- ev.forEach(item => {
69
- container.addEventListener(item, e => {
70
- e.stopPropagation()
71
- e.preventDefault()
72
- let li = e.target
73
- if(li && li.tagName.toLocaleLowerCase() === 'li') {
74
- let from, to
75
- list.forEach(item => {
76
- item.selected = false
77
- if (li.textContent.replace(/\s+/g,"") === item.rate) {
78
- Array.prototype.forEach.call(li.parentNode.childNodes, item => {
79
- if(hasClass(item, 'selected')) {
80
- from = Number(item.getAttribute('cname'))
81
- removeClass(item, 'selected')
82
- }
83
- })
84
- item.selected = true
85
- player.video.playbackRate = item.name * 1
86
- selectedSpeed = item.name * 1
87
- }
88
- })
89
- addClass(li, 'selected')
90
- to = Number(li.getAttribute('cname'))
91
- li.parentNode.nextSibling.innerHTML = `${li.getAttribute('cname')}${unit}`
92
- player.emit('playbackrateChange', {from, to})
93
- if (sniffer.device === 'mobile') {
94
- removeClass(player.root, 'xgplayer-playbackrate-active')
95
- }
96
- } else if (player.config.playbackRateActive === 'click' && li && (li.tagName.toLocaleLowerCase() === 'p' || li.tagName.toLocaleLowerCase() === 'span')) {
97
- if(sniffer.device === 'mobile') {
98
- toggleClass(player.root, 'xgplayer-playbackrate-active')
99
- } else {
100
- addClass(player.root, 'xgplayer-playbackrate-active')
101
- }
102
- container.focus()
103
- }
104
- player.emit('focus')
105
- }, false)
106
- })
107
- container.addEventListener('mouseleave', (e) => {
108
- e.preventDefault()
109
- e.stopPropagation()
110
- removeClass(player.root, 'xgplayer-playbackrate-active')
111
- })
112
-
113
- function onBlur () {
114
- removeClass(player.root, 'xgplayer-playbackrate-active')
115
- }
116
- player.on('blur', onBlur)
117
-
118
- player.on('play', () => {
119
- if(player.video.playbackRate.toFixed(1) !== selectedSpeed.toFixed(1) ) {
120
- player.video.playbackRate = selectedSpeed
121
- }
122
- })
123
-
124
- player.switchPlaybackRate = function (playbackRateObj = {}) {
125
- let liList = player.controls.querySelectorAll('.xgplayer-playbackrate ul li')
126
- for(let i = 0; i < liList.length; i++) {
127
- if(!hasClass(liList[i], 'selected') && (liList[i].getAttribute('cname') === `${playbackRateObj.playbackRate}` || i === playbackRateObj.index)) {
128
- liList[i].click()
129
- }
130
- }
131
- }
132
-
133
- player.on('ratechange', () => {
134
- player.switchPlaybackRate({ playbackRate: player.playbackRate })
135
- })
136
- }
137
-
138
- export default {
139
- name: 's_playbackRate',
140
- method: s_playbackRate
141
- }
@@ -1,18 +0,0 @@
1
- import { createDom } from '../../utils/util'
2
- import '../style/controls/poster.scss'
3
-
4
- let s_poster = function () {
5
- let player = this
6
- let root = player.root
7
- if (!player.config.poster) {
8
- return
9
- }
10
- let poster = createDom('xg-poster', '', {}, 'xgplayer-poster')
11
- poster.style.backgroundImage = `url(${player.config.poster})`
12
- root.appendChild(poster)
13
- }
14
-
15
- export default {
16
- name: 's_poster',
17
- method: s_poster
18
- }
@@ -1,407 +0,0 @@
1
- import { createDom, addClass, removeClass, hasClass, toggleClass, typeOf, event, format, findDom } from '../../utils/util'
2
- import sniffer from '../../utils/sniffer'
3
- import '../style/controls/progress.scss'
4
-
5
- const isRotateFullscreen = (player) => {
6
- return hasClass(player.root, 'xgplayer-rotate-fullscreen')
7
- }
8
-
9
- let s_progress = function () {
10
- let player = this
11
- let container = createDom('xg-progress', `<xg-outer class="xgplayer-progress-outer">
12
- <xg-cache class="xgplayer-progress-cache"></xg-cache>
13
- <xg-played class="xgplayer-progress-played">
14
- <xg-progress-btn class="xgplayer-progress-btn"></xg-progress-btn>
15
- <xg-point class="xgplayer-progress-point xgplayer-tips"></xg-point>
16
- <xg-thumbnail class="xgplayer-progress-thumbnail xgplayer-tips"></xg-thumbnail>
17
- </xg-played>
18
- </xg-outer>`, {tabindex: 1}, 'xgplayer-progress')
19
- let containerWidth
20
- player.controls.appendChild(container)
21
- let progress = container.querySelector('.xgplayer-progress-played')
22
- let outer = container.querySelector('.xgplayer-progress-outer')
23
- let cache = container.querySelector('.xgplayer-progress-cache')
24
- let point = container.querySelector('.xgplayer-progress-point')
25
- let thumbnail = container.querySelector('.xgplayer-progress-thumbnail')
26
- player.dotArr = {}
27
- function dotEvent (dotItem, text) {
28
- dotItem.addEventListener('mouseenter', function (e) {
29
- if (text) {
30
- addClass(dotItem, 'xgplayer-progress-dot-show')
31
- addClass(container, 'xgplayer-progress-dot-active')
32
- }
33
- })
34
- dotItem.addEventListener('mouseleave', function (e) {
35
- if (text) {
36
- removeClass(dotItem, 'xgplayer-progress-dot-show')
37
- removeClass(container, 'xgplayer-progress-dot-active')
38
- }
39
- })
40
- dotItem.addEventListener('touchend', function (e) {
41
- // e.preventDefault()
42
- e.stopPropagation()
43
- if (text) {
44
- if (!hasClass(dotItem, 'xgplayer-progress-dot-show')) {
45
- Object.keys(player.dotArr).forEach(function (key) {
46
- if (player.dotArr[key]) {
47
- removeClass(player.dotArr[key], 'xgplayer-progress-dot-show')
48
- }
49
- })
50
- }
51
- toggleClass(dotItem, 'xgplayer-progress-dot-show')
52
- toggleClass(container, 'xgplayer-progress-dot-active')
53
- }
54
- })
55
- }
56
- function onCanplay () {
57
- if (player.config.progressDot && typeOf(player.config.progressDot) === 'Array') {
58
- player.config.progressDot.forEach(item => {
59
- if (item.time >= 0 && item.time <= player.duration) {
60
- let dot = createDom('xg-progress-dot', item.text ? `<span class="xgplayer-progress-tip">${item.text}</span>` : '', {}, 'xgplayer-progress-dot')
61
- dot.style.left = (item.time / player.duration) * 100 + '%'
62
- if (item.duration >= 0) {
63
- dot.style.width = (Math.min(item.duration, player.duration - item.time) / player.duration) * 100 + '%'
64
- }
65
- if(item.style) {
66
- for(let k in item.style) {
67
- dot.style[k] = item.style[k]
68
- }
69
- }
70
- outer.appendChild(dot)
71
- player.dotArr[item.time] = dot
72
- dotEvent(dot, item.text)
73
- }
74
- })
75
- }
76
- }
77
- player.once('canplay', onCanplay)
78
- player.addProgressDot = function (time, text, duration, style) {
79
- if (player.dotArr[time]) {
80
- return
81
- }
82
- if (time >= 0 && time <= player.duration) {
83
- let dot = createDom('xg-progress-dot', text ? `<span class="xgplayer-progress-tip">${text}</span>` : '', {}, 'xgplayer-progress-dot')
84
- dot.style.left = (time / player.duration) * 100 + '%'
85
- if (duration >= 0) {
86
- dot.style.width = (Math.min(duration, player.duration - time) / player.duration) * 100 + '%'
87
- }
88
- if(style) {
89
- for(let k in style) {
90
- dot.style[k] = style[k]
91
- }
92
- }
93
- outer.appendChild(dot)
94
- player.dotArr[time] = dot
95
- dotEvent(dot, text)
96
- }
97
- }
98
- player.removeProgressDot = function (time) {
99
- if (time >= 0 && time <= player.duration && player.dotArr[time]) {
100
- let dot = player.dotArr[time]
101
- dot.parentNode.removeChild(dot)
102
- dot = null
103
- player.dotArr[time] = null
104
- }
105
- }
106
- player.removeAllProgressDot = function () {
107
- Object.keys(player.dotArr).forEach(function (key) {
108
- if (player.dotArr[key]) {
109
- let dot = player.dotArr[key]
110
- dot.parentNode.removeChild(dot)
111
- dot = null
112
- player.dotArr[key] = null
113
- }
114
- })
115
- }
116
- let tnailPicNum = 0
117
- let tnailWidth = 0
118
- let tnailHeight = 0
119
- let tnailCol = 0
120
- let tnailRow = 0
121
- let interval = 0
122
- let tnailUrls = []
123
- let coverPreviewContainer, coverPreviewPoint, coverPreviewOuter
124
- let onLoadedmetadata = function() {
125
- if (player.config.thumbnail) {
126
- if(player.config.thumbnail.isShowCoverPreview && !coverPreviewContainer) {
127
- progress.removeChild(thumbnail)
128
- coverPreviewContainer = createDom('xg-coverpreview', `<xg-outer class="xgplayer-coverpreview-outer">
129
- <xg-thumbnail class="xgplayer-coverpreview-thumbnail"></xg-thumbnail>
130
- <xg-point class="xgplayer-coverpreview-point"></xg-point>
131
- </xg-outer>`, {tabindex: 1}, 'xgplayer-coverpreview')
132
- coverPreviewOuter = coverPreviewContainer.querySelector('.xgplayer-coverpreview-outer')
133
- coverPreviewPoint = coverPreviewContainer.querySelector('.xgplayer-coverpreview-point')
134
- thumbnail = coverPreviewContainer.querySelector('.xgplayer-coverpreview-thumbnail')
135
- player.root.appendChild(coverPreviewContainer)
136
- }
137
- tnailPicNum = player.config.thumbnail.pic_num
138
- tnailWidth = player.config.thumbnail.width
139
- tnailHeight = player.config.thumbnail.height
140
- tnailCol = player.config.thumbnail.col
141
- tnailRow = player.config.thumbnail.row
142
- tnailUrls = player.config.thumbnail.urls
143
- thumbnail.style.width = `${tnailWidth}px`
144
- thumbnail.style.height = `${tnailHeight}px`
145
- };
146
- };
147
- player.on('loadedmetadata', onLoadedmetadata);
148
-
149
- if (typeof player.config.disableSwipeHandler === 'function' && typeof player.config.enableSwipeHandler === 'function') {
150
- player.root.addEventListener('touchmove', e => {
151
- e.preventDefault();
152
- // e.stopPropagation();
153
- if (!player.disableSwipe) {
154
- player.disableSwipe = true
155
- player.config.disableSwipeHandler.call(player);
156
- }
157
- });
158
- player.root.addEventListener('touchstart', e => {
159
- // e.preventDefault();
160
- player.disableSwipe = true
161
- player.config.disableSwipeHandler.call(player);
162
- });
163
- player.root.addEventListener('touchend', e => {
164
- // e.preventDefault();
165
- player.disableSwipe = false
166
- player.config.enableSwipeHandler.call(player);
167
- });
168
- };
169
- let events = ['touchstart', 'mousedown'];
170
- if (sniffer.device === 'mobile') {
171
- // 解决在移动端触发多次seeking问题
172
- events.pop()
173
- }
174
- events.forEach(item => {
175
- container.addEventListener(item, function (e) {
176
- if (player.config.disableProgress) return;
177
- // e.preventDefault()
178
- e.stopPropagation()
179
- event(e)
180
- if (e._target === point || (!player.config.allowSeekAfterEnded && player.ended)) {
181
- return true
182
- }
183
-
184
- container.focus()
185
- let {left} = progress.getBoundingClientRect()
186
-
187
- const isRotate = isRotateFullscreen(player)
188
- if (isRotate) {
189
- left = progress.getBoundingClientRect().top
190
- containerWidth = container.getBoundingClientRect().height
191
- } else {
192
- containerWidth = container.getBoundingClientRect().width
193
- left = progress.getBoundingClientRect().left
194
- }
195
-
196
- let move = function (e) {
197
- // e.preventDefault()
198
- e.stopPropagation()
199
- event(e)
200
- player.isProgressMoving = true
201
- let w = (isRotate ? e.clientY : e.clientX) - left
202
- if (w > containerWidth) {
203
- w = containerWidth
204
- }
205
- let now = w / containerWidth * player.duration
206
- if(now < 0) now = 0
207
- if(player.config.allowSeekPlayed && (Number(now).toFixed(1) > player.maxPlayedTime)) {}
208
- else {
209
- progress.style.width = `${w * 100 / containerWidth}%`
210
-
211
- if (player.videoConfig.mediaType === 'video' && !player.dash && !player.config.closeMoveSeek) {
212
- console.log('trigger touchmove')
213
- player.currentTime = Number(now).toFixed(1)
214
- } else {
215
- let time = findDom(player.controls, '.xgplayer-time')
216
- if (time) {
217
- time.innerHTML = `<span class="xgplayer-time-current">${format(now || 0)}</span><span>${format(player.duration)}</span>`
218
- }
219
- }
220
- }
221
-
222
- if(player.config.thumbnail && player.config.thumbnail.isShowCoverPreview) {
223
- coverPreviewPoint.innerHTML = `<span>${format(now)}</span> / ${format(player.duration || 0)}`
224
-
225
- interval = player.duration / tnailPicNum
226
- let index = Math.floor(now / interval)
227
- thumbnail.style.backgroundImage = `url(${tnailUrls[Math.ceil((index + 1) / (tnailCol * tnailRow)) - 1]})`
228
- let indexInPage = index + 1 - (tnailCol * tnailRow) * (Math.ceil((index + 1) / (tnailCol * tnailRow)) - 1)
229
- let tnaiRowIndex = Math.ceil(indexInPage / tnailRow) - 1
230
- let tnaiColIndex = indexInPage - tnaiRowIndex * tnailRow - 1
231
- thumbnail.style['background-position'] = `-${tnaiColIndex * tnailWidth}px -${tnaiRowIndex * tnailHeight}px`
232
- coverPreviewContainer.style.display = 'block'
233
- }
234
-
235
- player.emit('focus')
236
- }
237
- let up = function (e) {
238
- console.log('up event', e)
239
- // e.preventDefault()
240
- e.stopPropagation()
241
- event(e)
242
- window.removeEventListener('mousemove', move)
243
- window.removeEventListener('touchmove', move, { passive: false })
244
- window.removeEventListener('mouseup', up)
245
- window.removeEventListener('touchend', up)
246
- if(sniffer.browser.indexOf('ie') < 0) {
247
- container.blur()
248
- }
249
- if (!player.isProgressMoving || (player.videoConfig && player.videoConfig.mediaType === 'audio') || player.dash || player.config.closeMoveSeek) {
250
- let w = (isRotate ? e.clientY : e.clientX) - left
251
- if (w > containerWidth) {
252
- w = containerWidth
253
- }
254
- let now = w / containerWidth * player.duration
255
- if(now < 0) now = 0
256
- if(player.config.allowSeekPlayed && (Number(now).toFixed(1) > player.maxPlayedTime)) {}
257
- else {
258
- progress.style.width = `${w * 100 / containerWidth}%`
259
- console.warn('trigger touchup')
260
- player.currentTime = Number(now).toFixed(1)
261
- }
262
- }
263
- if(player.config.thumbnail && player.config.thumbnail.isShowCoverPreview) {
264
- coverPreviewContainer.style.display = 'none'
265
- }
266
- player.emit('focus')
267
- player.isProgressMoving = false
268
- }
269
- // if (item === 'touchstart') {
270
- window.addEventListener('touchmove', move, { passive: false })
271
- window.addEventListener('touchend', up)
272
- // } else {
273
- window.addEventListener('mousemove', move)
274
- // console.warn('add envent mouseup')
275
- window.addEventListener('mouseup', up)
276
- // }
277
- return true
278
- })
279
- })
280
-
281
- container.addEventListener('mouseenter', function (e) {
282
- if (!player.config.allowSeekAfterEnded && player.ended) {
283
- return true
284
- }
285
- const isRotate = isRotateFullscreen(player)
286
- let containerLeft = isRotate ? container.getBoundingClientRect().top : container.getBoundingClientRect().left
287
- let containerWidth = isRotate ? container.getBoundingClientRect().height : container.getBoundingClientRect().width
288
-
289
- let compute = function (e) {
290
- let now = ((isRotate ? e.clientY : e.clientX) - containerLeft) / containerWidth * player.duration
291
- now = now < 0 ? 0 : now
292
- point.textContent = format(now)
293
- let pointWidth = point.getBoundingClientRect().width
294
- if (player.config.thumbnail && !player.config.thumbnail.isShowCoverPreview) {
295
- interval = player.duration / tnailPicNum
296
- let index = Math.floor(now / interval)
297
- thumbnail.style.backgroundImage = `url(${tnailUrls[Math.ceil((index + 1) / (tnailCol * tnailRow)) - 1]})`
298
- let indexInPage = index + 1 - (tnailCol * tnailRow) * (Math.ceil((index + 1) / (tnailCol * tnailRow)) - 1)
299
- let tnaiRowIndex = Math.ceil(indexInPage / tnailRow) - 1
300
- let tnaiColIndex = indexInPage - tnaiRowIndex * tnailRow - 1
301
- thumbnail.style['background-position'] = `-${tnaiColIndex * tnailWidth}px -${tnaiRowIndex * tnailHeight}px`
302
- let left = (isRotate ? e.clientY : e.clientX) - containerLeft - tnailWidth / 2
303
- left = left > 0 ? left : 0
304
- left = left < containerWidth - tnailWidth ? left : containerWidth - tnailWidth
305
- thumbnail.style.left = `${left}px`
306
- thumbnail.style.top = `${-10 - tnailHeight}px`
307
- thumbnail.style.display = 'block'
308
- point.style.left = `${left + tnailWidth / 2 - pointWidth / 2}px`
309
- } else {
310
- let left = e.clientX - containerLeft - pointWidth / 2
311
- left = left > 0 ? left : 0
312
- left = left > containerWidth - pointWidth ? containerWidth - pointWidth : left
313
- point.style.left = `${left}px`
314
- }
315
- if (hasClass(container, 'xgplayer-progress-dot-active')) {
316
- point.style.display = 'none'
317
- } else {
318
- point.style.display = 'block'
319
- }
320
- }
321
- let move = function (e) {
322
- compute(e)
323
- }
324
- let leave = function (e) {
325
- container.removeEventListener('mousemove', move, false)
326
- container.removeEventListener('mouseleave', leave, false)
327
- compute(e)
328
- point.style.display = 'none'
329
- if (player.config.thumbnail && !player.config.thumbnail.isShowCoverPreview) {
330
- thumbnail.style.display = 'none'
331
- }
332
- }
333
- container.addEventListener('mousemove', move, false)
334
- container.addEventListener('mouseleave', leave, false)
335
- compute(e)
336
- }, false)
337
-
338
- // let lastBtnLeft = false
339
- let onTimeupdate = function () {
340
- if(player.maxPlayedTime === undefined) player.maxPlayedTime = 0
341
- if(player.maxPlayedTime < player.currentTime) player.maxPlayedTime = player.currentTime
342
- if (!containerWidth && container) {
343
- containerWidth = container.getBoundingClientRect().width
344
- }
345
- if (!player.isProgressMoving && !player.isSeeking && !player.seeking) {
346
- const precent = player.currentTime / player.duration
347
- const prevPrecent = Number(progress.style.width.replace('%', '') || '0') / Number(container.style.width || '100');
348
- if (Math.abs(precent - prevPrecent) <= 1) {
349
- progress.style.width = `${player.currentTime * 100 / player.duration}%`
350
- }
351
- }
352
- }
353
- player.on('timeupdate', onTimeupdate)
354
-
355
- let onCurrentTimeChange = function (time) {
356
- progress.style.width = `${time * 100 / player.duration}%`
357
- }
358
- player.on('currentTimeChange', onCurrentTimeChange)
359
-
360
- let onSrcChange = function () {
361
- progress.style.width = '0%'
362
- }
363
- player.on('srcChange', onSrcChange)
364
-
365
- let onCacheUpdate = function () {
366
- let buffered = player.buffered
367
- if (buffered && buffered.length > 0) {
368
- let end = buffered.end(buffered.length - 1)
369
- for (let i = 0, len = buffered.length; i < len; i++) {
370
- if (player.currentTime >= buffered.start(i) && player.currentTime <= buffered.end(i)) {
371
- end = buffered.end(i)
372
- for (let j = i + 1; j < buffered.length; j++) {
373
- if (buffered.start(j) - buffered.end(j - 1) >= 2) {
374
- end = buffered.end(j - 1)
375
- break
376
- }
377
- }
378
- break
379
- }
380
- }
381
- cache.style.width = `${end / player.duration * 100}%`
382
- }
383
- }
384
- const cacheUpdateEvents = ['bufferedChange', 'cacheupdate', 'ended', 'timeupdate']
385
- cacheUpdateEvents.forEach(item => {
386
- player.on(item, onCacheUpdate)
387
- })
388
-
389
- function destroyFunc () {
390
- player.removeAllProgressDot()
391
- player.off('canplay', onCanplay)
392
- player.off('timeupdate', onTimeupdate)
393
- player.off('currentTimeChange', onCurrentTimeChange)
394
- player.off('srcChange', onSrcChange)
395
- player.off('loadedmetadata', onLoadedmetadata);
396
- cacheUpdateEvents.forEach(item => {
397
- player.off(item, onCacheUpdate)
398
- })
399
- player.off('destroy', destroyFunc)
400
- }
401
- player.once('destroy', destroyFunc)
402
- }
403
-
404
- export default {
405
- name: 's_progress',
406
- method: s_progress
407
- }
@@ -1,29 +0,0 @@
1
- import { createDom } from '../../utils/util'
2
- import ReloadIcon from '../assets/reload.svg'
3
- import '../style/controls/reload.scss'
4
-
5
- let s_reload = function () {
6
- let player = this
7
- if (!player.config.reload) { return }
8
- let btn = createDom('xg-reload', `<xg-icon class="xgplayer-icon">${ReloadIcon}</xg-icon>`, {}, 'xgplayer-reload')
9
-
10
- let tipsText = player.lang.RELOAD_TIPS
11
- let tips = createDom('xg-tips', `<span class="xgplayer-tip-reload">${tipsText}</span>`, {}, 'xgplayer-tips')
12
- btn.appendChild(tips)
13
- player.once('ready', () => {
14
- player.controls.appendChild(btn)
15
- });
16
-
17
- ['click', 'touchend'].forEach(item => {
18
- btn.addEventListener(item, function (e) {
19
- e.preventDefault()
20
- e.stopPropagation()
21
- player.userGestureTrigEvent('reloadBtnClick')
22
- })
23
- })
24
- }
25
-
26
- export default {
27
- name: 's_reload',
28
- method: s_reload
29
- }
@@ -1,56 +0,0 @@
1
- import { createDom } from '../../utils/util'
2
- import ReplayIcon from '../assets/replay.svg'
3
- import '../style/controls/replay.scss'
4
-
5
- let s_replay = function () {
6
- let player = this
7
- let root = player.root
8
-
9
- let replayText = player.lang.REPLAY
10
- let btn = createDom('xg-replay', `${ReplayIcon}
11
- <xg-replay-txt class="xgplayer-replay-txt">${replayText}</xg-replay-txt>
12
- `, {}, 'xgplayer-replay')
13
- player.once('ready', () => {
14
- root.appendChild(btn)
15
- })
16
-
17
- function onEnded () {
18
- let path = btn.querySelector('path')
19
- if(path) {
20
- let transform = window.getComputedStyle(path).getPropertyValue('transform')
21
- if(typeof transform === 'string' && transform.indexOf('none') > -1) {
22
- return
23
- } else {
24
- path.setAttribute('transform', transform)
25
- }
26
- }
27
- }
28
- player.on('ended', onEnded)
29
-
30
- function onBtnClick (e) {
31
- e.preventDefault()
32
- e.stopPropagation()
33
- }
34
- btn.addEventListener('click', onBtnClick)
35
-
36
- let svg = btn.querySelector('svg');
37
-
38
- ['click', 'touchend'].forEach(item => {
39
- svg.addEventListener(item, function (e) {
40
- e.preventDefault()
41
- e.stopPropagation()
42
- player.userGestureTrigEvent('replayBtnClick')
43
- })
44
- })
45
-
46
- function destroyFunc () {
47
- player.off('ended', onEnded)
48
- player.off('destroy', destroyFunc)
49
- }
50
- player.once('destroy', destroyFunc)
51
- }
52
-
53
- export default {
54
- name: 's_replay',
55
- method: s_replay
56
- }
@@ -1,29 +0,0 @@
1
- import { createDom } from '../../utils/util'
2
- import RotateIcon from '../assets/rotate.svg'
3
- import '../style/controls/rotate.scss'
4
-
5
- let s_rotate = function () {
6
- let player = this
7
- if (!player.config.rotate) { return }
8
- let btn = createDom('xg-rotate', `<xg-icon class="xgplayer-icon">${RotateIcon}</xg-icon>`, {}, 'xgplayer-rotate')
9
-
10
- let tipsText = player.lang.ROTATE_TIPS
11
- let tips = createDom('xg-tips', `<span class="xgplayer-tip-rotate">${tipsText}</span>`, {}, 'xgplayer-tips')
12
- btn.appendChild(tips)
13
- player.once('ready', () => {
14
- player.controls.appendChild(btn)
15
- });
16
-
17
- ['click', 'touchend'].forEach(item => {
18
- btn.addEventListener(item, function (e) {
19
- e.preventDefault()
20
- e.stopPropagation()
21
- player.userGestureTrigEvent('rotateBtnClick')
22
- })
23
- })
24
- }
25
-
26
- export default {
27
- name: 's_rotate',
28
- method: s_rotate
29
- }