| | |
| | | shadow puppet show, traditional Chinese medicine, Peking Opera |
| | | scenery |
| | | </p> |
| | | <p class="center"><b>My Experience in Wonderland</b></p> |
| | | <p class="center"><b>My Experience in <span class="word-bc" @click="saveWord($event, 'Wonderland')">Wonderland</span> </b></p> |
| | | <p class="center"> |
| | | <audio :src="resource.readingOne" controls controlslist="noplaybackrate nodownload" class="audio"></audio> |
| | | </p> |
| | |
| | | 5.If |
| | | </p> |
| | | <!-- 提交按钮 --> |
| | | <div class="w100 fl"> |
| | | <ul class="fl ju-ar w100"> |
| | | <div class="w100 fl ju-cn"> |
| | | <ul class="fl ju-ev" style="width:80%"> |
| | | <li> |
| | | <button class="btn-border btn-w" @click="saveData"> |
| | | 提交 |
| | |
| | | |
| | | // 测试页面跳转 |
| | | setTimeout(() => { |
| | | this.gotoPage(2,16); |
| | | this.gotoPage(2,13); |
| | | // setTimeout(() => { |
| | | // this.renderSign("Highlight", { |
| | | // id: "2ACA9359", |
| | |
| | | .ju-bt { |
| | | justify-content: space-between; |
| | | } |
| | | .ju-cn { |
| | | justify-content: center; |
| | | } |
| | | .ju-end { |
| | | justify-content: flex-end; |
| | | } |
| | | .al-cn { |
| | | align-items: center; |
| | | } |
| | | .al-end { |
| | | align-items: end; |
| | | } |
| | | .wh-nr { |
| | | white-space: nowrap; |
| | | } |
| | |
| | | class="w100 mb-40" |
| | | /> |
| | | <div class="padding-96 fl ju-cn al-cn fl-cl"> |
| | | <p class="center share-img-box"> |
| | | <img :src="num >= 0 ? crane : rise" alt="" :style="{opacity:num >= 0 ? num / 10 : (-num) / 10 , width:num >= 0 ? '80%' : '70%'}"> |
| | | |
| | | <p class="center share-img-box fl ju-cn al-end"> |
| | | <img |
| | | :src="num >= 0 ? crane : rise" |
| | | alt="" |
| | | :style="{ |
| | | opacity: num >= 0 ? num / 10 : -num / 10, |
| | | width: num >= 0 ? '80%' : '70%', |
| | | }" |
| | | /> |
| | | </p> |
| | | <p class="img">“西塞山前白鹭飞”动作</p> |
| | | <p class="img">“西塞山前白鹭飞”动作</p> |
| | | </div> |
| | | <ul class="pb-box"> |
| | | <li class="ml-40"> |
| | |
| | | <div class="page-box" page="22"> |
| | | <div v-if="showPageList.indexOf(22) > -1"> |
| | | <div> |
| | | <img |
| | | src="../../assets/images/chapter-five-header.png" |
| | | class="w100" |
| | | /> |
| | | <img src="../../assets/images/chapter-five-header.png" class="w100" /> |
| | | </div> |
| | | <div class="padding-96"> |
| | | <h2 class="lefth2" id="b001"> |
| | |
| | | <ul class="fl fl-cl al-cn audio-box"> |
| | | <li class="fl al-cn"> |
| | | <span class="wh-nr auido-text mr-8">男童音</span> |
| | | <audio :src="auidoPathOne" controls controlslist="noplaybackrate nodownload" class="audio" ></audio> |
| | | <audio |
| | | :src="auidoPathOne" |
| | | controls |
| | | controlslist="noplaybackrate nodownload" |
| | | class="audio" |
| | | ></audio> |
| | | </li> |
| | | <li class="fl al-cn mt-20"> |
| | | <span class="wh-nr auido-text mr-8"> 女童音 </span> |
| | | <audio :src="auidoPathTwo" controls controlslist="noplaybackrate nodownload" class="audio" ></audio> |
| | | <audio |
| | | :src="auidoPathTwo" |
| | | controls |
| | | controlslist="noplaybackrate nodownload" |
| | | class="audio" |
| | | ></audio> |
| | | </li> |
| | | </ul> |
| | | <h3 id="c015">渔歌子</h3> |
| | |
| | | controls |
| | | controlslist="nodownload" |
| | | class="w100 video" |
| | | style="margin:38px 0" |
| | | style="margin: 38px 0" |
| | | ></video> |
| | | <h2 class="lefth2" id="b003"> |
| | | <img class="img-gn" alt="" src="../../assets/images/czysj.jpg" /> |
| | |
| | | auidoPathOne: "", |
| | | auidoPathTwo: "", |
| | | num: 0, |
| | | crane:require("../../assets/images/crane.png"), |
| | | rise:require("../../assets/images/rise.png") |
| | | crane: require("../../assets/images/crane.png"), |
| | | rise: require("../../assets/images/rise.png"), |
| | | }; |
| | | }, |
| | | unmounted() { |
| | |
| | | ); |
| | | }, |
| | | addNum() { |
| | | this.addTimer = setInterval(() => { |
| | | if(this.num < 10) { |
| | | this.num ++ |
| | | this.addTimer = setInterval(() => { |
| | | if (this.num < 10) { |
| | | this.num++; |
| | | } else { |
| | | clearInterval(this.addTimer) |
| | | this.cutNum() |
| | | clearInterval(this.addTimer); |
| | | this.cutNum(); |
| | | } |
| | | },200) |
| | | }, 200); |
| | | }, |
| | | cutNum() { |
| | | this.cutTimer = setInterval(() => { |
| | | if(this.num > -10) { |
| | | this.num -- |
| | | this.cutTimer = setInterval(() => { |
| | | if (this.num > -10) { |
| | | this.num--; |
| | | } else { |
| | | clearInterval(this.cutTimer) |
| | | this.addNum() |
| | | clearInterval(this.cutTimer); |
| | | this.addNum(); |
| | | } |
| | | },200) |
| | | }, 200); |
| | | }, |
| | | }, |
| | | }; |
| | |
| | | > |
| | | </chapterTwo> |
| | | <chapterThree |
| | | v-if="showCatalogList.indexOf(4) > -1" |
| | | v-if="showCatalogList.indexOf(4) > -1" |
| | | :showPageList="loadPageList" |
| | | ></chapterThree> |
| | | <chapterFour |
| | | v-if="showCatalogList.indexOf(5) > -1" |
| | | v-if="showCatalogList.indexOf(5) > -1" |
| | | :showPageList="loadPageList" |
| | | ></chapterFour> |
| | | <chapterFive |
| | | v-if="showCatalogList.indexOf(6) > -1" |
| | | v-if="showCatalogList.indexOf(6) > -1" |
| | | :showPageList="loadPageList" |
| | | ></chapterFive> |
| | | <chapterSix |
| | |
| | | import pageHeader from "./header.vue"; |
| | | import chapterOne from "./chapter001.vue"; |
| | | import chapterTwo from "./chapter002.vue"; |
| | | import chapterThree from "./chapter003.vue" |
| | | import chapterFour from './chapter004.vue' |
| | | import chapterFive from './chapter005.vue' |
| | | import chapterSix from './chapter006.vue' |
| | | import chapterThree from "./chapter003.vue"; |
| | | import chapterFour from "./chapter004.vue"; |
| | | import chapterFive from "./chapter005.vue"; |
| | | import chapterSix from "./chapter006.vue"; |
| | | import NoteIcon from "@/assets/images/biji.png"; |
| | | import miniAudio from "@/components/miniAudio/index.vue"; |
| | | import _ from "lodash"; |
| | |
| | | import Viewer from "viewerjs"; |
| | | import "viewerjs/dist/viewer.css"; |
| | | export default { |
| | | name:"pageContent", |
| | | name: "pageContent", |
| | | data() { |
| | | return { |
| | | catalogLength: 7, // 总章节数 |
| | |
| | | |
| | | // 测试页面跳转 |
| | | // setTimeout(() => { |
| | | // this.gotoPage(6, 30); |
| | | // setTimeout(() => { |
| | | // this.renderSign("Highlight", { |
| | | // id: "2ACA9359", |
| | | // txt: "题一学习主题一 运动", |
| | | // page: "10", |
| | | // type: "Highlight", |
| | | // color: "#F5E12A" |
| | | // }); |
| | | // setTimeout(() => { |
| | | // this.delSign({ |
| | | // ids: ["2ACA9359"] |
| | | // }); |
| | | // }, 2000); |
| | | // }, 500); |
| | | // this.gotoPage(6, 29); |
| | | // setTimeout(() => { |
| | | // this.renderSign("Highlight", { |
| | | // id: "2ACA9359", |
| | | // txt: "题一学习主题一 运动", |
| | | // page: "10", |
| | | // type: "Highlight", |
| | | // color: "#F5E12A" |
| | | // }); |
| | | // setTimeout(() => { |
| | | // this.delSign({ |
| | | // ids: ["2ACA9359"] |
| | | // }); |
| | | // }, 2000); |
| | | // }, 500); |
| | | |
| | | // const pageDom = (this.container ? this.container : document) |
| | | // .querySelector("#app") |
| | |
| | | scrollFun(event) { |
| | | // 判断向上滚动还是向下滚动 |
| | | if (event.target.scrollTop > this.previousScrollTop) { |
| | | this.getAduio() |
| | | this.getAduio(); |
| | | // 向下 |
| | | const currentScrollTop = |
| | | event.target.scrollTop + event.target.offsetHeight; |
| | |
| | | } |
| | | } |
| | | } else if (event.target.scrollTop < this.previousScrollTop) { |
| | | this.handleAudio() |
| | | this.handleAudio(); |
| | | // 向上 |
| | | const currentScrollTop = event.target.scrollTop; |
| | | if (currentScrollTop <= this.loadThreshold) { |
| | |
| | | this.container ? this.container : document |
| | | ).querySelector(`[page="${data.page}"]`); |
| | | // 创建 createTreeWalker 迭代器,用于遍历文本节点,保存到一个数组 |
| | | const treeWalker = document.createTreeWalker(pageDom, NodeFilter.SHOW_TEXT); |
| | | const treeWalker = document.createTreeWalker( |
| | | pageDom, |
| | | NodeFilter.SHOW_TEXT |
| | | ); |
| | | const allTextNodes = []; |
| | | let currentNode = treeWalker.nextNode(); |
| | | while (currentNode) { |
| | |
| | | // 高亮行 |
| | | setTimeout(() => { |
| | | // 获取页面所有text节点 |
| | | const pageTextList = document.createTreeWalker(target, NodeFilter.SHOW_TEXT); |
| | | const pageTextList = document.createTreeWalker( |
| | | target, |
| | | NodeFilter.SHOW_TEXT |
| | | ); |
| | | // 匹配关键字 |
| | | const allPageTextNodes = []; |
| | | let currentNode = pageTextList.nextNode(); |
| | |
| | | autoplay: { |
| | | //自动开始 |
| | | delay: 3000, //时间间隔 |
| | | disableOnInteraction: false //*手动操作轮播图后不会暂停* |
| | | disableOnInteraction: false, //*手动操作轮播图后不会暂停* |
| | | }, |
| | | paginationClickable: true, |
| | | slidesPerView: 1, // 一组三个 |
| | | spaceBetween: 30, // 间隔 |
| | | // 如果需要前进后退按钮 |
| | | navigation: { |
| | | nextEl: dom.querySelector( |
| | | ".swiper-button-next" |
| | | ), |
| | | prevEl: dom.querySelector( |
| | | ".swiper-button-prev" |
| | | ) |
| | | nextEl: dom.querySelector(".swiper-button-next"), |
| | | prevEl: dom.querySelector(".swiper-button-prev"), |
| | | }, |
| | | // 窗口变化,重新init,针对F11全屏和放大缩小,必须加 |
| | | // observer: true, |
| | |
| | | spaceBetween: 30, // 间隔 |
| | | // 如果需要前进后退按钮 |
| | | navigation: { |
| | | nextEl: dom.querySelector( |
| | | ".swiper-button-next" |
| | | ), |
| | | prevEl: dom.querySelector( |
| | | ".swiper-button-prev" |
| | | ) |
| | | nextEl: dom.querySelector(".swiper-button-next"), |
| | | prevEl: dom.querySelector(".swiper-button-prev"), |
| | | }, |
| | | // 窗口变化,重新init,针对F11全屏和放大缩小,必须加 |
| | | observer: true, |
| | |
| | | var paginationInfoEl = dom.querySelector(".pageBox"); |
| | | if (paginationInfoEl) |
| | | paginationInfoEl.textContent = currentPage + "/" + totalPages; |
| | | } |
| | | } |
| | | }, |
| | | }, |
| | | }); |
| | | } |
| | | }, |
| | |
| | | propsData: { |
| | | showPageList: [], |
| | | questionData: {}, |
| | | isSearch: true |
| | | isSearch: true, |
| | | }, |
| | | }); |
| | | pageExample.$mount( |
| | |
| | | propsData: { |
| | | showPageList: [pageNum], |
| | | questionData: {}, |
| | | isSearch: true |
| | | isSearch: true, |
| | | }, |
| | | }); |
| | | pageExample.$mount( |
| | |
| | | .querySelector(`[page="${pageNum}"]`); |
| | | if (thisPageDom) { |
| | | // 获取页面所有text节点 |
| | | const pageTextList = document.createTreeWalker(thisPageDom, NodeFilter.SHOW_TEXT); |
| | | const pageTextList = document.createTreeWalker( |
| | | thisPageDom, |
| | | NodeFilter.SHOW_TEXT |
| | | ); |
| | | // 匹配关键字 |
| | | const allPageTextNodes = []; |
| | | let currentNode = pageTextList.nextNode(); |
| | |
| | | // 跳转 |
| | | this.gotoPage(data.catalog, data.page, () => {}); |
| | | }, |
| | | // 页面向下滚动,音频小窗播放功能 |
| | | // 页面向下滚动,音频小窗播放功能 |
| | | getAduio() { |
| | | let allVideo = ( |
| | | this.container ? this.container : document |
| | |
| | | ).querySelectorAll(".audio"); |
| | | for (let index = 0; index < allAudio.length; index++) { |
| | | const item = allAudio[index]; |
| | | item.addEventListener('play',() => { |
| | | item.addEventListener("play", () => { |
| | | const audioList = Array.from(allAudio); |
| | | for (let cindex = 0; cindex < audioList.length; cindex++) { |
| | | for (let cindex = 0; cindex < audioList.length; cindex++) { |
| | | const citem = audioList[cindex]; |
| | | if(citem.currentSrc != item.src) { |
| | | citem.pause() |
| | | |
| | | if (citem.currentSrc != item.src) { |
| | | citem.pause(); |
| | | } |
| | | } |
| | | this.closeMiniAudio() |
| | | }) |
| | | this.closeMiniAudio(); |
| | | }); |
| | | } |
| | | }, |
| | | // 点击视频关闭其他 |
| | |
| | | ).querySelectorAll(".video"); |
| | | for (let index = 0; index < allVideo.length; index++) { |
| | | const item = allVideo[index]; |
| | | item.addEventListener('playing',(item) => { |
| | | const path = item.srcElement.src |
| | | item.addEventListener("playing", (item) => { |
| | | const path = item.srcElement.src; |
| | | const videoList = Array.from(allVideo); |
| | | for (let cindex = 0; cindex < videoList.length; cindex++) { |
| | | const citem = videoList[cindex]; |
| | | if(citem.currentSrc != path && path) { |
| | | citem.pause() |
| | | if (citem.currentSrc != path && path) { |
| | | citem.pause(); |
| | | } |
| | | } |
| | | }) |
| | | }); |
| | | } |
| | | } |
| | | }, |
| | | }, |
| | | components: { |
| | | pageHeader, |
| | |
| | | chapterFour, |
| | | chapterFive, |
| | | chapterSix, |
| | | miniAudio |
| | | miniAudio, |
| | | }, |
| | | }; |
| | | </script> |
| | |
| | | type: Array, |
| | | }, |
| | | }, |
| | | watch:{ |
| | | questionData:{ |
| | | handler(newVal) { |
| | | console.log('新值',newVal); |
| | | } |
| | | },deep:true,immediate:true |
| | | }, |
| | | data() { |
| | | return { |
| | | questionData: {}, |
| | | }; |
| | | }, |
| | | async mounted() {}, |
| | |
| | | |
| | | // 测试页面跳转 |
| | | // setTimeout(() => { |
| | | // this.gotoPage(8,233); |
| | | // this.gotoPage(11,282); |
| | | // setTimeout(() => { |
| | | // this.renderSign("Highlight", { |
| | | // id: "2ACA9359", |
| | |
| | | if (testData && testData[catalog]) { |
| | | if (testData[catalog][page]) { |
| | | if (Array.isArray(testData[catalog][page])) { |
| | | this.questionDataMap[page] = await getQuestionList( |
| | | const datas = await getQuestionList( |
| | | page, |
| | | testData[catalog][page], |
| | | this.config.activeBook |
| | | ); |
| | | this.$set(this.questionDataMap,page,datas) |
| | | } else { |
| | | const obj = {}; |
| | | for (let key in testData[catalog][page]) { |
| | |
| | | this.config.activeBook |
| | | ); |
| | | } |
| | | this.questionDataMap[page] = obj; |
| | | this.$set(this.questionDataMap,page,obj) |
| | | // this.questionDataMap[page] = obj; |
| | | } |
| | | } |
| | | } |
| | |
| | | <template> |
| | | <div class="drag-box" :style="{ borderColor: bcColor }"> |
| | | <div class="title-box"> |
| | | <p class="text" style="text-indent:2em !important"><span class="hs1">◇</span>{{ titileText }}</p> |
| | | <span class="svg-btn t0" @mouseenter="mouseenterTitle" @mouseleave="mouseleaveTitle"> |
| | | <p class="text" style="text-indent: 2em !important"> |
| | | <span class="hs1">◇</span>{{ titileText }} |
| | | </p> |
| | | <span |
| | | class="svg-btn t0" |
| | | @mouseenter="mouseenterTitle" |
| | | @mouseleave="mouseleaveTitle" |
| | | > |
| | | <p class="p-title" v-if="ishowTitle">请拖拽答案到括号里吧</p> |
| | | <svg |
| | | <svg |
| | | t="1719309984490" |
| | | class="icon" |
| | | viewBox="0 0 1024 1024" |
| | |
| | | p-id="6317" |
| | | ></path> |
| | | </svg> |
| | | |
| | | </span> |
| | | </div> |
| | | <div |
| | |
| | | spaceList: [], |
| | | submitState: false, |
| | | isLift: false, |
| | | ishowTitle:false |
| | | ishowTitle: false, |
| | | }; |
| | | }, |
| | | mounted() {}, |
| | |
| | | }, |
| | | // 鼠标移动 |
| | | mousemove(e) { |
| | | if (this.isLift) { |
| | | this.moveDom.style.position = ""; |
| | | this.moveDom.style.left = "0px"; |
| | | this.moveDom.style.top = "0px"; |
| | | } |
| | | if (!this.moveDom) return false; |
| | | this.moveDom.style.position = "absolute"; |
| | | // 限制在此题范围内拖动 |
| | |
| | | const moveY = e.y - this.parentY + 40; |
| | | this.moveDom.style.left = moveX + "px"; |
| | | this.moveDom.style.top = moveY + "px"; |
| | | this.moveDom.style.zIndex = "99999999"; |
| | | // 如果还有有空格 |
| | | if (this.spaceList.length) { |
| | | for (let index = 0; index < this.spaceList.length; index++) { |
| | |
| | | return flag; |
| | | }, |
| | | mouseenterTitle() { |
| | | this.ishowTitle = true |
| | | console.log(this.ishowTitle ); |
| | | this.ishowTitle = true; |
| | | console.log(this.ishowTitle); |
| | | }, |
| | | mouseleaveTitle() { |
| | | this.ishowTitle = false |
| | | console.log(this.ishowTitle ); |
| | | } |
| | | this.ishowTitle = false; |
| | | console.log(this.ishowTitle); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | |
| | | text-indent: 0 !important; |
| | | position: absolute; |
| | | top: -33px; |
| | | background-color:#8fae34 ; |
| | | background-color: #8fae34; |
| | | padding: 0 4px; |
| | | white-space: nowrap; |
| | | border-radius: 4px; |
| | |
| | | margin-bottom: 20px; |
| | | p { |
| | | margin: 0; |
| | | text-indent: 2em ; |
| | | text-indent: 2em; |
| | | } |
| | | } |
| | | /** 解析 */ |
| | |
| | | watch: { |
| | | cardList: { |
| | | handler(newVal) { |
| | | // console.log('新值',newVal); |
| | | this.cardData = this.cardList; |
| | | if (newVal && newVal.length) { |
| | | this.loading = false; |