DIYgod 9 anni fa
parent
commit
6b6b965ba1
3 ha cambiato i file con 38 aggiunte e 26 eliminazioni
  1. 0 0
      dist/DPlayer.min.js
  2. 0 0
      dist/DPlayer.min.js.map
  3. 38 26
      src/DPlayer.js

File diff suppressed because it is too large
+ 0 - 0
dist/DPlayer.min.js


File diff suppressed because it is too large
+ 0 - 0
dist/DPlayer.min.js.map


+ 38 - 26
src/DPlayer.js

@@ -258,11 +258,11 @@
             this.playButton = this.element.getElementsByClassName('dplayer-play-icon')[0];
             this.shouldpause = true;
             this.toggle = () => {
-                if (!this.shouldpause || this.ended) {
-                    this.pause();
+                if (this.audio.paused) {
+                    this.play();
                 }
                 else {
-                    this.play();
+                    this.pause();
                 }
             };
             this.playButton.addEventListener('click', this.toggle);
@@ -329,28 +329,29 @@
                     }
                 }
             });
-    
+
+            let lastPlayPos = 0;
+            let currentPlayPos = 0;
+            let bufferingDetected = false;
             this.setTime = () => {
                 if (this.option.danmaku) {
                     this.playedTime = setInterval(() => {
-                        if (!this.element.classList.contains('dplayer-loading')) {
-                            if (!this.audio.buffered.length || this.audio.buffered.end(this.audio.buffered.length - 1) - this.audio.currentTime <= 10) {
-                                this.element.classList.add('dplayer-loading');
-                                this.audio.pause();
-                                return;
-                            }
+                        // whether the video is buffering
+                        currentPlayPos = this.audio.currentTime;
+                        if (!bufferingDetected
+                            && currentPlayPos < (lastPlayPos + 0.01)
+                            && !this.audio.paused) {
+                            this.element.classList.add('dplayer-loading');
+                            bufferingDetected = true
                         }
-                        else {
-                            if (this.audio.buffered.length && this.audio.buffered.end(this.audio.buffered.length - 1) - this.audio.currentTime > 15) {
-                                this.element.classList.remove('dplayer-loading');
-                                if (!this.shouldpause) {
-                                    this.audio.play();
-                                }
-                            }
-                            else {
-                                return;
-                            }
+                        if (bufferingDetected
+                            && currentPlayPos > (lastPlayPos + 0.01)
+                            && !this.audio.paused) {
+                            this.element.classList.remove('dplayer-loading');
+                            bufferingDetected = false
                         }
+                        lastPlayPos = currentPlayPos;
+
                         this.updateBar('played', this.audio.currentTime / this.audio.duration, 'width');
                         this.ptime.innerHTML = this.secondToTime(this.audio.currentTime);
                         this.trigger('playing');
@@ -364,6 +365,22 @@
                 }
                 else {
                     this.playedTime = setInterval(() => {
+                        // whether the video is buffering
+                        currentPlayPos = this.audio.currentTime;
+                        if (!bufferingDetected
+                            && currentPlayPos < (lastPlayPos + 0.01)
+                            && !this.audio.paused) {
+                            this.element.classList.add('dplayer-loading');
+                            bufferingDetected = true
+                        }
+                        if (bufferingDetected
+                            && currentPlayPos > (lastPlayPos + 0.01)
+                            && !this.audio.paused) {
+                            this.element.classList.remove('dplayer-loading');
+                            bufferingDetected = false
+                        }
+                        lastPlayPos = currentPlayPos;
+
                         this.updateBar('played', this.audio.currentTime / this.audio.duration, 'width');
                         this.ptime.innerHTML = this.secondToTime(this.audio.currentTime);
                         this.trigger('playing');
@@ -1021,12 +1038,7 @@
 
                 this.playButton.innerHTML = this.getSVG('pause');
 
-                if (!this.audio.buffered.length
-                    || this.element.classList.contains('dplayer-loading') && this.audio.buffered.end(this.audio.buffered.length - 1) - this.audio.currentTime > 15
-                    || !this.element.classList.contains('dplayer-loading') && this.audio.buffered.end(this.audio.buffered.length - 1) - this.audio.currentTime > 10) {
-                    this.element.classList.remove('dplayer-loading');
-                    this.audio.play();
-                }
+                this.audio.play();
                 if (this.playedTime) {
                     clearInterval(this.playedTime);
                 }

Some files were not shown because too many files changed in this diff