在显示的EPUB3电子书中嵌入Javascript,使iBooks翻页(在回流模式下)

在显示的EPUB3电子书中嵌入Javascript,使iBooks翻页(在回流模式下),javascript,ibooks,smil,epub3,Javascript,Ibooks,Smil,Epub3,我开发了一个库(我将很快在BSD/MIT许可下发布),用于模拟苹果iBooks中可回流EPUB3电子书的媒体覆盖支持(也称为“朗读”或“SMIL”)。(我提醒您,iBooks仅在FXL布局模式下支持MO,与Readium或Azardi不同。) 当当前活动的SMIL片段离开当前页面并转到下一页时,我想让iBooks“翻页”。为此,我需要: 1) 意识到活动片段已超出当前页面,并且 2) 强制翻页 第一点可以通过计算SMIL元素偏移量(繁琐地)实现;我被困在表演中 在Apple的ibooks.js中

我开发了一个库(我将很快在BSD/MIT许可下发布),用于模拟苹果iBooks中可回流EPUB3电子书的媒体覆盖支持(也称为“朗读”或“SMIL”)。(我提醒您,iBooks仅在FXL布局模式下支持MO,与Readium或Azardi不同。)

当当前活动的SMIL片段离开当前页面并转到下一页时,我想让iBooks“翻页”。为此,我需要:

1) 意识到活动片段已超出当前页面,并且 2) 强制翻页

第一点可以通过计算SMIL元素偏移量(繁琐地)实现;我被困在表演中

在Apple的ibooks.js中没有任何帮助,而TouchEvent似乎也不起作用,因为它们是向活动文档报告的,而不是向“主机WebKit”报告的

如何让iBooks在当前显示的EPUB3可回流电子书加载的JS中翻页


编辑:在这个问题之后,我在这里发布了前面提到的JS:

如果您正在讨论下一个XHTML文档,那么只需这样做就足够了

location.href="nextpage.xhtml";
如果要在同一个XHTML文档中移动,那么最好是使用ID元素标识该页面中的位置,然后跳转到该位置:

location.href="#id";

我不知道如何简单地执行/模拟翻页。

我要求的是第二个翻页,您建议的方法非常有效!(我有点惭愧,因为我没有考虑它……尽管我根本不是JS专家!)识别着陆元素不是问题,因为每个SMIL片段都有自己的id,JS知道所有这些。我接受这个答案,并感谢你发布它!不幸的是,每次重置location.href时,iBooks都会产生(IMHO,讨厌的)页面翻转效果。否则,它将是我问题的完美解决方案,甚至可以避免计算页面是否应该实际“更改”。此外,设置location.href会中断Readium分页。因此,我在默认情况下关闭了“自动翻转页面”选项的情况下发布了我的JS。您需要做的是确定所讨论的锚是否已经在当前页面上,并且仅在不在当前页面上时才执行
location.href
。你想比较一下
elt.getBoundingClientRect.top
document.documentElement.scrollTop
,以及底部、左侧和右侧。后续:从torazaburo的建议开始,在Frank Chen的帮助下,我成功地在我的JS库中实现了翻页功能。请转到以检查代码。它专门为iBooks启用,因为设置location.href会中断Readium分页。感谢所有贡献了想法和代码的人。