浏览代码

Добавлена возможность автосокрытия панели при прокрутке

Book Pauk 3 年之前
父节点
当前提交
d957b4a5f9

+ 13 - 0
client/components/Reader/Reader.vue

@@ -141,6 +141,7 @@
                     @load-file="loadFile"
                     @book-pos-changed="bookPosChanged"
                     @do-action="doAction"
+                    @hide-tool-bar="hideToolBar"
                 ></component>
             </keep-alive>
 
@@ -348,6 +349,13 @@ class Reader {
             this.debouncedSetRecentBook(newValue);
         }, 15000, {maxWait: 20000});
 
+        this.debouncedHideToolBar = _.debounce((event) => {
+            if (this.toolBarHideOnScroll && this.toolBarActive !== !!event.show) {
+                this.commit('reader/setToolBarActive', !!event.show);
+                this.$root.eventHook('resize');
+            }
+        }, 200);
+
         document.addEventListener('fullscreenchange', () => {
             this.fullScreenActive = (document.fullscreenElement !== null);
         });
@@ -405,6 +413,7 @@ class Reader {
         this.clickControlActive = this.clickControl;
         this.blinkCachedLoad = settings.blinkCachedLoad;
         this.showToolButton = settings.showToolButton;
+        this.toolBarHideOnScroll = settings.toolBarHideOnScroll;
         this.enableSitesFilter = settings.enableSitesFilter;
         this.showNeedUpdateNotify = settings.showNeedUpdateNotify;
         this.splitToPara = settings.splitToPara;
@@ -665,6 +674,10 @@ class Reader {
         this.$root.eventHook('resize');
     }
 
+    hideToolBar(event) {
+        this.debouncedHideToolBar(event);
+    }
+
     fullScreenToggle() {
         this.fullScreenActive = !this.fullScreenActive;
         if (this.fullScreenActive) {

+ 0 - 9
client/components/Reader/SettingsPage/ButtonsTab.inc

@@ -1,9 +0,0 @@
-<div class="part-header">Показывать кнопки панели</div>
-
-<div class="item row" v-for="item in toolButtons" :key="item.name" v-show="item.name != 'libs' || mode == 'liberama.top'">
-    <div class="label-3"></div>
-    <div class="col row">
-        <q-checkbox size="xs" v-model="showToolButton[item.name]" :label="rstore.readerActions[item.name]"
-        />
-    </div>
-</div>

+ 5 - 5
client/components/Reader/SettingsPage/SettingsPage.vue

@@ -24,7 +24,7 @@
                     <div v-show="tabsScrollable" class="q-pt-lg" />
                     <q-tab class="tab" name="profiles" icon="la la-users" label="Профили" />
                     <q-tab class="tab" name="view" icon="la la-eye" label="Вид" />
-                    <q-tab class="tab" name="buttons" icon="la la-grip-horizontal" label="Кнопки" />
+                    <q-tab class="tab" name="toolbar" icon="la la-grip-horizontal" label="Панель" />
                     <q-tab class="tab" name="keys" icon="la la-gamepad" label="Управление" />
                     <q-tab class="tab" name="pagemove" icon="la la-school" label="Листание" />
                     <q-tab class="tab" name="convert" icon="la la-magic" label="Конвертир." />
@@ -82,8 +82,8 @@
                     </div>
                 </div>
                 <!-- Кнопки ---------------------------------------------------------------------->
-                <div v-if="selectedTab == 'buttons'" class="fit tab-panel">
-                    @@include('./ButtonsTab.inc');
+                <div v-if="selectedTab == 'toolbar'" class="fit tab-panel">
+                    @@include('./ToolBarTab.inc');
                 </div>
                 <!-- Управление ------------------------------------------------------------------>
                 <div v-if="selectedTab == 'keys'" class="fit column">
@@ -702,11 +702,11 @@ export default vueComponent(SettingsPage);
     margin-bottom: 5px;
 }
 
-.label-1, .label-7 {
+.label-1, .label-3, .label-7 {
     width: 75px;
 }
 
-.label-2, .label-3, .label-4, .label-5 {
+.label-2, .label-4, .label-5 {
     width: 110px;
 }
 

+ 18 - 0
client/components/Reader/SettingsPage/ToolBarTab.inc

@@ -0,0 +1,18 @@
+<div class="part-header">Отображение</div>
+
+<div class="item row no-wrap">
+    <div class="label-3"></div>
+    <q-checkbox size="xs" v-model="toolBarHideOnScroll" label="Скрывать/показывать панель при прокрутке" >
+        <q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
+            Скрывать/показывть панель при прокрутке текста вперед/назад
+        </q-tooltip>
+    </q-checkbox>
+</div>
+
+<div class="part-header">Показывать кнопки</div>
+
+<div class="item row no-wrap" v-for="item in toolButtons" :key="item.name" v-show="item.name != 'libs' || mode == 'liberama.top'">
+    <div class="label-3"></div>
+        <q-checkbox size="xs" v-model="showToolButton[item.name]" :label="rstore.readerActions[item.name]"
+        />
+</div>

+ 18 - 3
client/components/Reader/TextPage/TextPage.vue

@@ -66,7 +66,14 @@ const componentOptions = {
     watch: {
         bookPos: function() {
             this.$emit('book-pos-changed', {bookPos: this.bookPos, bookPosSeen: this.bookPosSeen});
+
             this.draw();
+
+            if (this.userBookPosChange) {
+                this.$emit('hide-tool-bar', {show: (this.bookPos == 0 || this.bookPos < this.prevBookPos)});
+                this.prevBookPos = this.bookPos;
+                this.userBookPosChange = false;
+            }
         },
         bookPosSeen: function() {
             this.$emit('book-pos-changed', {bookPos: this.bookPos, bookPosSeen: this.bookPosSeen});
@@ -99,6 +106,8 @@ class TextPage {
     lastBook = null;
     bookPos = 0;
     bookPosSeen = null;
+    prevBookPos = 0;
+    userBookPosChange = false;
 
     fontStyle = null;
     fontSize = null;
@@ -652,7 +661,7 @@ class TextPage {
         }
 
         if (this.book && this.bookPos > 0 && this.bookPos >= this.parsed.textLength) {
-            this.doEnd(true);
+            this.doEnd(true, false);
             return;
         }
 
@@ -675,7 +684,7 @@ class TextPage {
         this.debouncedDrawPageDividerAndOrnament();
 
         if (this.book && this.linesDown && this.linesDown.length < this.pageLineCount) {
-            this.doEnd(true);
+            this.doEnd(true, false);
             return;
         }
     }
@@ -911,12 +920,14 @@ class TextPage {
 
     doDown() {
         if (this.linesDown && this.linesDown.length > this.pageLineCount && this.pageLineCount > 0) {
+            this.userBookPosChange = true;
             this.bookPos = this.linesDown[1].begin;
         }
     }
 
     doUp() {
         if (this.linesUp && this.linesUp.length > 1 && this.pageLineCount > 0) {
+            this.userBookPosChange = true;
             this.bookPos = this.linesUp[1].begin;
         }
     }
@@ -929,6 +940,7 @@ class TextPage {
             if (i >= 0 && this.linesDown.length >= 2*i + (this.keepLastToFirst ? 1 : 0)) {
                 this.currentAnimation = this.pageChangeAnimation;
                 this.pageChangeDirectionDown = true;
+                this.userBookPosChange = true;
                 this.bookPos = this.linesDown[i].begin;
             } else 
                 this.doEnd();
@@ -944,6 +956,7 @@ class TextPage {
             if (i >= 0 && this.linesUp.length > i) {
                 this.currentAnimation = this.pageChangeAnimation;
                 this.pageChangeDirectionDown = false;
+                this.userBookPosChange = true;
                 this.bookPos = this.linesUp[i].begin;
             }
         }
@@ -952,10 +965,11 @@ class TextPage {
     doHome() {
         this.currentAnimation = this.pageChangeAnimation;
         this.pageChangeDirectionDown = false;
+        this.userBookPosChange = true;
         this.bookPos = 0;
     }
 
-    doEnd(noAni) {
+    doEnd(noAni, isUser = true) {
         if (this.parsed.para.length && this.pageLineCount > 0) {
             let i = this.parsed.para.length - 1;
             let lastPos = this.parsed.para[i].offset + this.parsed.para[i].length - 1;
@@ -966,6 +980,7 @@ class TextPage {
                 if (!noAni)
                     this.currentAnimation = this.pageChangeAnimation;
                 this.pageChangeDirectionDown = true;
+                this.userBookPosChange = isUser;
                 this.bookPos = lines[i].begin;
             }
         }

+ 1 - 0
client/store/modules/reader.js

@@ -185,6 +185,7 @@ const settingDefaults = {
 
     fontShifts: {},
     showToolButton: {},
+    toolBarHideOnScroll: true,
     userHotKeys: {},
     userWallpapers: [],
 };