居然可以用 js 写 PPT

用powerpoint或者keynote写演示文稿,对于代码、数学公式等的支持一直是个痛点。而且对于前端同学来说,一身的css功力用不上也是个痛点。对于使用markdown来写文档的同学来说,将文档转成ppt需要重新排版也是件重复性的工作量。

于是我们需要一个基于web技术的ppt框架,reveal.js在这个领域成名已久了,而且上个月还有发布新版本,维护得还蛮好,第一步我们就选它了。

将reveal.js运行起来

首先clone一份reveal.js最新的代码:

git clone https://github.com/hakimel/reveal.js

我们照抄一份index.html,比如叫做study.html:

<!doctype html>
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"><title>reveal.js</title><link rel="stylesheet" href="dist/reset.css"><link rel="stylesheet" href="dist/reveal.css"><link rel="stylesheet" href="dist/theme/black.css"><!-- Theme used for syntax highlighted code --><link rel="stylesheet" href="plugin/highlight/monokai.css"></head><body><div class="reveal"><div class="slides"><p>Slide 1</p><p>Slide 2</p></div></div><script src="dist/reveal.js"></script><script src="plugin/notes/notes.js"></script><script src="plugin/markdown/markdown.js"></script><script src="plugin/highlight/highlight.js"></script><script>// More info about initialization & config:// - https://revealjs.com/initialization/// - https://revealjs.com/config/Reveal.initialize({hash: true,// Learn about plugins: https://revealjs.com/plugins/plugins: [ RevealMarkdown, RevealHighlight, RevealNotes ]});</script></body>
</html>

在reveal.js目录下运行npm install, 然后运行npm start就可以启动一个server来查看上面的ppt网页。默认使用8000端口,如果被占用了可以通过指定port参数换一个,比如我们换成30800吧:

npm start -- --port=30800

然后通过访问浏览器的127.0.0.1:30800/study.html就可以看到我们的ppt啦:

reveal.js step by step

上面这个网页其实挺容易懂的,不用react或vue框架,也不需要配置webpack。其核心内容部分其实非常简单,就是每一页演示文稿对应一个p。

  <div class="reveal"><div class="slides"><p>Slide 1</p><p>Slide 2</p></div></div>

支持markdown

reveal.js的第一个强大功能是直接可以使用markdown来写演示文稿。在我们上面默认的html模板中已经加载了RevealMarkdown插件。所以我们要做的就是在下面的模板上写markdown就好。

<p data-markdown><textarea data-markdown>                     </textarea>
</p>

我们来看个例子:

<p data-markdown><textarea data-markdown>
推荐系统的主要算法包括:
- 矩阵分解
- 线性模型
- 树模型
- 深度学习模型                        </textarea>
</p>

生成的幻灯片如下:

换个主题

如果觉得黑底白字的太丑了,我们可以换个主题。

主题就是个css,在这条语句里引用:

<link rel="stylesheet" href="dist/theme/black.css">

换成dist/theme/下面其它的css主题,或者干脆自己撸一个。

比如改成:

<link rel="stylesheet" href="dist/theme/beige.css">

效果变成这样:

支持数学公式

支持数学公式的js库和插件默认并没有包含在默认模板中,我们需要将其增加进来。

我们先把数学公式库的js引进来:

<script src="plugin/math/math.js"></script>

然后在初始化时Reveal.initialize增加对于数学公式的配置,并且引入cdn上的mathjax库:

 Reveal.initialize({hash: true,math: {mathjax:"https://cdn.jsdelivr.net/gh/mathjax/mathjax@2.7.8/MathJax.js",config: "TeX-AMS_HTML-full",// pass other options into `MathJax.Hub.Config()`TeX: { Macros: { RR: "{\\bf R}" } },},

最后,在plugins中增加RevealMath插件:

        plugins: [RevealMarkdown, RevealHighlight, RevealNotes, RevealMath],      });

完整的代码如下:

<script src="plugin/math/math.js"></script>
<script>Reveal.initialize({hash: true,math: {mathjax:"https://cdn.jsdelivr.net/gh/mathjax/mathjax@2.7.8/MathJax.js",config: "TeX-AMS_HTML-full",// pass other options into `MathJax.Hub.Config()`TeX: { Macros: { RR: "{\\bf R}" } },},plugins: [RevealMarkdown, RevealHighlight, RevealNotes, RevealMath],});
</script>

插件引入之后我们就可以在幻灯片中写公式了。

可以直接在p中写:

<p>\[\begin{aligned}\ MAE(X,h)=\frac{1}{m} \sum_{i=1}^m|h(x^i)-y^{(i)}| \\end{aligned} \]
</p>

也可以嵌入到markdown中:

 <p data-markdown><textarea data-markdown>$MAE(X,h)=\frac{1}{m} \sum_{i=1}^m|h(x^i)-y^{(i)}|$                      </textarea>
</p>

出来的效果是这样的:

代码高亮

代码高亮默认是支持的,我们可以在markdown里面用```来使用:

显示出来的效果如下:

md-code

也可以直接使用html的pre和code标签来显示:

<p><pre><code class="language-javascript">model.compile({optimizer: tf.train.sgd(0.000001),loss: 'meanSquaredError'});return model.fitDataset(flattenedDataset, {epochs: 10,callbacks: {onEpochEnd: async (epoch, logs) => {console.log(epoch + ':' + logs.loss);}}});</code></pre>
</p>

显示的效果如下:

代码高亮的theme也是可以更换的,只要更换plugin/highlight下面的css即可,例:

<link rel="stylesheet" href="plugin/highlight/zenburn.css" />

我们顺便把reveal.js的theme也换一下:

<link rel="stylesheet" href="dist/theme/moon.css" />

效果变成下面这样:

我们汇总下上面的代码:

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><metaname="viewport"content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/><title>reveal.js学习</title><link rel="stylesheet" href="dist/reset.css" /><link rel="stylesheet" href="dist/reveal.css" /><link rel="stylesheet" href="dist/theme/moon.css" /><!-- Theme used for syntax highlighted code --><link rel="stylesheet" href="plugin/highlight/monokai.css" /></head><body><div class="reveal"><div class="slides"><p>Slide 1</p><p>\[\begin{aligned}\ MAE(X,h)=\frac{1}{m} \sum_{i=1}^m|h(x^i)-y^{(i)}| \\end{aligned} \]</p><p data-markdown><textarea data-markdown>
推荐系统的主要算法包括:
- 矩阵分解
- 线性模型
- 树模型
- 深度学习模型                        </textarea></p><p data-markdown><textarea data-markdown>$MAE(X,h)=\frac{1}{m} \sum_{i=1}^m|h(x^i)-y^{(i)}|$                      </textarea></p><p><pre><code class="language-javascript">model.compile({optimizer: tf.train.sgd(0.000001),loss: 'meanSquaredError'});return model.fitDataset(flattenedDataset, {epochs: 10,callbacks: {onEpochEnd: async (epoch, logs) => {console.log(epoch + ':' + logs.loss);}}});</code></pre></p></div></div><script src="dist/reveal.js"></script><script src="plugin/notes/notes.js"></script><script src="plugin/markdown/markdown.js"></script><script src="plugin/highlight/highlight.js"></script><script src="plugin/math/math.js"></script><script>// More info about initialization & config:// - https://revealjs.com/initialization/// - https://revealjs.com/config/Reveal.initialize({hash: true,math: {mathjax:"https://cdn.jsdelivr.net/gh/mathjax/mathjax@2.7.8/MathJax.js",config: "TeX-AMS_HTML-full",// pass other options into `MathJax.Hub.Config()`TeX: { Macros: { RR: "{\\bf R}" } },},// Learn about plugins: https://revealjs.com/plugins/plugins: [RevealMarkdown, RevealHighlight, RevealNotes, RevealMath],});</script></body>
</html>

背景图片

p支持data-background-image属性来指定背景图片。

例:

        <p data-background-image="https://cdn.jsdelivr.net/www.jsdelivr.com/000a3f2b6a7baa6ae0f786a251fd105e4b230d8e/img/landing/network-map@2x.png">        </p>

HTML and CSS

比起markdown,HTML和CSS也是写演示文稿的好手段,可控的方法更多。而且也可以跟reveal.js的功能有更好的结合。

在p中,可以像在普通网页中一样写HTML标签:

<p><h3 style="{color: #ffec3d;}">推荐系统的冷启动</h3><ul><li>利用热门数据</li><li>利用用户注册信息</li><li>利用第三方数据</li><li>利用物品内容属性</li></ul>
</p>

我们也可以在header中写style属性给p中使用。

比如默认字体太大了,我们可以给调一调:

<style>ul {font-size: 18px;}
</style>

淡入淡出

结合html标签,可以指定淡入淡出的效果。这可以通过给标签添加class属性为fragment实现。

我们来看个淡入的例子:

<p><h3>推荐系统的冷启动</h3><ul><li class="fragment">利用热门数据</li><li class="fragment">利用用户注册信息</li><li class="fragment">利用第三方数据</li><li class="fragment">利用物品内容属性</li></ul>
</p>

除了淡入之外,我们还可以对某项进行标红:

  <p><h3>推荐系统的冷启动</h3><ul><li class="fragment highlight-red">利用热门数据</li><li>利用用户注册信息</li><li>利用第三方数据</li><li>利用物品内容属性</li></ul></p>

效果如下:

导出为pdf

演示文稿做好之后,除了在浏览器中看,我们也可以导出成为pdf格式。方法是在URI之后增加"?print-pdf"后缀,比如:http://0.0.0.0:30800/study.html?print-pdf

然后我们再用另存为pdf格式功能来保存下来就好。

更进一步

除了上面介绍的基本特性之外,reveal.js支持自动播放、自制插件、支持处理事件等等有利于开发人员写slides的特性。相信能给你的slides带来新的好玩的东西,将汇报与分享变成乐趣。Enjoy it!

内推社群

我组建了一个氛围特别好的腾讯内推社群,如果你对加入腾讯感兴趣的话(后续有计划也可以),我们可以一起进行面试相关的答疑、聊聊面试的故事、并且在你准备好的时候随时帮你内推。下方加 winty 好友回复「面试」即可。

居然可以用 js 写 PPT?相关推荐

  1. .NET获取不到js写的cookie解决方法

    今晚使用javascript设置一个来路的cookie,之后使用ASP.NET获取这个cookie值,发现ASP.NET获取不到JS设置的cookie值,真郁闷中,以下是JS写Cookie的代码: C ...

  2. float right不生效_【工具篇】程序员不愿意写 PPT 是姿势不对?

    | 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it ...

  3. 网站建设 之 用js写wasm

    为什么要这么做?编译js比解释js更快是必然的 wasm是什么? 我期望是一个二进制文件 WebAssembly(又名wasm)是一种高效的,低级别的编程语言. 它让我们能够使用JavaScript以 ...

  4. 如何让 JS 写得更漂亮

    网上有不少关于JS编写优化建议,这里我根据自己的经验提出一些比较有用的意见. 01按强类型风格写代码 JS是弱类型的,但是写代码的时候不能太随意,写得太随意也体现了编码风格不好.下面分点说明: (1) ...

  5. 使用reveal.js写演示文稿

    使用reveal.js写演示文稿 用powerpoint或者keynote写演示文稿,对于代码.数学公式等的支持一直是个痛点.而且对于前端同学来说,一身的css功力用不上也是个痛点.对于使用markd ...

  6. dotnet调用node.js写的socket服务(websocket/socket/socket.io)

    https://github.com/jstott/socketio4net/tree/develop socket.io服务端node.js,.里面有js写的客户端:http://socket.io ...

  7. 用Three.js写h5小游戏-3d飞机大战

    用Three.js写h5小游戏-飞机大战 博主的话 运行图片 目录路径![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829103702978.jpg?x- ...

  8. 【Part2】用JS写一个Blog (node + vue + mongoDB)

    [Part1]用JS写一个Blog (node + vue + mongoDB) 上一节前后端项目分别初始化完成,这一小节我就从后端项目开始写.实现mongoDB数据库的连接. 整理后端目录 下面是通 ...

  9. 如何上传图片到fileupload空间_如何用原生js写图片上传组件v2.0(还有新版本)?...

    js图片上传组件: 基本要求: 1.上传的图片可预览,可删除,可被覆盖更新 2.要求图片格式为jpg和png,大小不能超过2M 新加需求: 1.模拟回显,可用本地存储(实际上的回显是通过后台传过来的u ...

最新文章

  1. mongodb基础应用
  2. c# ifram 刷新父页面
  3. GNS3关联SecureCRT的配置。
  4. ASP.NET Core快速入门(第3章:依赖注入)--学习笔记
  5. 计算机整个文稿应用回顾主题,《计算机应用基础》精品课程电子教案-PowerPoint 2003...
  6. java与java ee_Java EE6装饰器:在注入时装饰类
  7. 地理空间数据Geometry在MySQL中使用(一)
  8. 简单python脚本实例-你用 Python 写过哪些有趣的脚本?
  9. 用spss进行数据的标准化处理_如何用SPSS对数据进行标准化处理
  10. android5.0 输入法提取,搜狗手机输入法5.0 Android新版使用体验
  11. 把你的桌面变成vista
  12. PCQQ - 发送自定义的XML卡片消息
  13. discuz 风格模板制作
  14. (SSM,JQUERY-EASYUI,MYSQL)快递物流系统
  15. SpringBoot掌握的差不多了,就剩下一个Actuator没搞定了,本文详细来介绍!!!
  16. 道路交通事故现场计算机制图,GA 49-2014_道路交通事故现场图绘制.pdf 文档全文预览...
  17. windowns下VS缺少头文件“unistd.h“的解决方案
  18. java 写 xml 文件 工具类_XML读写工具类
  19. 检验电子邮件地址是否真实存在
  20. Jasper 中文字体

热门文章

  1. 不同麻辣烫的做法是什么?怎样做麻辣烫比较好吃
  2. ae制h5文字动画_如何使用HTML5+css3实现粒子效果文字动画特效(附完整代码)
  3. 瑞星杀毒助手 for win 2000/xp升级到0.1.0020版
  4. 开发中遇到的小问题记录
  5. 新东方邮箱服务器地址,iphone5怎样设置新东方邮箱
  6. js前端数组常用方法
  7. java第二天的总结 爱Zn
  8. Python爬虫:爬取京东商品简介
  9. plt 关闭所有图片fig
  10. 我的世界服务器银行系统,MC多功能银行系统 我的世界命令方块教程 | 我的世界 | MC世界侠...