我想让一些 javascript 代码修改作为媒体覆盖(smil 驱动)的一部分正在播放的元素的某些属性。我特别对文本媒体覆盖感兴趣,它会在播放某些音频时突出显示。我的问题有两个:
- 有没有办法查明媒体叠加是否“事件”?最好有一些回调功能,否则我可以创建一个计时器并不断检查 js 的状态。
- 一旦我知道(如果可能)有一个元素被突出显示,有没有办法知道这个元素是哪个 SMIL ID?
最佳答案
EPUB 3 规范允许嵌入 EPUB 容器内的 JavaScript 内容仅通过 epubReadingSystem
对象与阅读应用程序“通信”。
不幸的是,该规范仅要求公开基本字段,例如阅读系统的名称和版本,并探测其脚本功能(hasFeature
)。请参阅:http://www.idpf.org/epub/301/spec/epub-contentdocs.html#app-epubReadingSystem
特别是,没有 IDPF 指定的方法来获取暴露给 EPUB 中嵌入的 JS 的媒体覆盖的状态(未开始/播放/暂停,哪个片段处于事件状态等)。
当然,理论上,人们可能会找到针对特定阅读系统的“黑客”(特别是如果它依赖 JS 来实现 GUI,例如 Readium 或 iBooks),并且能够将这些信息路由到 JS 代码EPUB 内(并由阅读系统呈现)。但当然,这种方法很脆弱——正如您从我之前对我自己的 rb_smil_emulator.js
的观察中知道的那样。
另一种可能性是只监视 DOM,跟踪应用于所有 SMIL 片段的类的更改,但这种技术可能在计时性能/准确性方面存在问题。
关于javascript - 让 javascript 了解 epub3 电子书中何时播放媒体叠加层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29527115/