eplayer 1.5.2 → 1.5.4

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/docs/eplayer.js CHANGED
@@ -4,18 +4,20 @@ class Eplayer extends HTMLElement {
4
4
  this.doms = {}
5
5
  this.src = this.getAttribute('src')
6
6
  this.type = this.getAttribute('type')
7
+ this.beatMap = this.getAttribute('beatMap')
7
8
 
8
9
  this.init()
9
10
  this.stream()
10
11
  }
11
12
 
12
13
  static get observedAttributes() {
13
- return ['src', 'type']
14
+ return ['src', 'type', 'beatMap']
14
15
  }
15
16
 
16
17
  attributeChangedCallback(name, _, newVal) {
17
18
  if (name === 'src') this.src = this.$('.video').src = newVal
18
19
  if (name === 'type') this.type = newVal
20
+ if (name === 'beatMap') this.beatMap = newVal
19
21
  this.stream()
20
22
  this.video.load()
21
23
  }
@@ -24,6 +26,8 @@ class Eplayer extends HTMLElement {
24
26
  return this.doms[key]
25
27
  }
26
28
 
29
+
30
+
27
31
  waiting() {
28
32
  this.$('.mark').removeEventListener('click', this.mark.bind(this))
29
33
  this.$('.mark').classList.remove('playing')
@@ -43,10 +47,24 @@ class Eplayer extends HTMLElement {
43
47
  }
44
48
 
45
49
  mark() {
50
+ if (this.beatMap) return
46
51
  clearTimeout(this.timer)
47
52
  this.timer = setTimeout(() => this.play(), 200)
48
53
  }
49
54
 
55
+ connectedCallback() {
56
+ console.log('emmm')
57
+ const beats = this.beatMap.split('|').map(item => {
58
+ const [fps, button] = item.split(':')
59
+ return {
60
+ fps, button
61
+ }
62
+ })
63
+
64
+
65
+ new Mug(beats,this.$('.mug'),this.video)
66
+ }
67
+
50
68
  canplay() {
51
69
  this.$('.mark').classList.remove('loading')
52
70
  this.$('.mark').classList.add('playing')
@@ -55,6 +73,7 @@ class Eplayer extends HTMLElement {
55
73
  }
56
74
 
57
75
  play() {
76
+ if (this.beatMap) return
58
77
  if (this.video.paused) {
59
78
  this.video.play()
60
79
  this.$('.ep-video').style.display = 'none'
@@ -138,13 +157,13 @@ class Eplayer extends HTMLElement {
138
157
  case 38:
139
158
  try {
140
159
  this.video.volume = parseInt(this.video.volume * 100) / 100 + 0.05
141
- } catch (e) {}
160
+ } catch (e) { }
142
161
  setVolume(this.video.volume.toFixed(1) * 10, this.$('.line'))
143
162
  break
144
163
  case 40:
145
164
  try {
146
165
  this.video.volume = parseInt(this.video.volume * 100) / 100 - 0.05
147
- } catch (e) {}
166
+ } catch (e) { }
148
167
  setVolume(this.video.volume.toFixed(1) * 10, this.$('.line'))
149
168
  break
150
169
  case 32:
@@ -231,6 +250,7 @@ class Eplayer extends HTMLElement {
231
250
  overflow: hidden;
232
251
  }
233
252
  .controls{
253
+ display:${this.beatMap ? 'none' : 'block'};
234
254
  position:absolute;
235
255
  left:0;
236
256
  right:0;
@@ -272,10 +292,11 @@ class Eplayer extends HTMLElement {
272
292
  }
273
293
  .lines{
274
294
  padding:0 10px;
295
+ display:flex;
296
+ align-items: center;
275
297
  }
276
298
  .line{
277
- padding:0;
278
- margin-bottom: -2px;
299
+ padding:0 2px;
279
300
  cursor:pointer
280
301
  }
281
302
  .line i{
@@ -375,6 +396,7 @@ class Eplayer extends HTMLElement {
375
396
  }
376
397
  .ep-video {
377
398
  position: absolute;
399
+ display:${this.beatMap ? 'none' : 'block'};
378
400
  bottom: 25px;
379
401
  right: 20px;
380
402
  font-size:40px;
@@ -413,7 +435,24 @@ class Eplayer extends HTMLElement {
413
435
  margin-left:-10px;
414
436
  display:inline-block;
415
437
  }
438
+ .mug {
439
+ height: 450px;
440
+ width: 281px;
441
+ position: absolute;
442
+ z-index: 999;
443
+ /* pointer-events: none; */
444
+ transform: translate(-50%, -50%);
445
+ left: 50%;
446
+ top: 50%;
447
+ opacity: 0.95;
448
+ }
449
+ .wrap{
450
+ position: relative;
451
+ height: 450px;
452
+ }
416
453
  </style>
454
+ <div class="wrap">
455
+ <div class="mug"></div>
417
456
  <div class="eplayer">
418
457
  <video id="video" class="video" src="${this.src || ''}"></video>
419
458
  <div class="mark loading"></div>
@@ -458,6 +497,7 @@ class Eplayer extends HTMLElement {
458
497
  <div class="epicon ep-video"></div>
459
498
  <div class="panel"></div>
460
499
  </div>
500
+ </div>
461
501
  `
462
502
  let template = document.createElement('template')
463
503
  template.innerHTML = html
@@ -491,6 +531,7 @@ class Eplayer extends HTMLElement {
491
531
  '.panel',
492
532
  '.speed',
493
533
  '.pip',
534
+ '.mug'
494
535
  ]
495
536
 
496
537
  for (const key of doms) {
@@ -530,6 +571,7 @@ class Eplayer extends HTMLElement {
530
571
 
531
572
  mount() {
532
573
  this.video = this.$('.video')
574
+ this.mug = this.$('.mug')
533
575
  this.video.volume = 0.5
534
576
  setVolume(this.video.volume * 10, this.$('.line'))
535
577
  this.video.onwaiting = this.waiting.bind(this)
@@ -565,7 +607,7 @@ class Eplayer extends HTMLElement {
565
607
  setVolume(index + 1, this.$('.line'))
566
608
  }
567
609
  })
568
- document.oncontextmenu = () => false
610
+ this.$('.eplayer').oncontextmenu = () => false
569
611
  }
570
612
  }
571
613
 
@@ -598,7 +640,7 @@ function isFullScreen() {
598
640
  return document.isFullScreen || document.webkitIsFullScreen || document.mozIsFullScreen
599
641
  }
600
642
 
601
- ;(function () {
643
+ ; (function () {
602
644
  let link = document.createElement('link')
603
645
  link.setAttribute('href', 'https://at.alicdn.com/t/font_836948_g9fk6jqpl8l.css')
604
646
  link.setAttribute('rel', 'stylesheet')
package/docs/game.html ADDED
@@ -0,0 +1,17 @@
1
+ <html>
2
+
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
+ <script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/pixi.js/4.5.2/pixi.min.js"></script>
6
+ <meta name="viewport"
7
+ content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes" />
8
+ </head>
9
+
10
+ <body>
11
+
12
+
13
+ </body>
14
+
15
+ </html>
16
+
17
+ <script src="./mug-class.js"></script>
package/docs/index.html CHANGED
@@ -6,6 +6,8 @@
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
8
8
  <title>eplayer</title>
9
+ <script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/pixi.js/4.5.2/pixi.min.js"></script>
10
+ <script src="./mug.js"></script>
9
11
  </head>
10
12
 
11
13
  <body>
@@ -16,8 +18,10 @@
16
18
 
17
19
  .wrapper {
18
20
  width: 800px;
19
- margin: 100px auto;
20
- height: 450px;
21
+ position: absolute;
22
+ transform: translate(-50%, -50%);
23
+ left: 50%;
24
+ top: 50%;
21
25
  }
22
26
 
23
27
  @media screen and (max-width: 500px) {
@@ -39,16 +43,16 @@
39
43
  box-sizing: border-box;
40
44
  }
41
45
 
42
- .wrapper a:nth-child(3) {
46
+ .wrapper a:nth-child(2) {
43
47
  background: #333;
44
48
  }
45
49
 
46
- .wrapper a:nth-child(2) {
50
+ .wrapper a:nth-child(4) {
47
51
  margin-top: 30px;
48
- background: #e91e63;
52
+ background: #946ce6;
49
53
  }
50
54
 
51
- .wrapper a:nth-child(4) {
55
+ .wrapper a:nth-child(3) {
52
56
  background: #1ea6e9;
53
57
  }
54
58
  </style>
@@ -97,17 +101,19 @@
97
101
  }
98
102
  </style>
99
103
  <div class="wrapper">
100
- <e-player id="ep"
101
- src="https://gss3.baidu.com/6LZ0ej3k1Qd3ote6lo7D0j9wehsv/tieba-smallvideo/3_d97abb65fc36a1d689efd3a105bebce1.mp4">
104
+
105
+ <e-player id="ep" src="https://mp4.ziyuan.wang/view.php/67c796ed2dad70c429bda73a647704f0.mp4"
106
+ beatMap="1:2|2:1|3:3|4:4|6:2|6:1|7:3|8:4|8:2|9:1|11:3|12:4|12:2|13:1|14:3|15:4|16:2|16:1|17:3|19:4|19:2|20:1|21:3|22:4">
102
107
  </e-player>
108
+
103
109
  <a href="https://github.com/132yse/eplayer">github</a>
104
110
  <a href="https://github.com/132yse/eplayer/blob/master/README.md">README</a>
105
- <a href="https://www.clicli.top">clicli.us</a>
111
+ <a href="https://www.clicli.cc">clicli.cc</a>
106
112
  </div>
107
113
  <script src="https://unpkg.com/@webcomponents/webcomponentsjs"></script>
108
114
  <script src="https://unpkg.com/hls.js"></script>
109
115
  <script src="./eplayer.js"></script>
110
- <script src="./pic.js"></script>
116
+ <!-- <script src="./pic.js"></script> -->
111
117
  </body>
112
118
 
113
119
  </html>
package/docs/mug.js ADDED
@@ -0,0 +1,356 @@
1
+ class Mug {
2
+ constructor(beatMap, container, video) {
3
+ this.container = container
4
+ this.beatMap = beatMap
5
+ this.gameStatus = 0
6
+ this.buttonX = 85
7
+
8
+ this.buttonArray = []
9
+ this.imgNumber = 1
10
+ this.fps = 0
11
+ this.score = 0
12
+ this.str = "0"
13
+ this.app = new PIXI.Application(500, 800)
14
+ this.container.appendChild(this.app.view)
15
+ console.log(container)
16
+ this.app.view.style.width = container.offsetWidth + 'px'
17
+ this.video = video
18
+
19
+ this.drawUI()
20
+ const buttonArray = this.buttonArray
21
+ document.onkeydown = function (e) {
22
+ if (e && e.keyCode == 68) {
23
+ buttonArray[0].keyDown()
24
+ } else if (e && e.keyCode == 70) {
25
+ buttonArray[1].keyDown()
26
+ } else if (e && e.keyCode == 74) {
27
+ buttonArray[2].keyDown()
28
+ } else if (e && e.keyCode == 75) {
29
+ buttonArray[3].keyDown()
30
+ }
31
+ }
32
+ document.onkeyup = function (e) {
33
+ if (e && e.keyCode == 68) {
34
+ buttonArray[0].keyUp()
35
+ } else if (e && e.keyCode == 70) {
36
+ buttonArray[1].keyUp()
37
+ } else if (e && e.keyCode == 74) {
38
+ buttonArray[2].keyUp()
39
+ } else if (e && e.keyCode == 75) {
40
+ buttonArray[3].keyUp()
41
+ }
42
+ }
43
+
44
+ this.app.ticker.add(this.animate.bind(this))
45
+ }
46
+
47
+ animate() {
48
+ if (this.gameStatus == 0) {
49
+ return
50
+ }
51
+
52
+ this.fps = this.video.currentTime
53
+ //创建动物
54
+ const head = this.beatMap[0]
55
+
56
+
57
+ if (head && this.fps >= head.fps) {
58
+ console.log(this.fps)
59
+ this.beatMap.shift()
60
+ let button = this.buttonArray[head.button - 1]
61
+ button.createAnimal()
62
+ }
63
+
64
+ //图片移动
65
+ for (let i = 0; i < this.buttonArray.length; i++) {
66
+ let button = this.buttonArray[i]
67
+ button.animalMove()
68
+ button.deleteAnimal()
69
+ button.scoreMove()
70
+ }
71
+
72
+ if (!head) {
73
+ this.over()
74
+ }
75
+ }
76
+
77
+ drawUI() {
78
+ //游戏元素图层
79
+ let gameCeng = new PIXI.Container()
80
+ this.app.stage.addChild(gameCeng)
81
+ //游戏背景
82
+ let bg = new PIXI.Sprite.fromImage("res/beijing.png")
83
+ gameCeng.addChild(bg)
84
+ //ui图层
85
+ let uiCeng = new PIXI.Container()
86
+ this.app.stage.addChild(uiCeng)
87
+ this.uiCeng = uiCeng
88
+
89
+ //游戏对象层
90
+ let gameObjectCeng = new PIXI.Container()
91
+ gameCeng.addChild(gameObjectCeng)
92
+
93
+ //line 图层
94
+ let lineCeng = new PIXI.Container()
95
+ gameObjectCeng.addChild(lineCeng)
96
+
97
+ //兔子图片图层
98
+ let animalCeng = new PIXI.Container()
99
+ gameObjectCeng.addChild(animalCeng)
100
+
101
+ //score图层
102
+ let scoreCeng = new PIXI.Container()
103
+ gameObjectCeng.addChild(scoreCeng)
104
+
105
+ //点击位置
106
+ let touming = new PIXI.Sprite.fromImage("res/touming.png")
107
+ lineCeng.addChild(touming)
108
+ touming.y = 600
109
+ touming.x = 250
110
+ touming.anchor.set(0.5, 0.5)
111
+
112
+
113
+ for (let i = 0; i < 4; i++) {
114
+ let button = new Button(this.imgNumber, gameObjectCeng, uiCeng, lineCeng, animalCeng, this.buttonX, this)
115
+ this.buttonX = button.bjt.x + 110
116
+ this.imgNumber++
117
+ this.buttonArray.push(button)
118
+ }
119
+
120
+
121
+ let style = {
122
+ font: 'bold 40px 微软雅黑',//加粗 倾斜 字号 字体名称
123
+ fill: '#F7EDCA',//颜色
124
+ stroke: '#4a1850',//描边颜色
125
+ strokeThickness: 5,//描边宽度
126
+ dropShadow: true,//开启阴影
127
+ dropShadowColor: '#000000',//阴影颜色
128
+ dropShadowAngle: Math.PI / 6,//阴影角度
129
+ dropShadowDistance: 6,//投影距离
130
+ wordWrap: true,//开启自动换行(注:开启后在文本中空格处换行,如文本中没有空格则不换行)
131
+ wordWrapWidth: 150,//自动换行宽度
132
+ }
133
+
134
+ let text = new PIXI.Text("得分 ", style)
135
+ uiCeng.addChild(text)
136
+ text.x = 30
137
+ text.y = 30
138
+
139
+ //创建文本
140
+ let scoreTxt = new PIXI.Text(this.str, style)
141
+ this.scoreTxt = scoreTxt
142
+ uiCeng.addChild(scoreTxt)
143
+ scoreTxt.x = 130
144
+ scoreTxt.y = 30
145
+
146
+ let startBtn = new PIXI.Sprite.fromImage("res/kaishianniu.png")
147
+ uiCeng.addChild(startBtn)
148
+ startBtn.interactive = true
149
+ startBtn.on("pointerdown", () => {
150
+ startBtn.visible = false
151
+ this.gameStatus = 1
152
+ this.video.play()
153
+ })
154
+
155
+ startBtn.x = 200
156
+ startBtn.y = 345
157
+
158
+ }
159
+
160
+ over() {
161
+ this.video.pause()
162
+ let gameoverPanel = new PIXI.Sprite.fromImage("res/beiban.png")
163
+ this.uiCeng.addChild(gameoverPanel)
164
+ gameoverPanel.x = 20
165
+ gameoverPanel.y = 100
166
+ gameoverPanel.alpha = 0.9
167
+
168
+ let style = {
169
+ font: 'bold 40px 微软雅黑',//加粗 倾斜 字号 字体名称
170
+ fill: '#F7EDCA',//颜色
171
+ }
172
+ let scoreTxt = new PIXI.Text(this.score, style)
173
+ gameoverPanel.addChild(scoreTxt)
174
+ scoreTxt.x = 210
175
+ scoreTxt.y = 110
176
+
177
+ let restartBtn = new PIXI.Sprite.fromImage("res/fanhuianniu.png")
178
+ gameoverPanel.addChild(restartBtn)
179
+ restartBtn.x = 185
180
+ restartBtn.y = 330
181
+ restartBtn.interactive = true
182
+ restartBtn.on("click", function () {
183
+ window.location.reload()
184
+ })
185
+ restartBtn.on("touchstart", function () {
186
+ window.location.reload()
187
+ })
188
+ this.gameStatus = 0
189
+
190
+ }
191
+
192
+ }
193
+
194
+ //获取显示对象的世界坐标
195
+ function getWorldPosition(displayObject) {
196
+ let x = displayObject.transform.worldTransform.tx
197
+ let y = displayObject.transform.worldTransform.ty
198
+ return { "x": x, "y": y }
199
+ }
200
+
201
+ class Button {
202
+ constructor(imgNumber, gameObjectCeng, uiCeng, lineCeng, animalCeng, buttonX, that) {
203
+ this.gameObjectCeng = gameObjectCeng
204
+ this.bjt = new PIXI.Sprite.fromImage(`res/bjt${imgNumber}.png`)
205
+ gameObjectCeng.addChild(this.bjt)
206
+ this.bjt.anchor.set(0.5, 1)
207
+ this.bjt.x = buttonX
208
+ this.bjt.y = 800
209
+ this.bjt.visible = false
210
+ this.animalCeng = animalCeng
211
+
212
+ this.button = new PIXI.Sprite.fromImage(`res/anniu${imgNumber}.png`)
213
+ uiCeng.addChild(this.button)
214
+ this.button.anchor.set(0.5, 0.5)
215
+ this.button.y = 754
216
+ this.button.x = this.bjt.x
217
+ this.type = imgNumber
218
+
219
+ this.kong = new PIXI.Sprite.fromImage("res/kong.png")
220
+ lineCeng.addChild(this.kong)
221
+ this.kong.anchor.set(0.5, 0.5)
222
+ this.kong.x = this.bjt.x
223
+ this.kong.y = 600
224
+
225
+ this.button.interactive = true
226
+ this.animalArray = []
227
+
228
+ this.show = true
229
+
230
+ this.scoreArray = []
231
+
232
+ this.soft = that
233
+
234
+ // Handlers for button
235
+ this.button.on("pointerdown", this.buttonMouseHandler.bind(this))
236
+ this.button.on("pointerup", this.buttonMouseupHandler.bind(this))
237
+ this.button.on("click", this.buttonClick.bind(this))
238
+ }
239
+
240
+ createAnimal() {
241
+ let animal = new Animal(this.type, this.button.x)
242
+ this.animalCeng.addChild(animal.animal)
243
+ this.animalArray.push(animal)
244
+ }
245
+
246
+ animalMove() {
247
+ for (let i = 0; i < this.animalArray.length; i++) {
248
+ let animal = this.animalArray[i]
249
+ animal.move()
250
+ }
251
+ }
252
+
253
+ deleteAnimal() {
254
+ for (let i = this.animalArray.length - 1; i >= 0; i--) {
255
+ let animal = this.animalArray[i]
256
+ if (this.kong.y + 46 < animal.animal.y && this.show == true) {
257
+ this.scoreAction("miss")
258
+ this.show = false
259
+ }
260
+ if (animal.animal.y > 800) {
261
+ this.show = true
262
+ this.animalCeng.removeChild(animal.animal)
263
+ this.animalArray.splice(i, 1)
264
+ }
265
+ }
266
+ }
267
+
268
+ buttonMouseHandler() {
269
+ this.buttonClick()
270
+ }
271
+
272
+ buttonMouseupHandler() {
273
+ this.bjt.visible = false
274
+ }
275
+
276
+ buttonClick() {
277
+ const soft = this
278
+ this.bjt.visible = true
279
+
280
+ for (let i = 0; i < soft.animalArray.length; i++) {
281
+ if (soft.kong.y - 10 < soft.animalArray[i].animal.y && soft.kong.y + 10 > soft.animalArray[i].animal.y) {
282
+ this.soft.score += 10
283
+ this.soft.scoreTxt.text = this.soft.score
284
+ this.animalCeng.removeChild(soft.animalArray[i].animal)
285
+ soft.animalArray.splice(i, 1)
286
+ this.scoreAction("perfect")
287
+
288
+ } else if (soft.kong.y - 20 < soft.animalArray[i].animal.y && soft.kong.y + 20 > soft.animalArray[i].animal.y) {
289
+ this.soft.score += 5
290
+ this.soft.scoreTxt.text = this.soft.score
291
+ this.animalCeng.removeChild(soft.animalArray[i].animal)
292
+ soft.animalArray.splice(i, 1)
293
+ this.scoreAction("good")
294
+ } else if (soft.kong.y - 30 < soft.animalArray[i].animal.y && soft.kong.y + 30 > soft.animalArray[i].animal.y) {
295
+ this.soft.score += 1
296
+ this.soft.scoreTxt.text = this.soft.score
297
+ this.animalCeng.removeChild(soft.animalArray[i].animal)
298
+ soft.animalArray.splice(i, 1)
299
+ this.scoreAction("bad")
300
+ }
301
+ }
302
+ }
303
+
304
+ keyDown() {
305
+ this.buttonClick()
306
+ }
307
+
308
+ keyUp() {
309
+ this.bjt.visible = false
310
+ }
311
+
312
+ scoreAction(name) {
313
+ let score = new PIXI.Sprite.fromImage("res/" + name + ".png")
314
+ this.gameObjectCeng.addChild(score)
315
+ score.y = 540
316
+ score.x = this.bjt.x
317
+ score.anchor.set(0.5, 0.5)
318
+ score.alpha = 1
319
+ this.scoreArray.push(score)
320
+ }
321
+
322
+ scoreMove() {
323
+ for (let i = 0; i < this.scoreArray.length; i++) {
324
+ let score = this.scoreArray[i]
325
+ score.alpha -= 0.01
326
+ score.y -= 2
327
+ }
328
+ for (let i = this.scoreArray.length - 1; i >= 0; i--) {
329
+ let score = this.scoreArray[i]
330
+ if (score.y <= 400) {
331
+ this.gameObjectCeng.removeChild(score)
332
+ this.scoreArray.splice(i, 1)
333
+ }
334
+ }
335
+ }
336
+ }
337
+
338
+ class Animal {
339
+ constructor(type, animalX) {
340
+ let number = 3
341
+ let typeMap = {
342
+ 1: "lan",
343
+ 2: "lv",
344
+ 3: "hong",
345
+ 4: "huang"
346
+ }
347
+ this.animal = new PIXI.Sprite.fromImage(`res/${typeMap[type]}${number}.png`)
348
+ this.animal.anchor.set(0.5, 0.5)
349
+ this.animal.x = animalX
350
+ this.animal.y = 0
351
+ }
352
+
353
+ move() {
354
+ this.animal.y += 3.33
355
+ }
356
+ }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file