epub是最流行的电子书规范之一,网络上对于Java Web有不少合适的方法来解析和呈现,但是关于epub.js的介绍比较少(尽管github上已经2K星了),更多的是概念性的内容,如:

  1. epub.js是支持跨多个设备的,在浏览器端渲染EPUB文件的JavaScript库,提供通用的电子书功能界面(如渲染、持久和分页)不需要开发专用的应用程序或插件。

具体用法因人而异,在此我介绍结合React使用的案例:

epub.js中间件封装了解析epub文件的过程,ePubReader以控制器方式封装了页面动作响应。

以下是epub.js的官方文档:

https://github.com/futurepress/epub.js/blob/master/documentation/README.md

2017.11.22更新:

如果使用ePubReader解析图书,还想应用epub.js的API,需要以这种形式:

var reader = ePubReader("./book/"+newsid);//获得解析图书的实例
reader.book.on("book:ready",function(){alert('1')});//拿到book变量,然后就能使用epub.js的API了

原因是在ePubReader的源码中:

ePubReader解析并没有像epub.js一样返回一个book对象,而是返回了reader对象,这个reader对象在上图蓝色标记处创建了自己的book对象,这个book对象又来自epub.js的Book对象,所以reader.book就是epub.js中的book了,拿到book以后其他用法和epub.js都一样了。


方法:

ePub(bookPath, options)

创建EPUB图书实例:

bookPath可选参数,指定epub文件路径,可以是网络资源,也可以是本地资源。

  1. var Book = ePub("url/to/book/"); // With default options
  2. var Book = ePub({ restore: true });
  3. Book.open("url/to/book/"); // Books can be opened later

Options可选参数,配置解析参数

  1. {
  2. bookPath : null,
  3. version: , // Changing will cause stored Book information to be reloaded
  4. restore: false, // Skips parsing epub contents, loading from localstorage instead
  5. storage: false, // true (auto) or false (none) | override: 'ram', 'websqldatabase', 'indexeddb', 'filesystem'
  6. spreads: true, // Displays two columns
  7. fixedLayout : false, //-- Will turn off pagination
  8. styles : {}, // Styles to be applied to epub
  9. width : false, //width和height可以设置图书内容的宽和高,默认值是不设置,此时会填满父窗口。
  10. height: false,
  11. }

解析图书的更多方法:

Book.open(bookPath) 打开指定路径的图书,和构造函数的作用类似,只是将配置和解析的过程分开

  1. var Book = ePub({ restore: true });
  2. Book.open("url/to/book/"); // Books can be opened later

也可以带扩展名:

  1. Book.open("url/to/book.epub");

Book.renderTo(element) 将解析好的图书追加到某个HTML结点并渲染,此时epub图书内容在HTML中呈现。(使用的是iframe标签)

  1. var Book = ePub("url/to/book/", { restore: true });
  2.  
  3. var $el = document.getElementById("div-id");
  4. Book.renderTo($el);

参数也可以是字符串表示:

  1. var Book = ePub("url/to/book/");
  2. Book.renderTo("div-id");

Book.nextPage()

Book.prevPage()

在阅读页面中的翻页控制函数,添加到按钮事件函数:

  1. <div onclick="Book.prevPage();"></div>
  2. <div onclick="Book.nextPage();"></div>

必须在渲染之后,才会响应翻页。

Book.displayChapter(chap, end)   显示指定章节:

加载指定的章节到页面上,加载的是这一章的第一页:

  1. Book.displayChapter('/6/4[chap01ref]!/4[body01]/10');

第二个参数设置为true,将加载这一章的最后一页:

  1. Book.displayChapter(3, true);

Book.goto(url)跳转到指定章节:

加载指定的章节(需要有pageMap)

  1. var skip = Book.goto("chapter_001.xhtml");
  2. skip.then(function(){
  3. console.log("On Chapter 1");
  4. })

通常用来显示一些带有指定章节链接的表格

Book.setStyle(style, val, prefixed)设置图书内容的样式:

  1. Book.setStyle("font-size", "1.2em");

Book.removeStyle(style)移除设置的样式。

Book.destroy()删除iframe和事件函数。

Promises

Book.getMetadata()在回调函数中获取meta数据:

  1. Book.getMetadata().then(function(meta){
  2. document.title = meta.bookTitle+" – "+meta.creator;
  3. });

返回一个对象:

  1. {
  2. "bookTitle": "The title of the book",
  3. "creator": "Book Author",
  4. "description": "The description/synopsis of the book",
  5. "pubdate": "",
  6. "publisher": "The Publisher",
  7. "identifier": "The ISBN",
  8. "language": "en-US",
  9. "rights": "Copyright text",
  10. "modified_date": "",
  11. "layout": "",
  12. "orientation": "",
  13. "spread": "",
  14. "direction": null
  15. }

Book.getToc()在回调函数中获取toc,是一个包含目录结构的数组对象。

  1. Book.getToc().then(function(toc){
  2. console.log(toc);
  3. });

Book.generatePagination()进行分页,可选参数为页面大小:

  1. book.generatePagination().then(function(toc){
  2. console.log("Pagination generated");
  3. });
  4. book.generatePagination(pageWidth, pageHeight).then(function(toc){
  5. console.log("Pagination generated");
  6. });

响应的事件:

book:ready

book:stored

book:online

book:offline

book:linkClicked

  1. book.on('book:linkClicked', function(href) {
  2. console.log(href);
  3. });

book:pageChanged

  1. {
  2. anchorPage:
  3. percentage: 0.5
  4. pageRange: [, , ]
  5. }
  1. book.on('book:pageChanged', function(location){
  2. console.log(location.anchorPage, location.pageRange)
  3. });

renderer:resized

renderer:chapterDisplayed

renderer:chapterUnloaded

renderer:locationChanged

  1. book.on('renderer:locationChanged', function(locationCfi){
  2. console.log(locationCfi)
  3. });

renderer:visibleRangeChanged

 

【epub.js|翻译|原创】开源中间件epub.js的使用及其中文文档的更多相关文章

  1. App.js实现使用js开发app的应用,此文是中文文档

    在阅读前,在此说明下,本人英文一直不好,所以该文档是借助翻译工具翻译的,阅读起来可能有点不好,请各位谅解,哪位大神有标准的中文文档请分享下 Github下载地址:https://github.com/ ...

  2. js插件---videojs中文文档详解

    js插件---videojs中文文档详解 一.总结 一句话总结: js插件网上都有很多参考资料,使用起来也非常简单 二.lavarel中使用实例 <video id="example_ ...

  3. Chart.js中文文档-雷达图

    雷达图或蛛网图(Radar chart) 简介 A radar chart is a way of showing multiple data points and the variation bet ...

  4. Sails.js中文文档

    Sails.js中文文档   http://sailsdoc.swift.ren/ Sails.js是一个Web框架,可以于轻松构建自定义,企业级Node.js Apps.它在设计上类似于像Ruby ...

  5. Web3.js API 中文文档

    Web3.js API 中文文档 http://web3.tryblockchain.org/Web3.js-api-refrence.html web3对象提供了所有方法. 示例: //初始化过程 ...

  6. 以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明

    以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明 为了让你的Ðapp运行上以太坊,一种选择是使用web3.js library提供的web3.对象.底层实 ...

  7. Handlebars.js 中文文档

    Home  »  前端   »   Handlebars.js 中文文档 Handlebars.js 中文文档 Posted in 前端 By KeenWon On 2014年4月3日 Views:  ...

  8. sharp.js中文文档

    高性能node.js图像处理库,使用libvips库来实现. 英文地址:sharp.pixelplumbing.com/ 中文文档地址:yunlzhang.github.io/sharp-docum…

  9. Sails.js中文文档,Sails中文文档

    Sails.js中文文档   http://sailsdoc.swift.ren/ Sails.js是一个Web框架,可以于轻松构建自定义,企业级Node.js Apps.它在设计上类似于像Ruby ...

  10. ORCHARD中文文档(翻译)

    众所周知,Orchard是.net领域最好的开源CMS之一,他使用了微软最先进的技术,有一群先进理念的支持者,但是,所有的事情在国内总得加个但是,Orchard也不例外,中文资料相对比较少,官网提供的 ...

随机推荐

  1. Struts2运行流程-源码剖析

    本文为原创,如需转载,请标明出处:http://www.cnblogs.com/gudu1/p/7726172.html 首先说一下查看这些框架源码的感受,每一次深入探究 Spring.Struts ...

  2. Centos7安装Python3的方法

    由于centos7原本就安装了Python2,而且这个Python2不能被删除,因为有很多系统命令,比如yum都要用到. [root@VM_105_217_centos Python-]# pytho ...

  3. Python 3 使用venv创建虚拟环境

    Python 3.3以上使用venv来代替了原来Python2使用的virtualenv创建虚拟环境. 虚拟环境的作用是使得不同项目的Python包之间不会相互干扰,避免了由此产生的各种问题. 现在演 ...

  4. 深入理解Java虚拟机--下

    深入理解Java虚拟机--下 参考:https://www.zybuluo.com/jewes/note/57352 第10章 早期(编译期)优化 10.1 概述 Java语言的"编译期&q ...

  5. bootstrap select多选

    1.页面效果 <div class="form-group"> <div class="col-md-2 control-label"> ...

  6. Java基础笔记14

    1.反射. Class:反射类 任何一个类都有一个Class反射类.(影子) java.lang.reflect.*; Field:字段类 Method:方法类类 Constructor:构造方法类. ...

  7. 读书笔记-你不知道的JS上-this

    关于this 与静态词法作用域不用,this的指向动态绑定,在函数执行期间才能确定.感觉有点像C++的多态? var a = 1; var obj = { a: 2, fn: function() { ...

  8. 一行python的强大功能

    能够把自身代码打印出来的程序,叫做Quine. 下面是python的一行quine: _='_=%r;print _%%_';print _%_ 有人说有分号不算一行,无分号版: print(lamb ...

  9. 谈谈今年很火的区块链 CDN

    2017 年初,区块链被越来越多的人知道.区块链的概念其实很早就被提出来,曾经有人说过"区块链技术被认为是继蒸汽机.电力.互联网之后,下一代颠覆性的核心技术. 如果说蒸汽机释放了人们的生产力 ...

  10. Einbahnstrasse

    Einbahnstrasse Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...