|
export default {
|
|
methods: {
|
|
//判断是否显示头部
|
|
getFlipHeaderShow (item) {
|
|
return ['text', 'slot'].includes(item.type) ? typeof item.headerShow == 'boolean' ? item.headerShow : this.headerShow : false
|
|
},
|
|
//判断是否显示底部
|
|
getFlipFooterShow (item) {
|
|
return ['text', 'slot'].includes(item.type) ? typeof item.footerShow == 'boolean' ? item.footerShow : this.footerShow : false
|
|
},
|
|
//渲染页面
|
|
flipRender ({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
|
|
this.$refs.flip.refresh()
|
|
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.flip.refresh()
|
|
this.handleChange({current: this.current, detail: this.pages[this.current] })
|
|
this.autoplaySync = this.autoplay
|
|
})
|
|
}
|
|
}
|
|
})
|
|
}
|
|
handle()
|
|
}, 100)
|
|
})
|
|
},
|
|
//渲染下一章节
|
|
handleFlipLoadRender (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)
|
|
const pages = isPrev ? p.concat(this.pages) : this.pages.concat(p)//添加新计算的章节内容
|
|
this.pages = pages//渲染章节内容
|
|
if ( isPrev ) {//如果是加载上一章节需要重新定位
|
|
this.current = pages.findIndex(page => page.index == nowIndex)//定位页面
|
|
this.$refs.flip.refresh()//刷新翻页组件
|
|
}
|
|
this.chapterLoading = false//关闭章节加载等待
|
|
callback && callback(status)//关闭加载动画
|
|
this.handleChange({current: this.current, detail: this.pages[this.current]})//触发change事件
|
|
}
|
|
})
|
|
}, 100)
|
|
})
|
|
} else {
|
|
this.chapterLoading = false//关闭章节加载等待
|
|
callback && callback(status)//关闭加载动画
|
|
}
|
|
}
|
|
}
|
|
}
|