From 67d22fb0aeb9fe90b766abae0e41cb04aebc1296 Mon Sep 17 00:00:00 2001
From: YM <479443481@qq.com>
Date: 星期五, 17 五月 2024 15:45:09 +0800
Subject: [PATCH] 页码监听

---
 src/assets/js/toolClass.js                   |  218 +++++++++++++++++++-----------------
 vue.config.js                                |    4 
 src/books/childHealth/view/index.vue         |   10 -
 src/assets/methods/examination.js            |    1 
 src/books/childHealth/view/content/index.vue |   71 ++++++++++-
 5 files changed, 179 insertions(+), 125 deletions(-)

diff --git a/src/assets/js/toolClass.js b/src/assets/js/toolClass.js
index 3c8bc0d..61db6fb 100644
--- a/src/assets/js/toolClass.js
+++ b/src/assets/js/toolClass.js
@@ -1,75 +1,76 @@
-import SparkMD5 from 'spark-md5'
-import { getPublicImage } from '@/assets/js/middleGround/tool.js'
+import SparkMD5 from "spark-md5";
+import { getPublicImage } from "@/assets/js/middleGround/tool.js";
 // import moment from "moment";
 
 var tool = {
   secondToTime(second) {
-    var minute = Math.floor(second / 60)
-    var sec = second % 60
-    var time
+    var minute = Math.floor(second / 60);
+    var sec = second % 60;
+    var time;
     if (second < 60) {
-      time = second + '"'
+      time = second + '"';
     } else {
-      time = sec === 0 ? minute + "'" : minute + "'" + sec + '"'
+      time = sec === 0 ? minute + "'" : minute + "'" + sec + '"';
     }
-    return time
+    return time;
   },
   setCookie: function (c_name, value, expiredays, path) {
-    var exdate = new Date()
-    exdate.setDate(exdate.getDate() + expiredays)
+    var exdate = new Date();
+    exdate.setDate(exdate.getDate() + expiredays);
     document.cookie =
       c_name +
-      '=' +
+      "=" +
       escape(value) +
-      (expiredays == null ? '' : ';expires=' + exdate.toGMTString()) +
-      (path ? ';path=' + path : '')
+      (expiredays == null ? "" : ";expires=" + exdate.toGMTString()) +
+      (path ? ";path=" + path : "");
   },
   getCookie: function (c_name) {
     if (document.cookie.length > 0) {
-      var c_start = document.cookie.indexOf(c_name + '=')
+      var c_start = document.cookie.indexOf(c_name + "=");
       if (c_start != -1) {
-        c_start = c_start + c_name.length + 1
-        var c_end = document.cookie.indexOf(';', c_start)
-        if (c_end == -1) c_end = document.cookie.length
-        return unescape(document.cookie.substring(c_start, c_end))
+        c_start = c_start + c_name.length + 1;
+        var c_end = document.cookie.indexOf(";", c_start);
+        if (c_end == -1) c_end = document.cookie.length;
+        return unescape(document.cookie.substring(c_start, c_end));
       }
     }
-    return ''
+    return "";
   },
   delCookie: function (name) {
-    var exp = new Date()
-    exp.setTime(exp.getTime() - 1)
-    var cval = tool.getCookie(name)
-    if (cval != null) document.cookie = name + '=' + cval + ';expires=' + exp.toGMTString()
+    var exp = new Date();
+    exp.setTime(exp.getTime() - 1);
+    var cval = tool.getCookie(name);
+    if (cval != null)
+      document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
   },
   // 寮哄埗淇濈暀2浣嶅皬鏁帮紝濡傦細2锛屼細鍦�2鍚庨潰琛ヤ笂00.鍗�2.00
   toDecimal2(x) {
-    var f
-    f = parseFloat(x)
+    var f;
+    f = parseFloat(x);
     if (isNaN(f)) {
-      return false
+      return false;
     }
-    f = Math.round(x * 100) / 100
-    var s = f.toString()
-    var rs = s.indexOf('.')
+    f = Math.round(x * 100) / 100;
+    var s = f.toString();
+    var rs = s.indexOf(".");
     if (rs < 0) {
-      rs = s.length
-      s += '.'
+      rs = s.length;
+      s += ".";
     }
     while (s.length <= rs + 2) {
-      s += '0'
+      s += "0";
     }
-    return s
+    return s;
   },
   formateTime(date) {
     var newDate = new Date(+new Date(date) + 8 * 3600 * 1000)
       .toISOString()
-      .replace(/T/g, ' ')
-      .replace(/\.[\d]{3}Z/, '')
-    var time = new Date(newDate)
-    return time.getTime()
+      .replace(/T/g, " ")
+      .replace(/\.[\d]{3}Z/, "");
+    var time = new Date(newDate);
+    return time.getTime();
   }
-}
+};
 
 // 澶勭悊璁㈠崟璁板綍
 // export function setOrderList(res) {
@@ -138,22 +139,22 @@
 
 //澶勭悊琛ㄥ崟鎻愪氦鏁版嵁
 export function worksData(res) {
-  let arr = []
+  let arr = [];
   for (let i = 0; i < res.length; i++) {
-    const item = res[i]
+    const item = res[i];
     if (item.typeField) {
       if (item.typeField.config) {
-        item.typeField.options = JSON.parse(item.typeField.config).option
+        item.typeField.options = JSON.parse(item.typeField.config).option;
       }
-      arr.push(item.typeField)
+      arr.push(item.typeField);
     }
   }
-  return arr
+  return arr;
 }
 
 export function worksDataBytool(res, value, linkList) {
-  let arr = []
-  let nrr = []
+  let arr = [];
+  let nrr = [];
   if (linkList && linkList.length > 0) {
     linkList.forEach((e) =>
       nrr.push({
@@ -161,45 +162,45 @@
         linkType: e.linkType,
         md5: e.md5
       })
-    )
+    );
   }
   res.forEach((item) => {
     const obj = {
       baseType: item.typeField.baseType,
       order: 0,
       typeFieldId: item.typeField.id,
-      sequenceNum: item.config ? JSON.parse(item.config).uuid : '',
+      sequenceNum: item.config ? JSON.parse(item.config).uuid : "",
       newDataAndFileLinkListRequest: []
-    }
+    };
     for (let k in value) {
       if (item.typeField.refCode === k) {
-        if (item.typeField.type == 'File') {
+        if (item.typeField.type == "File") {
           try {
-            obj.strValue = JSON.stringify(value[k].map((citem) => citem.md5))
+            obj.strValue = JSON.stringify(value[k].map((citem) => citem.md5));
           } catch (error) {
-            obj.strValue = ''
+            obj.strValue = "";
           }
-          obj.newDataAndFileLinkListRequest = nrr
+          obj.newDataAndFileLinkListRequest = nrr;
         } else {
-          if (typeof value[k] == 'object') {
-            obj.strValue = JSON.stringify(value[k])
+          if (typeof value[k] == "object") {
+            obj.strValue = JSON.stringify(value[k]);
           } else {
-            if (obj.baseType === 'String') {
-              obj.strValue = value[k] + ''
-            } else if (obj.baseType === 'Text') {
-              obj.textValue = value[k] + ''
+            if (obj.baseType === "String") {
+              obj.strValue = value[k] + "";
+            } else if (obj.baseType === "Text") {
+              obj.textValue = value[k] + "";
             } else {
-              obj.strValue = value[k] + ''
+              obj.strValue = value[k] + "";
             }
           }
         }
       }
     }
     // if (obj.strValue || obj.textValue) {
-    arr.push(obj)
+    arr.push(obj);
     // }
-  })
-  return arr
+  });
+  return arr;
 }
 
 export function UpdateworksDataBytool(initData, res, value, linkList) {
@@ -223,7 +224,7 @@
         id: updateOldData.id,
         typeFieldId: citem.typeField.id,
         sequenceNum: citem.sequenceNum,
-        setDataAndFileLinkListRequest: [],
+        setDataAndFileLinkListRequest: []
       };
       for (let k in value) {
         if (citem.typeField.refCode === k) {
@@ -247,7 +248,7 @@
         order: 0,
         typeFieldId: citem.typeField.id,
         sequenceNum: citem.sequenceNum,
-        setDataAndFileLinkListRequest: [],
+        setDataAndFileLinkListRequest: []
       };
       for (let k in value) {
         if (citem.typeField.refCode === k) {
@@ -266,21 +267,21 @@
   });
   return {
     updateData: arr,
-    newData: newArr,
+    newData: newArr
   };
 }
 
 export function download(url) {
-  const iframe = document.createElement('iframe')
-  iframe.setAttribute('hidden', 'hidden')
-  document.body.appendChild(iframe)
+  const iframe = document.createElement("iframe");
+  iframe.setAttribute("hidden", "hidden");
+  document.body.appendChild(iframe);
   iframe.onload = () => {
     if (iframe) {
-      iframe.setAttribute('src', 'about:blank')
+      iframe.setAttribute("src", "about:blank");
     }
-  }
+  };
 
-  iframe.setAttribute('src', url)
+  iframe.setAttribute("src", url);
 }
 
 /**
@@ -290,66 +291,78 @@
  * @returns {string}
  */
 export function uuid(len = 32, radix = 16) {
-  const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
+  const chars =
+    "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");
   let uuid = [],
-    i
-  radix = radix || chars.length
+    i;
+  radix = radix || chars.length;
 
   if (len) {
     // Compact form
-    for (i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)]
+    for (i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)];
   } else {
     // rfc4122, version 4 form
-    let r
+    let r;
 
     // rfc4122 requires these characters
-    uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
-    uuid[14] = '4'
+    uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-";
+    uuid[14] = "4";
 
     // Fill in random data.  At i==19 set the high bits of clock sequence as
     // per rfc4122, sec. 4.1.5
     for (i = 0; i < 36; i++) {
       if (!uuid[i]) {
-        r = 0 | (Math.random() * 16)
-        uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r]
+        r = 0 | (Math.random() * 16);
+        uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r];
       }
     }
   }
 
-  return uuid.join('')
+  return uuid.join("");
 }
 
 export function getFileMd5(file, chunkSize) {
   return new Promise((resolve, reject) => {
-    let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice
-    let chunks = Math.ceil(file.size / chunkSize)
-    let currentChunk = 0
-    let spark = new SparkMD5.ArrayBuffer()
-    let fileReader = new FileReader()
+    let blobSlice =
+      File.prototype.slice ||
+      File.prototype.mozSlice ||
+      File.prototype.webkitSlice;
+    let chunks = Math.ceil(file.size / chunkSize);
+    let currentChunk = 0;
+    let spark = new SparkMD5.ArrayBuffer();
+    let fileReader = new FileReader();
     fileReader.onload = function (e) {
-      spark.append(e.target.result)
-      currentChunk++
+      spark.append(e.target.result);
+      currentChunk++;
       if (currentChunk < chunks) {
-        loadNext()
+        loadNext();
       } else {
-        const md5 = spark.end()
-        resolve(md5)
+        const md5 = spark.end();
+        resolve(md5);
       }
-    }
+    };
     fileReader.onerror = function (e) {
-      reject(e)
-    }
+      reject(e);
+    };
 
     function loadNext() {
-      let start = currentChunk * chunkSize
-      let end = start + chunkSize
+      let start = currentChunk * chunkSize;
+      let end = start + chunkSize;
       if (end > file.size) {
-        end = file.size
+        end = file.size;
       }
-      fileReader.readAsArrayBuffer(blobSlice.call(file, start, end))
+      fileReader.readAsArrayBuffer(blobSlice.call(file, start, end));
     }
-    loadNext()
-  })
+    loadNext();
+  });
+}
+
+export function getParentNodeByClassName(element, className) {
+  if (element && element.classList.contains(className)) {
+    return element;
+  } else {
+    return getParentNodeByClassName(element.parentNode, className);
+  }
 }
 
 // 澶勭悊鏃堕棿锛岀敤浜庢樉绀洪煶瑙嗛褰撳墠鏃堕棿
@@ -460,6 +473,7 @@
   worksDataBytool,
   UpdateworksDataBytool,
   getPublicImage,
-  worksData
+  worksData,
+  getParentNodeByClassName
   // parseHtml,
-}
+};
diff --git a/src/assets/methods/examination.js b/src/assets/methods/examination.js
index c993fab..bb9fde7 100644
--- a/src/assets/methods/examination.js
+++ b/src/assets/methods/examination.js
@@ -204,7 +204,6 @@
       citem.number = cindex + 1;
     }
   }
-  console.log(cardList.filter(item=>item.infoList.length > 0),"cardList.filter(item=>item.infoList.length > 0)");
   return cardList.filter(item=>item.infoList.length > 0);
 };
 
diff --git a/src/books/childHealth/view/content/index.vue b/src/books/childHealth/view/content/index.vue
index 6e37da0..920b6dc 100644
--- a/src/books/childHealth/view/content/index.vue
+++ b/src/books/childHealth/view/content/index.vue
@@ -46,7 +46,8 @@
       loadThreshold: 300, // 瑙﹀彂鍔犺浇闃堝��
       throttleThreshold: 100, // 鑺傛祦闃堝��
       previousScrollTop: 0,
-      throttledScrollHandler: null
+      throttledScrollHandler: null,
+      observer: null
     };
   },
   watch: {
@@ -61,6 +62,10 @@
             showCatalogList: newVal
           });
         }
+        // 鍚姩椤电爜瑙傚療
+        setTimeout(() => {
+          this.initObservation();
+        }, 500);
       }
     }
   },
@@ -91,6 +96,19 @@
       });
     }
 
+    // 鍒涘缓涓�涓柊鐨� Intersection Observer 瀹炰緥锛岀敤浜庤瀵熺洰鏍囧厓绱犲拰鎵ц鐩稿簲鐨勫洖璋冨嚱鏁般��
+    // new IntersectionObserver(callback, options)锛氫娇鐢ㄤ箣鍓嶅畾涔夌殑 callback 鍥炶皟鍑芥暟鍜� options 閰嶇疆閫夐」鏉ュ垵濮嬪寲 Intersection Observer 瀹炰緥銆�
+    this.observer = new IntersectionObserver(this.pageChangeCallback, {
+      root: null, // 鎸囧畾鏍瑰厓绱狅紝杩欓噷璁句负 null锛岃〃绀洪�夊彇鏁翠釜瑙嗙獥浣滀负鏍瑰厓绱犮��
+      rootMargin: "0px", // 鎸囧畾鏍瑰厓绱犵殑杈圭晫锛岃繖閲岃涓� "0px"锛岃〃绀烘牴鍏冪礌鐨勮竟鐣屽拰瑙嗙獥鐨勮竟鐣岄噸鍚�
+      threshold: 0.5 // 鎸囧畾浜ゅ弶姣斾緥锛岃繖閲岃涓� 0.5锛岃〃绀哄綋鐩爣鍏冪礌涓�鍗婃垨鏇村鏄剧ず鍦ㄨ绐椾腑鏃惰Е鍙戝洖璋冨嚱鏁般��
+    });
+
+    // 鍚姩椤电爜瑙傚療
+    setTimeout(() => {
+      this.initObservation();
+    }, 500);
+
     // 娴嬭瘯椤甸潰璺宠浆
     // setTimeout(() => {
     //   this.gotoPage(5, 100);
@@ -111,6 +129,7 @@
     // }, 3000);
   },
   methods: {
+    // 婊氬姩鐩戝惉
     scrollFun(event) {
       // 鍒ゆ柇鍚戜笂婊氬姩杩樻槸鍚戜笅婊氬姩
       if (event.target.scrollTop > this.previousScrollTop) {
@@ -154,16 +173,8 @@
       // showCatalogList 褰撳墠鏄剧ず鐨勪笁涓珷鑺傦紝watch鐩戝惉浼犻�掔粰涓诲簲鐢�
       // 鏇存柊涓婁竴娆℃粴鍔ㄧ殑浣嶇疆
       this.previousScrollTop = event.target.scrollTop;
-
-      // 杩斿洖椤电爜鍜岀珷鑺備俊鎭�
-      // if (this.$store.state.qiankun && this.$store.state.qiankun.pageChange)
-      //   this.$store.state.qiankun.pageChange({
-      //     page: 100,
-      //     catalog: 5,
-      //     catalogId: "",
-      //     catalogName: ""
-      //   });
     },
+    // 绔犺妭銆侀〉闈㈣烦杞�
     gotoPage(catalog, page) {
       if (catalog >= 0 && catalog <= this.catalogLength) {
         // 澶勭悊娓叉煋绔犺妭
@@ -193,6 +204,7 @@
         console.log("绔犺妭閿欒锛�");
       }
     },
+    // 娓叉煋鏍囪
     renderSign(type, data) {
       const existence = (
         this.container ? this.container : document
@@ -228,6 +240,7 @@
         }
       }
     },
+    // 鍒犻櫎鏍囪娓叉煋
     delSign({ ids, type }) {
       if (ids && ids.length) {
         for (let i = 0; i < ids.length; i++) {
@@ -253,6 +266,44 @@
           );
         }
       }
+    },
+    initObservation() {
+      const sections = document.querySelectorAll(".page-box");
+      //observer 瑙傚療姣忎釜鍏冪礌锛屼互渚垮湪瀹冧滑杩涘叆鎴栫寮�瑙嗙獥鏃惰Е鍙戝洖璋冨嚱鏁般��
+      sections.forEach((section) => {
+        const isObserver = section.getAttribute("observer");
+        if (!isObserver) {
+          this.observer.observe(section);
+          section.setAttribute("observer", "1");
+        }
+      });
+    },
+    pageChangeCallback(entries, observer) {
+      //entries锛氫唬琛ㄨ瀵熷埌鐨勭洰鏍囧厓绱犵殑闆嗗悎銆� observer锛氫唬琛ㄨ瀵熻�呭璞°��
+      entries.forEach((entry) => {
+        //entry.isIntersecting锛氭鏌ュ綋鍓嶇洰鏍囧厓绱犳槸鍚︿笌鏍瑰厓绱犵浉浜ゃ��
+        if (entry.isIntersecting) {
+          const target = entry.target;
+          //entry.target锛氳幏鍙栧綋鍓嶇洰鏍囧厓绱�
+          const page = target.getAttribute("page");
+          const catalogDom = this.tool.getParentNodeByClassName(
+            target,
+            "chapter"
+          );
+          const catalog = catalogDom.getAttribute("num");
+          console.log("page", page, catalog);
+          // 杩斿洖椤电爜鍜岀珷鑺備俊鎭�
+          if (this.$store.state.qiankun && this.$store.state.qiankun.pageChange)
+            this.$store.state.qiankun.pageChange({
+              page: page,
+              catalog: catalog
+            });
+          // const sections = Array.from(document.querySelectorAll(".section"));
+          //sections锛氳幏鍙栨墍鏈夊叿鏈� .section 绫诲悕鐨勫厓绱狅紝骞惰浆鎹负鏁扮粍銆�
+          // let index = sections.findIndex((section) => section === target) + 1;
+          //index锛氭煡鎵惧綋鍓嶇洰鏍囧厓绱犲湪 sections 鏁扮粍涓殑绱㈠紩锛屽苟鍔� 1锛岀敤浜庣‘瀹氬綋鍓嶉〉鐮併��
+        }
+      });
     }
   },
   components: {
diff --git a/src/books/childHealth/view/index.vue b/src/books/childHealth/view/index.vue
index 0187f04..9a515d1 100644
--- a/src/books/childHealth/view/index.vue
+++ b/src/books/childHealth/view/index.vue
@@ -60,7 +60,6 @@
         }
       };
       this.MG.store.getProductDetail(query).then((res) => {
-        console.log("鍥句功淇℃伅", res.datas);
         this.$data.bookData = res.datas;
         this.$store.commit("setRootCmsItemId", res.datas.rootCmsItemId);
       });
@@ -102,15 +101,6 @@
               y: e.y
             });
           }
-          console.log("閫変腑鐨勬枃瀛�", {
-            chapterNum,
-            txt,
-            selection,
-            node,
-            page,
-            x: e.x,
-            y: e.y
-          });
         }
       } else {
         if (this.$store.state.qiankun.windowSelection) {
diff --git a/vue.config.js b/vue.config.js
index 32812c0..e848709 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -2,8 +2,8 @@
 // import {publicCtx} from '@/assets/js/config'
 const { defineConfig } = require("@vue/cli-service");
 module.exports = defineConfig({
-  publicPath: 'http://182.92.203.7:3007/books/book/1',
-  // publicPath:'/books/book/1',
+  // publicPath: 'http://182.92.203.7:3007/books/book/1',
+  publicPath:'/books/book/1',
   transpileDependencies: true,
   lintOnSave: false,
   // devServer: {

--
Gitblit v1.9.1