🎨 webppt
一个基于 h5 + css3 + JavaScript 的开源在线演示文稿(幻灯片)框架,可以帮助用户使用web浏览器搭建一个漂亮的网页版PPT。
在线体验地址:https://qinyongcheng.github.io/webppt/
🚀 使用
一、HTML中使用
(一)安装
1.通过cdn安装(推荐)
<link rel="stylesheet" type="text/css" href="https://unpkg.com/webppt@1.0.11/dist/style.css" />
<script src="https://unpkg.com/webppt@1.0.11/dist/index.min.js"></script>
2.直接下载安装
js下载">
(二)编写PPT
(1)最简单PPT
<style>
body {background-color: aliceblue;}
.page {color: #333;background-color: lightpink;}
</style>
<div class="webppt-wrap">
<div class="page">第1页</div>
<div class="page">第2页</div>
<div class="page">第3页</div>
</div>
<script>
Webppt.start()
</script>
(2)PPT页子幻灯片
每一页PPT下可以加多张子幻灯片。
<style>
body {background-color: aliceblue;}
.page {color: #333;background-color: lightpink;}
</style>
<div class="webppt-wrap">
<div class="page">
<div class="slide"><p>第1页第1张</p></div>
<div class="slide"><p>第1页第2张</p></div>
</div>
<div class="page">第2页</div>
<div class="page">第3页</div>
</div>
<script>
Webppt.start()
</script>
(3)设置PPT转场动画
默认PPT转场为随机动画,可通过幻灯片的data-animation属性设置转场动画。 注意:如果页下面有多个子幻灯片时,第1个子幻灯片动画设置无效,其使用当前页设置的动画效果,如果当前页未设置动画属性,则默认随机动画
<style>
body {background-color: aliceblue;}
.page {color: #333;background-color: lightpink;}
.slide{background-color: coral;}
</style>
<div class="webppt-wrap">
<div class="page" data-animation="1">
<div class="slide"><p>第1页第1张,转场效果在父标签的data-animation属性设置</p></div>
<div class="slide" data-animation="66"><p>第1页第2张,转场效果在本class="slide"标签的data-animation属性设置</p></div>
<div class="slide" data-animation="67"><p>第1页第3张</p></div>
</div>
<div class="page">第2页</div>
<div class="page">第3页</div>
</div>
<script>
Webppt.start()
</script>
内置转场动画如下表(动画样式类由out出场和in入场样式类组成):
动画名称 | 动画值 | 动画样式类 |
---|---|---|
向左推移 | 1 | outClass: 'pt-page-moveToLeft',inClass: 'pt-page-moveFromRight' |
向右推移 | 2 | outClass: 'pt-page-moveToRight',inClass: 'pt-page-moveFromLeft' |
向上推移 | 3 | outClass: 'pt-page-moveToTop',inClass: 'pt-page-moveFromBottom' |
向下推移 | 4 | outClass: 'pt-page-moveToBottom',inClass: 'pt-page-moveFromTop' |
向左谈出 | 5 | outClass: 'pt-page-fade',inClass: 'pt-page-moveFromRight pt-page-ontop' |
向右淡出 | 6 | outClass: 'pt-page-fade',inClass: 'pt-page-moveFromLeft pt-page-ontop' |
向上淡出 | 7 | outClass: 'pt-page-fade',inClass: 'pt-page-moveFromBottom pt-page-ontop' |
向下淡出 | 8 | outClass: 'pt-page-fade',inClass: 'pt-page-moveFromTop pt-page-ontop' |
左推移淡出 | 9 | outClass: 'pt-page-moveToLeftFade',inClass: 'pt-page-moveFromRightFade' |
右推移淡出 | 10 | outClass: 'pt-page-moveToRightFade',inClass: 'pt-page-moveFromLeftFade' |
上推移淡出 | 11 | outClass: 'pt-page-moveToTopFade',inClass: 'pt-page-moveFromBottomFade' |
下推移淡出 | 12 | outClass: 'pt-page-moveToBottomFade',inClass: 'pt-page-moveFromTopFade' |
向左缓动 | 13 | outClass: 'pt-page-moveToLeftEasing pt-page-ontop',inClass: 'pt-page-moveFromRight' |
向右缓动 | 14 | outClass: 'pt-page-moveToRightEasing pt-page-ontop',inClass: 'pt-page-moveFromLeft' |
向上缓动 | 15 | outClass: 'pt-page-moveToTopEasing pt-page-ontop',inClass: 'pt-page-moveFromBottom' |
向下缓动 | 16 | outClass: 'pt-page-moveToBottomEasing pt-page-ontop',inClass: 'pt-page-moveFromTop' |
左移缩小消失 | 17 | outClass: 'pt-page-scaleDown',inClass: 'pt-page-moveFromRight pt-page-ontop' |
右移缩小消失 | 18 | outClass: 'pt-page-scaleDown',inClass: 'pt-page-moveFromLeft pt-page-ontop' |
上移缩小消失 | 19 | outClass: 'pt-page-scaleDown',inClass: 'pt-page-moveFromBottom pt-page-ontop' |
下移缩小消失 | 20 | outClass: 'pt-page-scaleDown',inClass: 'pt-page-moveFromTop pt-page-ontop' |
缩小出放大进1 | 21 | outClass: 'pt-page-scaleDown',inClass: 'pt-page-scaleUpDown pt-page-delay300' |
缩小出放大进2 | 22 | outClass: 'pt-page-scaleDownUp',inClass: 'pt-page-scaleUp pt-page-delay300' |
左移出放大进 | 23 | outClass: 'pt-page-moveToLeft pt-page-ontop',inClass: 'pt-page-scaleUp' |
右移出放大进 | 24 | outClass: 'pt-page-moveToRight pt-page-ontop',inClass: 'pt-page-scaleUp' |
上移出放大进 | 25 | outClass: 'pt-page-moveToTop pt-page-ontop',inClass: 'pt-page-scaleUp' |
下移出放大进 | 26 | outClass: 'pt-page-moveToBottom pt-page-ontop',inClass: 'pt-page-scaleUp' |
中心缩小出放大进 | 27 | outClass: 'pt-page-scaleDownCenter',inClass: 'pt-page-scaleUpCenter pt-page-delay400' |
右旋出左移进 | 28 | outClass: 'pt-page-rotateRightSideFirst',inClass: 'pt-page-moveFromRight pt-page-delay200 pt-page-ontop' |
左旋出右移进 | 29 | outClass: 'pt-page-rotateLeftSideFirst',inClass: 'pt-page-moveFromLeft pt-page-delay200 pt-page-ontop' |
上旋出下移进 | 30 | outClass: 'pt-page-rotateTopSideFirst',inClass: 'pt-page-moveFromTop pt-page-delay200 pt-page-ontop' |
下旋出上移进 | 31 | outClass: 'pt-page-rotateBottomSideFirst',inClass: 'pt-page-moveFromBottom pt-page-delay200 pt-page-ontop' |
右翻转出左翻转进 | 32 | outClass: 'pt-page-flipOutRight',inClass: 'pt-page-flipInLeft pt-page-delay500' |
左翻转出右翻转进 | 33 | outClass: 'pt-page-flipOutLeft',inClass: 'pt-page-flipInRight pt-page-delay500' |
上翻转出下翻转进 | 34 | outClass: 'pt-page-flipOutTop',inClass: 'pt-page-flipInBottom pt-page-delay500' |
下翻转出上翻转进 | 35 | outClass: 'pt-page-flipOutBottom',inClass: 'pt-page-flipInTop pt-page-delay500' |
右上角跌落 | 36 | outClass: 'pt-page-rotateFall pt-page-ontop',inClass: 'pt-page-scaleUp' |
新闻快报 | 37 | outClass: 'pt-page-rotateOutNewspaper',inClass: 'pt-page-rotateInNewspaper pt-page-delay500' |
左推 | 38 | outClass: 'pt-page-rotatePushLeft',inClass: 'pt-page-moveFromRight' |
右推 | 39 | outClass: 'pt-page-rotatePushRight',inClass: 'pt-page-moveFromLeft' |
上推 | 40 | outClass: 'pt-page-rotatePushTop',inClass: 'pt-page-moveFromBottom' |
下推 | 41 | outClass: 'pt-page-rotatePushBottom',inClass: 'pt-page-moveFromTop' |
左推右拉 | 42 | outClass: 'pt-page-rotatePushLeft',inClass: 'pt-page-rotatePullRight pt-page-delay180' |
右推左拉 | 43 | outClass: 'pt-page-rotatePushRight',inClass: 'pt-page-rotatePullLeft pt-page-delay180' |
上推下拉 | 44 | outClass: 'pt-page-rotatePushTop',inClass: 'pt-page-rotatePullBottom pt-page-delay180' |
下推上拉 | 45 | outClass: 'pt-page-rotatePushBottom',inClass: 'pt-page-rotatePullTop pt-page-delay180' |
向左折叠 | 46 | outClass: 'pt-page-rotateFoldLeft',inClass: 'pt-page-moveFromRightFade' |
向右折叠 | 47 | outClass: 'pt-page-rotateFoldRight',inClass: 'pt-page-moveFromLeftFade' |
向上折叠 | 48 | outClass: 'pt-page-rotateFoldTop',inClass: 'pt-page-moveFromBottomFade' |
向下折叠 | 49 | outClass: 'pt-page-rotateFoldBottom',inClass: 'pt-page-moveFromTopFade' |
左反折叠 | 50 | outClass: 'pt-page-moveToRightFade',inClass: 'pt-page-rotateUnfoldLeft' |
右反折叠 | 51 | outClass: 'pt-page-moveToLeftFade',inClass: 'pt-page-rotateUnfoldRight' |
上反折叠 | 52 | outClass: 'pt-page-moveToBottomFade',inClass: 'pt-page-rotateUnfoldTop' |
下反折叠 | 53 | outClass: 'pt-page-moveToTopFade',inClass: 'pt-page-rotateUnfoldBottom' |
向左缩小 | 54 | outClass: 'pt-page-rotateRoomLeftOut pt-page-ontop',inClass: 'pt-page-rotateRoomLeftIn' |
向右缩小 | 55 | outClass: 'pt-page-rotateRoomRightOut pt-page-ontop',inClass: 'pt-page-rotateRoomRightIn' |
向上缩小 | 56 | outClass: 'pt-page-rotateRoomTopOut pt-page-ontop',inClass: 'pt-page-rotateRoomTopIn' |
向下缩小 | 57 | outClass: 'pt-page-rotateRoomBottomOut pt-page-ontop',inClass: 'pt-page-rotateRoomBottomIn' |
左旋转立方体 | 58 | outClass: 'pt-page-rotateCubeLeftOut pt-page-ontop',inClass: 'pt-page-rotateCubeLeftIn' |
右旋转立方体 | 59 | outClass: 'pt-page-rotateCubeRightOut pt-page-ontop',inClass: 'pt-page-rotateCubeRightIn' |
上旋转立方体 | 60 | outClass: 'pt-page-rotateCubeTopOut pt-page-ontop',inClass: 'pt-page-rotateCubeTopIn' |
下旋转立方体 | 61 | outClass: 'pt-page-rotateCubeBottomOut pt-page-ontop',inClass: 'pt-page-rotateCubeBottomIn' |
左旋转木马 | 62 | outClass: 'pt-page-rotateCarouselLeftOut pt-page-ontop',inClass: 'pt-page-rotateCarouselLeftIn' |
右旋转木马 | 63 | outClass: 'pt-page-rotateCarouselRightOut pt-page-ontop',inClass: 'pt-page-rotateCarouselRightIn' |
上旋转木马 | 64 | outClass: 'pt-page-rotateCarouselTopOut pt-page-ontop',inClass: 'pt-page-rotateCarouselTopIn' |
下旋转木马 | 65 | outClass: 'pt-page-rotateCarouselBottomOut pt-page-ontop',inClass: 'pt-page-rotateCarouselBottomIn' |
侧面 | 66 | outClass: 'pt-page-rotateSidesOut',inClass: 'pt-page-rotateSidesIn pt-page-delay500' |
滑动 | 67 | outClass: 'pt-page-rotateSlideOut',inClass: 'pt-page-rotateSlideIn' |
(4)设置页面元素动画
<div class="webppt-wrap">
<div class="page" data-animation="1">
<div class="slide"><p class="page-center pt-page-rotateCubeLeftIn pt-page-delay500">第1页第1张,设置p标签动画效果</p></div>
...
</div>
...
</div>
<script>
Webppt.start()
</script>
给p标签添加动画效果,其中.page-center表示设置元素水平垂直居中对齐。注意:
1、元素动画效果可以是转场动画样式类,如pt-page-rotateCubeLeftIn。转场样式类参考【(3)设置PPT转场动画】
2、webppt引用了Animate.css样式类库,因此可以使用Animate.css样式类库的所有动画效果,用法参照Animate.css样式库,但需要 在class类添加.pt-page-delay500(pt-page-delay700等)类
3、pt-page-delay100、pt-page-delay180、pt-page-delay200、pt-page-delay300、pt-page-delay400、pt-page-delay500 pt-page-delay700、pt-page-delay1000表示动画延迟时间,单位为毫秒
/*给p标签添加Animate.css动画类,需要在后面添加pt-page-delay500样式类*/
<div class="webppt-wrap">
<div class="page" data-animation="1">
.....
<div class="slide" data-animation="66">
<p class="page-center animate__animated animate__rubberBand pt-page-delay500">第1页第2张</p>
</div>
....
</div>
</div>
(5)PPT添加翻页指示箭头
通过在.webppt-wrap容器下添加div.img-up等标签设置向左向右向上箭头
<div class="webppt-wrap">
<div class="page" data-animation="1">
.....
</div>
<div class="css_icon img-up pt-page-moveIconUp"></div>
<div class="css_icon img-left pt-page-moveIconLeft"></div>
<div class="css_icon img-right pt-page-moveIconRight"></div>
</div>
(6)设置全屏按钮
通过在.webppt-wrap容器下添加div.screenfull-menu标签设置全屏按钮
/*给p标签添加Animate.css动画类,需要在后面添加pt-page-delay500样式类*/
<div class="webppt-wrap">
<div class="page" data-animation="1">
.....
</div>
<div class="screenfull-menu">全屏</div>
</div>
(7)设置右键菜单
在body下面添加如下代码:
<div class="md-modal md-effect-4">
<div class="md-body">
<h3 class="md-title">
<span>操作选项</span>
<button class="btn md-close">关闭</button>
</h3>
<div class="md-content">
<ul>
<li>上一页</li>
<li>下一页</li>
<li>结束放映</li>
</ul>
</div>
<div class="md-footer"></div>
</div>
</div>
<script>
Webppt.start().contextmenu();//设置上下文
</script>
二、vue项目中使用
1.npm安装(推荐)
npm install webppt
//导入
import webppt from 'webppt';
import 'webppt/dist/style.css'
三、参考说明
1、class="webppt-wrap" 为顶级容器,包括所有的页面。具有的属性:
data-options,设置属性,为json格式的字符串,里面包括属性有:
loop:是否翻页循环。布尔类型
indexAnimate:首页是否支持转场动画。布尔类型
loadingAnimate:打开时是否显示加载动画。
pageIndicator:是否添加页面指示器 。布尔类型
upIcon:是否添加向上箭头。布尔类型
preload:设置是否自动预加载图片,默认自动预加载。自动预加载是页面一打开就自动预加载。布尔类型
preLoadPages:预加载图片的页数。数字类型
pageIndicatorColor:指示器颜色值。字符串数组类型。如['#99FF33','#CC0033','#99FFCC','#999933','#9966CC','#9999FF']
2、class=page,为幻灯片页面:
在class="webppt-wrap"标签下添加page页面,每个页面用类.page标识,如class="page page-1"。page序号用类名称表示, 序号从1递增,如page-2、page-3,每个页面必须有类标识。其中page-1序号自动生成。page具有的属性:
- data-animation属性:指定当前页面应用的动画类型,数字。
3、class=slide,为幻灯片页下的子幻灯片。
幻灯片页面,每个页面下可以有多个幻灯片页面。在class="page"标签下添加slide子幻灯片,每个子幻灯片用类.slide标识, 如class="slide page-1-1"。幻灯片序号用类名称表示,序号从1递增,如page-1-1、page-1-2、page-2-1等。 表示第几页下的第几个幻灯片,其中page-1-1序号自动生成。具有的属性:
- 属性data-animation:指定当前页面应用的动画类型,数字。
4、class="img-up" ,翻页指示箭头。位置放在class="webppt-wrap"元素下。
5、页面图片预加载。预加载的图片只能放在.page标签下或子孙标签下。
- img标签图片预加载,将真实的图片路径放在img标签的data-src属性里。如:。
- html标签的背景图片预加载,将真实的图片路径放在html标签的data-src属性里,并给html标签添加.preload-bg类名称。 如:
<div class='preload-bg' data-src='img/css_sprite01.png'></div>。
6、右键菜单功能:在页面单击右键,弹出动画效果选择菜单。
四、预定义css样式类
- .show:显示;.hide:隐藏;
- .page-center:页面居中(水平居中垂直居中);.center:水平居中;.vertical:垂直居中;
- .rotate360:360度不停旋转
- .page .slide-indicator li:更改页面幻灯片背景颜色。.page .slide-indicator li.on:更改幻灯片当前活动背景颜色
- 可以应用animate.css库里面的动画效果类样式。
💻 贡献代码
首先感谢关注本项目的朋友,非常欢迎每一位对本项目感兴趣的朋友贡献代码。
具体参考如下:
- fork 源码,下载到本地并运行项目
- 添加/修改代码
- 对相关改动进行全面的自我测试(这非常重要)
- 确认无误后提交修改到 Github
- 提交 Pull Request
另外需要注意的是:
- 每一次 Pull Request 都不应该提交过多的代码,且务必说明本次改动的具体目的,例如:修复了某个 bug、优化了某个方法 等,方便进行 Code Review;
- 对于 bug 的修复,应该将本次 Pull Request 和相对应 bug 的 issue 关联起来,让别人知道该问题已经被修复;
- 对于较大的新功能,你需要先提交 Issues,例如 “添加 XXX 功能”,确认该功能有被添加的必要后,再开始工作;
- 对于一些主观的样式、交互逻辑调整:如颜色、图标的使用,某些预设配置的增减修改等,一般不予通过。但可以在 Issues 中进行讨论;
- 其他如简单的代码优化、文档修正等,只要修改合理都会被接受。
在此感谢每一位贡献者。