Răsfoiți Sursa

Merge pull request #149 from micooz/fix-fullscreen-scrollbar

hide scrollbars after web-fullscreen
DIYgod 7 ani în urmă
părinte
comite
d709b0fcb0
3 a modificat fișierele cu 43 adăugiri și 1 ștergeri
  1. 10 1
      src/DPlayer.scss
  2. 12 0
      src/fullscreen.js
  3. 21 0
      src/utils.js

+ 10 - 1
src/DPlayer.scss

@@ -1261,4 +1261,13 @@
 
 [data-balloon][data-balloon-pos="up"]:after {
     margin-bottom: 0;
-}
+}
+
+// To hide scroll bar, apply this class to <body>
+.dplayer-web-fullscreen-fix {
+    position: fixed;
+    top: 0;
+    left: 0;
+    margin: 0;
+    padding: 0;
+}

+ 12 - 0
src/fullscreen.js

@@ -1,3 +1,5 @@
+import utils from './utils';
+
 class FullScreen {
     constructor (player) {
         this.player = player;
@@ -50,6 +52,11 @@ class FullScreen {
             break;
         case 'web':
             this.player.container.classList.add('dplayer-fulled');
+
+            // record last position then hide scrollbars
+            this.lastScrollPosition = utils.getScrollPosition();
+            document.body.classList.add('dplayer-web-fullscreen-fix');
+
             this.player.events.trigger('webfullscreen');
             break;
         }
@@ -70,6 +77,11 @@ class FullScreen {
             break;
         case 'web':
             this.player.container.classList.remove('dplayer-fulled');
+
+            // restore scrollbars and last position
+            document.body.classList.remove('dplayer-web-fullscreen-fix');
+            utils.setScrollPosition(this.lastScrollPosition);
+
             this.player.events.trigger('webfullscreen_cancel');
             break;
         }

+ 21 - 0
src/utils.js

@@ -36,11 +36,32 @@ module.exports = {
         return actualLeft - elementScrollLeft;
     },
 
+    getScrollPosition () {
+        return {
+            left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0,
+            top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0
+        };
+    },
+
+    setScrollPosition ({left = 0, top = 0}) {
+        if (this.isFirefox) {
+            document.documentElement.scrollLeft = left;
+            document.documentElement.scrollTop = top;
+        }
+        else {
+            window.scrollTo(left, top);
+        }
+    },
+
     /**
      * check if user is using mobile or not
      */
     isMobile: /mobile/i.test(window.navigator.userAgent),
 
+    isFirefox: /firefox/i.test(window.navigator.userAgent),
+
+    isChrome: /chrome/i.test(window.navigator.userAgent),
+
     storage: {
         set: (key, value) => {
             localStorage.setItem(key, value);