Jelajahi Sumber

Merge pull request #3372 from StanHustler/master

web阅读优化
kunfei 3 tahun lalu
induk
melakukan
cc7018e13c
25 mengubah file dengan 61 tambahan dan 12 penghapusan
  1. 0 0
      app/src/main/assets/web/vue/assets/BookChapter-1fe439a7.css
  2. 0 0
      app/src/main/assets/web/vue/assets/BookChapter-9bb53da5.js
  3. 0 0
      app/src/main/assets/web/vue/assets/BookChapter-cf3fdac5.css
  4. 0 0
      app/src/main/assets/web/vue/assets/BookChapter-f8cd870c.js
  5. 0 0
      app/src/main/assets/web/vue/assets/BookShelf-6af38855.css
  6. 0 0
      app/src/main/assets/web/vue/assets/BookShelf-803cc512.css
  7. 0 0
      app/src/main/assets/web/vue/assets/BookShelf-f6baeae9.js
  8. 0 1
      app/src/main/assets/web/vue/assets/config-56304acd.js
  9. 1 0
      app/src/main/assets/web/vue/assets/config-ccc7fe24.js
  10. 0 0
      app/src/main/assets/web/vue/assets/index-0af0d34a.js
  11. 0 0
      app/src/main/assets/web/vue/assets/index-6758c83f.js
  12. 0 0
      app/src/main/assets/web/vue/assets/index-a2df5179.css
  13. 0 0
      app/src/main/assets/web/vue/assets/loading-6856b75b.js
  14. 0 0
      app/src/main/assets/web/vue/assets/loading-db04d821.js
  15. 0 0
      app/src/main/assets/web/vue/assets/vendor-260e64da.js
  16. 0 0
      app/src/main/assets/web/vue/assets/vendor-31f92e7c.css
  17. 0 0
      app/src/main/assets/web/vue/assets/vendor-5578283d.css
  18. 0 0
      app/src/main/assets/web/vue/assets/vendor-b9134af1.js
  19. 4 4
      app/src/main/assets/web/vue/index.html
  20. 2 1
      modules/web/.eslintrc-auto-import.json
  21. 2 1
      modules/web/src/auto-imports.d.ts
  22. 1 3
      modules/web/src/components.d.ts
  23. 27 0
      modules/web/src/components/ReadSettings.vue
  24. 1 0
      modules/web/src/store/bookStore.js
  25. 23 2
      modules/web/src/views/BookChapter.vue

File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/BookChapter-1fe439a7.css


File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/BookChapter-9bb53da5.js


File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/BookChapter-cf3fdac5.css


File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/BookChapter-f8cd870c.js


File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/BookShelf-6af38855.css


File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/BookShelf-803cc512.css


File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/BookShelf-f6baeae9.js


+ 0 - 1
app/src/main/assets/web/vue/assets/config-56304acd.js

@@ -1 +0,0 @@
-import{A as f,u as i}from"./index-0af0d34a.js";import"./vendor-b9134af1.js";f.getReadConfig().then(e=>{var t=e.data.data;if(t){const a=i();let o=JSON.parse(t),s=a.config;o=Object.assign(s,o),a.setConfig(o)}});

+ 1 - 0
app/src/main/assets/web/vue/assets/config-ccc7fe24.js

@@ -0,0 +1 @@
+import{A as f,u as i}from"./index-6758c83f.js";import"./vendor-260e64da.js";f.getReadConfig().then(e=>{var t=e.data.data;if(t){const a=i();let o=JSON.parse(t),s=a.config;o=Object.assign(s,o),a.setConfig(o)}});

File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/index-0af0d34a.js


File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/index-6758c83f.js


File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/index-a2df5179.css


File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/loading-6856b75b.js


File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/loading-db04d821.js


File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/vendor-260e64da.js


File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/vendor-31f92e7c.css


File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/vendor-5578283d.css


File diff ditekan karena terlalu besar
+ 0 - 0
app/src/main/assets/web/vue/assets/vendor-b9134af1.js


+ 4 - 4
app/src/main/assets/web/vue/index.html

@@ -4,10 +4,10 @@
         <meta charset="UTF-8" />
         <meta charset="UTF-8" />
         <link rel="icon" href="./favicon.ico" />
         <link rel="icon" href="./favicon.ico" />
     <meta name="viewport" content="width=device-width,initial-scale=1.0" />
     <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-      <script type="module" crossorigin src="./assets/index-0af0d34a.js"></script>
-      <link rel="modulepreload" crossorigin href="./assets/vendor-b9134af1.js">
-      <link rel="stylesheet" href="./assets/vendor-5578283d.css">
-      <link rel="stylesheet" href="./assets/index-bd50a38f.css">
+      <script type="module" crossorigin src="./assets/index-6758c83f.js"></script>
+      <link rel="modulepreload" crossorigin href="./assets/vendor-260e64da.js">
+      <link rel="stylesheet" href="./assets/vendor-31f92e7c.css">
+      <link rel="stylesheet" href="./assets/index-a2df5179.css">
     </head>
     </head>
 
 
     <body>
     <body>

+ 2 - 1
modules/web/.eslintrc-auto-import.json

@@ -79,6 +79,7 @@
     "watchEffect": true,
     "watchEffect": true,
     "watchPostEffect": true,
     "watchPostEffect": true,
     "watchSyncEffect": true,
     "watchSyncEffect": true,
-    "toValue": true
+    "toValue": true,
+    "WritableComputedRef": true
   }
   }
 }
 }

+ 2 - 1
modules/web/src/auto-imports.d.ts

@@ -1,6 +1,7 @@
 /* eslint-disable */
 /* eslint-disable */
 /* prettier-ignore */
 /* prettier-ignore */
 // @ts-nocheck
 // @ts-nocheck
+// noinspection JSUnusedGlobalSymbols
 // Generated by unplugin-auto-import
 // Generated by unplugin-auto-import
 export {}
 export {}
 declare global {
 declare global {
@@ -81,5 +82,5 @@ declare global {
 // for type re-export
 // for type re-export
 declare global {
 declare global {
   // @ts-ignore
   // @ts-ignore
-  export type { Component, ComponentPublicInstance, ComputedRef, InjectionKey, PropType, Ref, VNode } from 'vue'
+  export type { Component, ComponentPublicInstance, ComputedRef, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue'
 }
 }

+ 1 - 3
modules/web/src/components.d.ts

@@ -3,11 +3,9 @@
 // @ts-nocheck
 // @ts-nocheck
 // Generated by unplugin-vue-components
 // Generated by unplugin-vue-components
 // Read more: https://github.com/vuejs/core/pull/3399
 // Read more: https://github.com/vuejs/core/pull/3399
-import '@vue/runtime-core'
-
 export {}
 export {}
 
 
-declare module '@vue/runtime-core' {
+declare module 'vue' {
   export interface GlobalComponents {
   export interface GlobalComponents {
     BookItems: typeof import('./components/BookItems.vue')['default']
     BookItems: typeof import('./components/BookItems.vue')['default']
     CatalogItem: typeof import('./components/CatalogItem.vue')['default']
     CatalogItem: typeof import('./components/CatalogItem.vue')['default']

+ 27 - 0
modules/web/src/components/ReadSettings.vue

@@ -138,6 +138,21 @@
             >
             >
           </div>
           </div>
         </li>
         </li>
+        <li class="paragraph-spacing">
+          <i>翻页速度</i>
+          <div class="resize">
+            <div class="resize">
+              <span class="less" @click="lessJumpDuration">
+                <em class="iconfont">&#xe625;</em>
+              </span>
+              <b></b> <span class="lang">{{ jumpDuration }}</span
+              ><b></b>
+              <span class="more" @click="moreJumpDuration"
+                ><em class="iconfont">&#xe626;</em></span
+              >
+            </div>
+          </div>
+        </li>
         <li class="infinite-loading">
         <li class="infinite-loading">
           <i>无限加载</i>
           <i>无限加载</i>
           <span
           <span
@@ -304,6 +319,18 @@ const lessReadWidth = () => {
   if (config.value.readWidth > 640) config.value.readWidth -= 160;
   if (config.value.readWidth > 640) config.value.readWidth -= 160;
   saveConfig(config.value);
   saveConfig(config.value);
 };
 };
+const jumpDuration = computed(() => {
+  return store.config.jumpDuration;
+});
+const moreJumpDuration = () => {
+  store.config.jumpDuration += 100;
+  saveConfig(config.value);
+};
+const lessJumpDuration = () => {
+  if (store.config.jumpDuration === 0) return;
+  store.config.jumpDuration -= 100;
+  saveConfig(config.value);
+};
 const infiniteLoading = computed(() => {
 const infiniteLoading = computed(() => {
   return store.config.infiniteLoading;
   return store.config.infiniteLoading;
 });
 });

+ 1 - 0
modules/web/src/store/bookStore.js

@@ -22,6 +22,7 @@ export const useBookStore = defineStore("book", {
         readWidth: 800,
         readWidth: 800,
         infiniteLoading: false,
         infiniteLoading: false,
         customFontName: "",
         customFontName: "",
+        jumpDuration: 1000,
         spacing: {
         spacing: {
           paragraph: 1,
           paragraph: 1,
           line: 0.8,
           line: 0.8,

+ 23 - 2
modules/web/src/views/BookChapter.vue

@@ -403,8 +403,10 @@ const onReachBottom = (entries) => {
   }
   }
 };
 };
 
 
+let canJump = true;
 // 监听方向键
 // 监听方向键
 const handleKeyPress = (event) => {
 const handleKeyPress = (event) => {
+  if (!canJump) return;
   switch (event.key) {
   switch (event.key) {
     case "ArrowLeft":
     case "ArrowLeft":
       event.stopPropagation();
       event.stopPropagation();
@@ -425,7 +427,11 @@ const handleKeyPress = (event) => {
           type: "warn",
           type: "warn",
         });
         });
       } else {
       } else {
-        jump(0 - document.documentElement.clientHeight + 100);
+        canJump = false;
+        jump(0 - document.documentElement.clientHeight + 100, {
+          duration: store.config.jumpDuration,
+          callback: () => (canJump = true),
+        });
       }
       }
       break;
       break;
     case "ArrowDown":
     case "ArrowDown":
@@ -441,11 +447,24 @@ const handleKeyPress = (event) => {
           type: "warn",
           type: "warn",
         });
         });
       } else {
       } else {
-        jump(document.documentElement.clientHeight - 100);
+        canJump = false;
+        jump(document.documentElement.clientHeight - 100, {
+          duration: store.config.jumpDuration,
+          callback: () => (canJump = true),
+        });
       }
       }
       break;
       break;
   }
   }
 };
 };
+
+// 阻止默认滚动事件
+const ignoreKeyPress = (event) => {
+  if (event.key === "ArrowUp" || event.key === "ArrowDown") {
+    event.preventDefault();
+    event.stopPropagation();
+  }
+};
+
 onMounted(() => {
 onMounted(() => {
   //获取书籍数据
   //获取书籍数据
   let bookUrl = sessionStorage.getItem("bookUrl");
   let bookUrl = sessionStorage.getItem("bookUrl");
@@ -484,6 +503,7 @@ onMounted(() => {
 
 
         getContent(chapterIndex, true, chapterPos);
         getContent(chapterIndex, true, chapterPos);
         window.addEventListener("keyup", handleKeyPress);
         window.addEventListener("keyup", handleKeyPress);
+        window.addEventListener("keydown", ignoreKeyPress);
         // 兼容Safari < 14
         // 兼容Safari < 14
         document.addEventListener("visibilitychange", onVisibilityChange);
         document.addEventListener("visibilitychange", onVisibilityChange);
         //监听底部加载
         //监听底部加载
@@ -505,6 +525,7 @@ onMounted(() => {
 
 
 onUnmounted(() => {
 onUnmounted(() => {
   window.removeEventListener("keyup", handleKeyPress);
   window.removeEventListener("keyup", handleKeyPress);
+  window.removeEventListener("keydown", ignoreKeyPress);
   window.removeEventListener("resize", onResize);
   window.removeEventListener("resize", onResize);
   // 兼容Safari < 14
   // 兼容Safari < 14
   document.removeEventListener("visibilitychange", onVisibilityChange);
   document.removeEventListener("visibilitychange", onVisibilityChange);

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini