this.book.ready.then(()=>{ this.navigation=this.book.navigation console.log(this.navigation) return this.book.locations.generate()

来源:3-12 目录功能实现

qq_梦紫菱_0

2018-08-30 09:29

this.book.ready.then(()=>{

this.navigation=this.book.navigation

console.log(this.navigation)

return this.book.locations.generate()

这个book.ready是epub.js的方法 主要作用是初始化吗?  还有generate()是什么方法?出处是哪里呐?

写回答 关注

1回答

  • Sam
    2018-08-30 11:37:24

    你好,这个问题涉及epubjs的实现原理

    • book.ready的用途:

    this.book.ready返回的是一个Promise对象,他的作用是让我们可以在Book对象初始化完毕后实现我们自己的逻辑,this.book.ready对应的源码如下:

    this.ready = Promise.all([
     this.loaded.manifest,
     this.loaded.spine,
     this.loaded.metadata,
     this.loaded.cover,
     this.loaded.navigation,
     this.loaded.resources
    ]);

    可以看到ready的定义是当manifest、spine、metadata、cover、navigation、resources这些资源都加载完毕后才会执行。


    • Locations.generate()方法的用途:

    generate()是Locations对象的一个方法,Locations对象的主要作用是实现电子书的定位,Locations对象在Book对象中进行实例化,实例化的源码如下:

    this.locations = new Locations(this.spine, this.load.bind(this));

    所以我们需要通过this.book.locations来引用Locations对象,generate()方法的用途是生成分页,其主要用途是根据指定字数进行分页,如果不指定参数时,默认会按照200个字符进行分页,generate()会返回一个Promise对象,你可以打印一下返回结果就知道生成的内容了。

    this.book.ready.then(() => {
      return this.book.locations.generate(500)
    }).then(location => {
      console.log(location)
    })


    Sam 回复qq_梦紫菱...

    epubjs的官方文档只提供了API,要了解原理要看源码,如果只关注实用,可以看官方提供的案例

    2018-08-30 15:25:57

    共 2 条回复 >

快速入门Web阅读器开发

带你了解电子书阅读器的工作原理,通过Vue.js快速实现Web阅读器

26396 学习 · 214 问题

查看课程

相似问题