|
|
- <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>
|