From e260bcc1eac42ca8eb7f519148a42c945607d2a2 Mon Sep 17 00:00:00 2001
From: 闫增涛 <1829501689@qq.com>
Date: 星期一, 27 五月 2024 18:10:11 +0800
Subject: [PATCH] 优化

---
 src/books/childHealth/view/content/index.vue |  202 ++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 171 insertions(+), 31 deletions(-)

diff --git a/src/books/childHealth/view/content/index.vue b/src/books/childHealth/view/content/index.vue
index 908f46b..3d41ce9 100644
--- a/src/books/childHealth/view/content/index.vue
+++ b/src/books/childHealth/view/content/index.vue
@@ -1,25 +1,58 @@
 <template>
   <div class="page-main" @scroll="throttledScrollHandler">
-    <div
-      class="page-content"
-      :style="{
-        fontSize: fontSize ? fontSize + 'px' : '16px',
-        transform: `scale(${pageZoom ? pageZoom : 1})`
-      }"
-    >
-      <pageHeader v-if="showCatalogList.indexOf(0) > -1"></pageHeader>
-      <chapterOne v-if="showCatalogList.indexOf(1) > -1"></chapterOne>
-      <chapterTwo v-if="showCatalogList.indexOf(2) > -1"></chapterTwo>
-      <chapterThree v-if="showCatalogList.indexOf(3) > -1"></chapterThree>
-      <chapterFour v-if="showCatalogList.indexOf(4) > -1"></chapterFour>
-      <chapterFive v-if="showCatalogList.indexOf(5) > -1"></chapterFive>
-      <chapterSix v-if="showCatalogList.indexOf(6) > -1"></chapterSix>
-      <chapterSeven v-if="showCatalogList.indexOf(7) > -1"></chapterSeven>
-      <chapterEight v-if="showCatalogList.indexOf(8) > -1"></chapterEight>
-      <chapterNine v-if="showCatalogList.indexOf(9) > -1"></chapterNine>
-      <chapterTen v-if="showCatalogList.indexOf(10) > -1"></chapterTen>
-      <chapterEleven v-if="showCatalogList.indexOf(11) > -1"></chapterEleven>
-      <chapterTwelve v-if="showCatalogList.indexOf(12) > -1"></chapterTwelve>
+    <div class="page-content">
+      <pageHeader
+        v-if="showCatalogList.indexOf(0) > -1"
+        :showPageList="loadPageList"
+      ></pageHeader>
+      <chapterOne
+        v-if="showCatalogList.indexOf(1) > -1"
+        :showPageList="loadPageList"
+      ></chapterOne>
+      <chapterTwo
+        v-if="showCatalogList.indexOf(2) > -1"
+        :showPageList="loadPageList"
+      ></chapterTwo>
+      <chapterThree
+        v-if="showCatalogList.indexOf(3) > -1"
+        :showPageList="loadPageList"
+      ></chapterThree>
+      <chapterFour
+        v-if="showCatalogList.indexOf(4) > -1"
+        :showPageList="loadPageList"
+      ></chapterFour>
+      <chapterFive
+        v-if="showCatalogList.indexOf(5) > -1"
+        :showPageList="loadPageList"
+      ></chapterFive>
+      <chapterSix
+        v-if="showCatalogList.indexOf(6) > -1"
+        :showPageList="loadPageList"
+      ></chapterSix>
+      <chapterSeven
+        v-if="showCatalogList.indexOf(7) > -1"
+        :showPageList="loadPageList"
+      ></chapterSeven>
+      <chapterEight
+        v-if="showCatalogList.indexOf(8) > -1"
+        :showPageList="loadPageList"
+      ></chapterEight>
+      <chapterNine
+        v-if="showCatalogList.indexOf(9) > -1"
+        :showPageList="loadPageList"
+      ></chapterNine>
+      <chapterTen
+        v-if="showCatalogList.indexOf(10) > -1"
+        :showPageList="loadPageList"
+      ></chapterTen>
+      <chapterEleven
+        v-if="showCatalogList.indexOf(11) > -1"
+        :showPageList="loadPageList"
+      ></chapterEleven>
+      <chapterTwelve
+        v-if="showCatalogList.indexOf(12) > -1"
+        :showPageList="loadPageList"
+      ></chapterTwelve>
       <chapterThirteen
         v-if="showCatalogList.indexOf(13) > -1"
       ></chapterThirteen>
@@ -53,16 +86,10 @@
       throttleThreshold: 100, // 鑺傛祦闃堝��
       previousScrollTop: 0,
       throttledScrollHandler: null,
-      observer: null
+      observer: null,
+      loadPageObserver: null,
+      loadPageList: []
     };
-  },
-  computed: {
-    fontSize() {
-      return this.$store.state.qiankun.fontSize;
-    },
-    pageZoom() {
-      return this.$store.state.qiankun.scale / 100;
-    }
   },
   watch: {
     showCatalogList: {
@@ -79,6 +106,7 @@
         // 鍚姩椤电爜瑙傚療
         setTimeout(() => {
           this.initObservation();
+          this.initThemeColor();
         }, 500);
       }
     }
@@ -118,9 +146,16 @@
       threshold: 0.5 // 鎸囧畾浜ゅ弶姣斾緥锛岃繖閲岃涓� 0.5锛岃〃绀哄綋鐩爣鍏冪礌涓�鍗婃垨鏇村鏄剧ず鍦ㄨ绐椾腑鏃惰Е鍙戝洖璋冨嚱鏁般��
     });
 
+    this.loadPageObserver = new IntersectionObserver(this.loadPageCallback, {
+      root: null, // 鎸囧畾鏍瑰厓绱狅紝杩欓噷璁句负 null锛岃〃绀洪�夊彇鏁翠釜瑙嗙獥浣滀负鏍瑰厓绱犮��
+      rootMargin: "0px", // 鎸囧畾鏍瑰厓绱犵殑杈圭晫锛岃繖閲岃涓� "0px"锛岃〃绀烘牴鍏冪礌鐨勮竟鐣屽拰瑙嗙獥鐨勮竟鐣岄噸鍚�
+      threshold: 0 // 鎸囧畾浜ゅ弶姣斾緥锛岃繖閲岃涓� 0.5锛岃〃绀哄綋鐩爣鍏冪礌涓�鍗婃垨鏇村鏄剧ず鍦ㄨ绐椾腑鏃惰Е鍙戝洖璋冨嚱鏁般��
+    });
+
     // 鍚姩椤电爜瑙傚療
     setTimeout(() => {
       this.initObservation();
+      this.initThemeColor();
     }, 500);
 
     // 娴嬭瘯椤甸潰璺宠浆
@@ -218,6 +253,7 @@
         console.log("绔犺妭閿欒锛�");
       }
     },
+
     // 娓叉煋鏍囪
     renderSign(type, data) {
       const existence = (
@@ -248,7 +284,7 @@
             // 绗旇
             pageDom.innerHTML = pageDom.innerHTML.replace(
               reg,
-              `<span datatype="Note" dataid="${data.id}" style="border-bottom-color:${data.color}" class="notesline" onclick="signClick('Note','${data.id}','${data.chapterNum}')">${data.txt}<img src="${NoteIcon}" style="cursor: pointer" /></span>`
+              `<span datatype="Note" dataid="${data.id}" style="border-bottom-color:${data.color}" class="notesline" onclick="signClick('Note','${data.id}','${data.chapterNum}')" onmouseover="noteHover('Note','${data.id}','${data.chapterNum}')">${data.txt}<img src="${NoteIcon}"/></span>`
             );
             break;
         }
@@ -285,14 +321,106 @@
       const sections = (
         this.container ? this.container : document
       ).querySelectorAll(".page-box");
-      //observer 瑙傚療姣忎釜鍏冪礌锛屼互渚垮湪瀹冧滑杩涘叆鎴栫寮�瑙嗙獥鏃惰Е鍙戝洖璋冨嚱鏁般��
       sections.forEach((section) => {
+        //observer 瑙傚療姣忎釜鍏冪礌锛屼互渚垮湪瀹冧滑杩涘叆鎴栫寮�瑙嗙獥鏃惰Е鍙戝洖璋冨嚱鏁般��
         const isObserver = section.getAttribute("observer");
+        const isLoadObserver = section.getAttribute("loadObserver");
         if (!isObserver) {
           this.observer.observe(section);
           section.setAttribute("observer", "1");
         }
+        if (!isLoadObserver) {
+          this.loadPageObserver.observe(section);
+          section.setAttribute("loadObserver", "1");
+        }
       });
+    },
+    initThemeColor() {
+      // 鑾峰彇鍚勭闇�瑕佷富棰樿壊鐨勮妭鐐�
+      const colorDom = (
+        this.container ? this.container : document
+      ).querySelectorAll(".theme-color");
+      const backgroundColorDom = (
+        this.container ? this.container : document
+      ).querySelectorAll(".theme-back");
+      const borderColorDom = (
+        this.container ? this.container : document
+      ).querySelectorAll(".theme-border");
+      // 鑾峰彇閰嶇疆鐨勪富棰樿壊
+      const bookThemeColor =
+        this.config.activeBook && this.config.activeBook.bookThemeColor
+          ? this.config.activeBook.bookThemeColor
+          : null;
+      const chapterThemeColor =
+        this.config.activeBook && this.config.activeBook.chapterThemeColor
+          ? this.config.activeBook.chapterThemeColor
+          : null;
+      const pageThemeColor =
+        this.config.activeBook && this.config.activeBook.pageThemeColor
+          ? this.config.activeBook.pageThemeColor
+          : null;
+      colorDom.forEach((domItem) => {
+        // 鑾峰彇绔犺妭銆侀〉鐮�
+        let pageDom = this.getParentWithClass(domItem, "page-box");
+        let chapterDom = this.getParentWithClass(domItem, "chapter");
+        let page, chapterNum;
+        if (pageDom) page = pageDom.getAttribute("page");
+        if (chapterDom) chapterNum = chapterDom.getAttribute("num");
+        // 鍚戜笂鍖归厤涓婚鑹�
+        const themeColor =
+          page && pageThemeColor && pageThemeColor[page]
+            ? pageThemeColor[page]
+            : chapterNum && chapterThemeColor && chapterThemeColor[chapterNum]
+            ? chapterThemeColor[chapterNum]
+            : bookThemeColor;
+        if (themeColor) {
+          domItem.style.color = themeColor;
+        }
+      });
+      backgroundColorDom.forEach((domItem) => {
+        // 鑾峰彇绔犺妭銆侀〉鐮�
+        let pageDom = this.getParentWithClass(domItem, "page-box");
+        let chapterDom = this.getParentWithClass(domItem, "chapter");
+        let page, chapterNum;
+        if (pageDom) page = pageDom.getAttribute("page");
+        if (chapterDom) chapterNum = chapterDom.getAttribute("num");
+        // 鍚戜笂鍖归厤涓婚鑹�
+        const themeColor =
+          page && pageThemeColor && pageThemeColor[page]
+            ? pageThemeColor[page]
+            : chapterNum && chapterThemeColor && chapterThemeColor[chapterNum]
+            ? chapterThemeColor[chapterNum]
+            : bookThemeColor;
+        if (themeColor) {
+          domItem.style.backgroundColor = themeColor;
+        }
+      });
+      borderColorDom.forEach((domItem) => {
+        // 鑾峰彇绔犺妭銆侀〉鐮�
+        let pageDom = this.getParentWithClass(domItem, "page-box");
+        let chapterDom = this.getParentWithClass(domItem, "chapter");
+        let page, chapterNum;
+        if (pageDom) page = pageDom.getAttribute("page");
+        if (chapterDom) chapterNum = chapterDom.getAttribute("num");
+        // 鍚戜笂鍖归厤涓婚鑹�
+        const themeColor =
+          page && pageThemeColor && pageThemeColor[page]
+            ? pageThemeColor[page]
+            : chapterNum && chapterThemeColor && chapterThemeColor[chapterNum]
+            ? chapterThemeColor[chapterNum]
+            : bookThemeColor;
+        if (themeColor) {
+          domItem.style.borderColor = themeColor;
+        }
+      });
+    },
+    getParentWithClass(element, className) {
+      while (element.parentElement) {
+        element = element.parentElement;
+        if (element.classList.contains(className)) {
+          return element;
+        }
+      }
     },
     pageChangeCallback(entries, observer) {
       //entries锛氫唬琛ㄨ瀵熷埌鐨勭洰鏍囧厓绱犵殑闆嗗悎銆� observer锛氫唬琛ㄨ瀵熻�呭璞°��
@@ -320,6 +448,18 @@
           //index锛氭煡鎵惧綋鍓嶇洰鏍囧厓绱犲湪 sections 鏁扮粍涓殑绱㈠紩锛屽苟鍔� 1锛岀敤浜庣‘瀹氬綋鍓嶉〉鐮併��
         }
       });
+    },
+    loadPageCallback(entries, observer) {
+      entries.forEach((entry) => {
+        if (entry.isIntersecting) {
+          const target = entry.target;
+          const page = target.getAttribute("page");
+          if (this.loadPageList.indexOf(page) == -1) {
+            this.loadPageList.push(page);
+            console.log(this.loadPageList,"this.loadPageList");
+          }
+        }
+      });
     }
   },
   components: {

--
Gitblit v1.9.1