代码之家  ›  专栏  ›  技术社区  ›  pouya

如何将事件绑定到epub.js中的格式副本

  •  1
  • pouya  · 技术社区  · 7 年前

    epub.js passEvents 方法的格式副本对象,但也找不到有关该对象的任何帮助。这是我最后一次尝试:

    rendition.on("rendered", () => {
        const contents = rendition.getContents()
        contents.document.addEventListener('contextmenu', showContextMenu, false);
    });
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   trinaldi    7 年前

    根据你的要求,我希望我做对了,你想要一个 contextmenu 这本书本身的事件,对吗?

    rendition.on("rendered", (e,i) => {;
      i.document.documentElement.addEventListener('contextmenu', (cfiRange, contents) => {
          console.log('hey');
      })
    });
    

    这段代码只返回 hey (cfiRange, contents)

    无论如何,我创建了一个 fiddle.

    document 作为接收事件的元素,但在我的测试中,它获取了所有内容 这本书。

        2
  •  0
  •   Erwol    5 年前

    "epubjs": "^0.3.88 这是我在一个项目中使用的,我想在每个设备上完全禁用用户右键单击或用户长按。

    渲染格式副本时,我们会得到两个参数,其中一个是 iframe . 如果检查读取器,您会注意到epub文件正在iframe中呈现。这就是为什么将事件侦听器添加到应用程序的主文档中不起作用。

    在此之后,您将附加一个 contextmenu MouseEvent 你可以用它来取消 event.preventDefault(); . 然后,您可以访问event rect属性来呈现用户右键单击位置中的任何内容。例如,您可以使用 event.clientX event.clientY .

    rendition.on('rendered', (rendition: Rendition, iframe: Window) => {
        helpers.log('Rendition rendered');
        iframe.document.documentElement.addEventListener('contextmenu', (event: MouseEvent) => {
            helpers.log('Stopping contextual menu coming from epubjs iframe');
            event.preventDefault();
        });
    });
    

    希望这对任何与您合作的人都有帮助 epubjs 2021年。