<template>
|
|
<view class="yingbing-computed" :style="[computedStyle]">
|
|
<reader-header :text="chapter.title || ''" v-if="headerShowSync"></reader-header>
|
|
<web-view ref="webview" style="flex:1" src="/uni_modules/yingbing-ReadPage/hybrid/html/computed.html" @onPostMessage="onPostMessage"></web-view>
|
|
<reader-footer v-if="footerShowSync"></reader-footer>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import ReaderHeader from '../../header/header.vue'
|
|
import ReaderFooter from '../../footer/footer.vue'
|
|
export default {
|
|
inject: ['fontSize', 'fontFamily', 'lineHeight', 'topGap', 'bottomGap', 'slide', 'headerShow', 'footerShow', 'totalChapter'],
|
|
components: {
|
|
ReaderHeader,
|
|
ReaderFooter
|
|
},
|
|
computed: {
|
|
computedStyle () {
|
|
return {
|
|
'padding-top': this.topGap + 'px',
|
|
'padding-bottom': this.bottomGap + 'px',
|
|
'padding-left': this.slide + 'px',
|
|
'padding-right': this.slide + 'px'
|
|
}
|
|
}
|
|
},
|
|
data () {
|
|
return {
|
|
chapter: {},//章节内容临时存储
|
|
success: null,//成功回调
|
|
fail: null,//失败回调,
|
|
headerShowSync: false,//展示头部
|
|
footerShowSync: false//展示底部
|
|
}
|
|
},
|
|
beforeDestroy() {
|
|
this.$refs.webview && this.$refs.webview.evalJS("destroyHandleTimer()")
|
|
},
|
|
methods: {
|
|
start ({chapter, success, fail}) {
|
|
this.chapter = chapter
|
|
this.success = success
|
|
this.fail = fail
|
|
this.headerShowSync = typeof chapter.headerShow == 'boolean' ? chapter.headerShow : this.headerShow//判断是否显示头部
|
|
this.footerShowSync = typeof chapter.footerShow == 'boolean' ? chapter.footerShow : this.footerShow//判断是否显示底部
|
|
const style = {fontSize: this.fontSize, fontFamily: this.fontFamily, lineHeight: this.lineHeight, totalChapter: this.totalChapter}
|
|
this.$nextTick(function () {
|
|
setTimeout(() => {
|
|
this.$refs.webview && this.$refs.webview.evalJS("start(" + encodeURIComponent(JSON.stringify(chapter)) + ', ' + encodeURIComponent(JSON.stringify(style)) + ")")
|
|
}, 100)
|
|
})
|
|
},
|
|
onPostMessage (e) {
|
|
e.detail.data.forEach(item => {
|
|
if ( item.handleSuccess ) {
|
|
this.success && this.success(item.handleSuccess)
|
|
this.success = null
|
|
this.fail = null
|
|
this.chapter = {}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.yingbing-computed {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
transform: translateX(-1000px);
|
|
}
|
|
</style>
|