创建插件 4.0.0

我们为插件提供一个轻量级的规范和 API。此规范和 API 已被我们的默认插件(比如 代码高亮Markdown)使用,也可以用来创建你自己的插件。

插件定义

插件是包含以下属性的对象。

属性
id 字符串插件的唯一标识符。通过 Reveal.getPlugin(<id>) 可使用该标识符检索插件实例。
init 函数一个可选函数,在应该运行插件时调用。它用一个参数调用:对已注册插件的 演示实例 的引用。

init 函数选择性地返回 Promise。如果返回 Promise,那么在演示文稿完成初始化并触发 ready 事件 之前,reveal.js 将等待它分辨。
destroy 函数一个可选的函数,当此插件注册到的 reveal.js 实例未初始化时,该函数被调用。

这里有一个示例插件在按下 T 键时对演示文稿中的所有幻灯片进行洗牌。请注意,我们导出一个函数,该函数返回一个新的插件对象。之所以这样做,是因为同一个页面上可能有多个演示文稿实例,并且每个演示文稿实例应拥有我们插件的自己实例。

// toaster.js
export default () => ({
  id: 'toaster',
  init: (deck) => {
    deck.addKeyBinding({ keyCode: 84, key: 'T' }, () => {
      deck.shuffle();
      console.log('🍻');
    });
  },
});

注册插件

将插件注册在 配置选项plugins 数组中。您还可以使用 Reveal.registerPlugin( Plugin ) 在运行时注册插件。

import Reveal from 'dist/reveal.esm.js';
import Toaster from 'toaster.js';

Reveal.initialize({
  plugins: [Toaster],
});

异步插件

如果您的插件在 reveal.js 完成初始化之前需要运行异步代码,它可以返回一个 Promise。这里有一个示例插件,它将初始化延迟三秒。

let WaitForIt = {
  id: 'wait-for-it',
  init: (deck) => {
    return new Promise((resolve) => setTimeout(resolve, 3000));
  },
};

Reveal.initialize({ plugins: [WaitForIt] }).then(() => {
  console.log('Three seconds later...');
});