|                                                                                                                               |  | export default {	computed: {		currentProgress () {			return this.pages[this.current]?.progress || 0		},		currentTitle () {			return this.pages[this.current]?.title || this.title		},		currentTotal () {			return this.pages[this.current]?.total || 0		},		currentPage () {			return this.pages[this.current]?.current || 0		}	},	methods: {		//渲染页面
		scrollRender ({chapter, current, start = 0}) {			if ( chapter ) {//如果传入章节内容
				const index = this.chapters.findIndex(c => c.index == chapter.index)//是否已经包含相同章节
				if (index > -1) this.chapters[index] = chapter//如果包含则更新
				else this.chapters.push(chapter)//否则添加新章节
			}			current = parseInt(current || 0)//强制转换类型为int
			start = parseInt(start)//强制转换类型为int
			this.pages = [{index: current, type: 'loading'}]//显示loading
			this.current = 0//重置current
			const cgs = this.chapters.filter(c => c.index == current || c.index == current - 1 || c.index == current + 1)//筛选出符合条件的三个章节内容
			let index = 0, arr = []			const computedId = this.getComputedId()			this.computeds.push(computedId)			const computedIndex = this.computeds.indexOf(computedId)			this.$nextTick(function () {				setTimeout(() => {					const handle = () => {						this.$refs.computed[computedIndex] && this.$refs.computed[computedIndex].start({							chapter: cgs[index],							success: pages => {								arr = arr.concat(pages)								if ( index < cgs.length - 1 ) {									index++									this.$nextTick(function () { handle() })								} else {									this.computeds.splice(computedIndex, 1)									this.pages = this.handlePages(arr)									const pageIndex = this.pages.findIndex(p => start >= p.start && start < p.end && p.index == current )//定位章节
									if ( pageIndex == -1 ) this.current = this.pages.findIndex(p => start >= p.end && p.index == current )//定位章节
									else this.current = pageIndex									this.$nextTick(function () {										this.$refs.scroll.resetRefresh()										this.$refs.scroll.scrollToIndex(this.current)										this.handleChange({current: this.current, detail: this.pages[this.current] })										this.$nextTick(function () {											this.autoplaySync = this.autoplay										})									})								}							}						})					}					handle()				}, 100)			})		},		//翻页改变事件
		async handleScroll (e) {			const scrollTop = e.detail.scrollTop			const scrollHeight = e.detail.scrollHeight			if ( !this.scrolling ) {				try{					this.scrolling = true					const rate = Math.floor(scrollTop / this.contentHeight)					let maybe = this.pages[rate] ? rate : this.pages.length-1					let top = -1					while ( top < 0 && maybe < this.pages.length - 1 ) {						const itemRect = await this.$refs.scroll.getItemRect(maybe)						top = itemRect.top						top < 0 ? maybe++ : null					}					const current = top >= 0 ? maybe : this.pages.length - 1					if ( current != this.current ) {						this.handleChange({current: current, detail: this.pages[current]})						this.$refs.footer && this.$refs.footer.refresh()					}					this.scrolling = false				}catch(e){					this.scrolling = false				}			}		},		//渲染下一章节
		handleScrollLoadRender (status, chapter, callback, isPrev) {			if ( status == 'success' ) {//获取内容成功
				const nowIndex = isPrev ? this.pages[0].index : this.pages[this.pages.length-1].index				const chapterIndex = this.chapters.findIndex(c => c.index == chapter.index)//是否已经包含相同章节
				if (chapterIndex > -1) this.chapters[chapterIndex] = chapter//如果包含则更新
				else this.chapters.push(chapter)//否则添加新章节
				const computedId = this.getComputedId()				this.computeds.push(computedId)				const computedIndex = this.computeds.indexOf(computedId)				this.$nextTick(function () {					setTimeout(() => {						this.$refs.computed[computedIndex] && this.$refs.computed[computedIndex].start({							chapter: chapter,							success: p => {								this.computeds.splice(computedIndex, 1)								callback && callback( (chapter.isStart || chapter.isEnd) ? 'end' : status)//关闭加载动画
								const pages = isPrev ? p.concat(this.pages) : this.pages.concat(p)//添加新计算的章节内容
								this.pages = pages//渲染章节内容
								if ( isPrev ) {//如果是加载上一章节需要重新定位
									this.$nextTick(function () {										this.current = pages.findIndex(page => page.index == nowIndex)//定位页面
										this.$refs.scroll.scrollToIndex(this.current)//刷新翻页组件
									})								}								this.chapterLoading = false//关闭章节加载等待
							}						})					}, 100)				})			} else {				this.chapterLoading = false//关闭章节加载等待
				callback && callback(status)//关闭加载动画
			}		}	}}
 |