今天我和大家分享一个非常酷的网页PPT工具,NODEPPT
一开始看到这个库的时候,我就喜欢上了。因为他效果非常的棒,而且能够非常好的和hexo结合。这样我们能够一次生成,到哪都可以演示PPT,还能配上相应的技术文档,是不是很酷啊!
项目的演示网址在这:https://nodeppt.js.org/#slide=1
主要说明了这个库包含什么样的功能
官网地址:https://github.com/ksky521/nodeppt
以下是我使用官网的demo制作的一个PPT,注意它是嵌入在我这个网页中的,以下网页你可以左右滑动。
https://dianwoshishi.github.io/nodeppt/slides.html
如果你觉得这个功能很酷,想要添加到你的站点里面去,那么就和我一起往下走吧。
前提,确保你的noteppt能够正常使用。这是前提,至于怎么熟练的玩好nodeppt,额…… 还是去官网吧,这里不误导人了。
整体的思路是,两步走:
输入nodeppt build --help
Usage: nodeppt build [options] [entry]
build html file
Options:
-m, --map Release sourcemap
-d, --dest <dir> output directory
-h, --help output usage information
Examples:
nodeppt build slide.md
我们需要使用的就是这个-d参数。目的是将生成的文件放入网站的public目录下
存放源文件的目录结构如下所示
root/public
├──nodeppt
root/source
├── slideshare
│ ├── another.md
│ ├── build.sh
│ ├── buildlist.txt
│ ├── makefile
│ └── slides.md
slides.md
another.md%
在slideshare目录下运行本文件,作用是使用nodeppt按上面文件内容的顺序构建,输出目录为public/nodeppt
NODEPPT=/usr/local/Cellar/node/17.5.0/bin/nodeppt
Destination=../../public/nodeppt/
build_files=$(cat buildlist.txt | xargs)
for file in $build_files
do
# echo $file
$NODEPPT build ./$file -d $Destination
done
all:
bash build.sh
至此,你使用在当前目录make就能将生成好的PPT网页放入public目录的noteppt目录中。
在上一步中,我们生成了ppt文件,放在了public/nodeppt/中,假设文件名为slides.html
那么我们可以在hexo的post中简单的使用如下命令,就可以引用我们的PPT
<iframe src="../nodeppt/slides.html" width="100%" height="500" name="topFrame" scrolling="yes" noresize="noresize" frameborder="0" id="topFrame"></iframe>
需要修改的部分就是iframe中的src部分。
最后放下一个一键上线部署的脚本
all:
make nodeppt
hexo g
hexo d
nodeppt:
$(MAKE) -C source/slideshare/
test:
make nodeppt
hexo g
hexo s
deploy:
make nodeppt
hexo g
hexo d
试试看左右滑动
https://dianwoshishi.github.io/nodeppt/use-nodeppt-in-hexo-demo.html
https://hasaik.com/posts/495d0b23.html
使用Hexo-Neat成功https://github.com/rozbo/hexo-neat
Hexo静态资源压缩https://www.jianshu.com/p/5e48e532ae58
https://rye-catcher.github.io/2019/10/21/Nodeppt-%E5%85%A5%E5%9D%91%E6%8C%87%E5%8D%97/
给博客文章嵌入 PPT 演示https://hexo.fluid-dev.com/posts/hexo-nodeppt/
https://www.jianshu.com/p/524b073f9b37
https://dianwoshishi.github.io/post/NODEPPT%E8%BF%99%E5%8F%AF%E8%83%BD%E6%98%AF%E8%BF%84%E4%BB%8A%E4%B8%BA%E6%AD%A2%E6%9C%80%E5%A5%BD%E7%9A%84%E7%BD%91%E9%A1%B5%E7%89%88%E6%BC%94%E7%A4%BA%E5%BA%93?dianwoshishi.github.io/post/NODEPPT%E8%BF%99%E5%8F%AF%E8%83%BD%E6%98%AF%E8%BF%84%E4%B
文主要内容
transition的中文含义是过渡。过渡是CSS3中具有颠覆性的一个特征,可以实现元素不同状态间的平滑过渡(补间动画),经常用来制作动画效果。
transition 包括以下属性:
上面的四个属性也可以写成综合属性:
transition: 让哪些属性进行过度 过渡的持续时间 运动曲线 延迟时间; transition: all 3s linear 0s;
其中,transition-property这个属性是尤其需要注意的,不同的属性值有不同的现象。我们来示范一下。
如果设置 transition-property: width,意思是只让盒子的宽度在变化时进行过渡。效果如下:
如果设置 transition-property: all,意思是让盒子的所有属性(包括宽度、背景色等)在变化时都进行过渡。效果如下
案例:小米商品详情
效果如下:
转换是 CSS3 中具有颠覆性的一个特征,可以实现元素的位移、旋转、变形、缩放,甚至支持矩阵方式。
转换再配合过渡和动画,可以取代大量早期只能靠 Flash 才可以实现的效果。
在 CSS3 当中,通过 transform 转换来实现 2D 转换或者 3D 转换。
1、缩放:scale
格式:
transform: scale(x, y); transform: scale(2, 0.5);
参数解释: x:表示水平方向的缩放倍数。y:表示垂直方向的缩放倍数。如果只写一个值就是等比例缩放。
取值:大于1表示放大,小于1表示缩小。不能为百分比。
格式举例:
效果:
上图可以看到,给 box1 设置 2D 转换,并不会把兄弟元素挤走。
2、位移:translate
格式:
transform: translate(水平位移, 垂直位移); transform: translate(-50%, -50%);
参数解释:
格式举例:
效果:
上图中,因为我在操作的时候,鼠标悬停后,立即进行了略微的移动,所以产生了两次动画。正确的效果应该是下面这样的
应用:让绝对定位中的盒子在父亲里居中
我们知道,如果想让一个标准流中的盒子在父亲里居中(水平方向看),可以将其设置margin: 0 auto属性。
可如果盒子是绝对定位的,此时已经脱标了,如果还想让其居中(位于父亲的正中间),可以这样做:
div { width: 600px; height: 60px; position: absolute; 绝对定位的盒子 left: 50%; 首先,让左边线居中 top: 0; margin-left: -300px; 然后,向左移动宽度(600px)的一半 }
如上方代码所示,我们先让这个宽度为600px的盒子,左边线居中,然后向左移动宽度(600px)的一半,就达到效果了。
现在,我们还可以利用偏移 translate 来做,这也是比较推荐的写法:
div { width: 600px; height: 60px; background-color: red; position: absolute; 绝对定位的盒子 left: 50%; 首先,让左边线居中 top: 0; transform: translate(-50%); 然后,利用translate,往左走自己宽度的一半【推荐写法】 }
3、旋转:rotate
格式:
transform: rotate(角度); transform: rotate(45deg);
参数解释:正值 顺时针;负值:逆时针。
效果:
注意,上方代码中,我们给盒子设置了 transform 中的 rotate 旋转,但同时还要给盒子设置 transition 过渡。如果没有这行过渡的代码,旋转会直接一步到位,效果如下:(不是我们期望的效果)
案例1:小火箭
上方代码中,我们将 transform 的两个小属性合并起来写了。
案例2:扑克牌
rotate 旋转时,默认是以盒子的正中心为坐标原点的。如果想改变旋转的坐标原点,可以用transform-origin属性。格式如下:
transform-origin: 水平坐标 垂直坐标; transform-origin: 50px 50px; transform-origin: center bottom; //旋转时,以盒子底部的中心为坐标原点
我们来看一下 rotate 结合 transform-origin 的用法举例。
代码如下:
效果如下:
4、倾斜
3D 转换
1、旋转:rotateX、rotateY、rotateZ
3D坐标系(左手坐标系)
如上图所示,伸出左手,让拇指和食指成“L”形,大拇指向右,食指向上,中指指向前方。拇指、食指和中指分别代表X、Y、Z轴的正方向,这样我们就建立了一个左手坐标系。
浏览器的这个平面,是X轴、Y轴;垂直于浏览器的平面,是Z轴。
旋转的方向:(左手法则)
左手握住旋转轴,竖起拇指指向旋转轴的正方向,正向就是其余手指卷曲的方向。
从上面这句话,我们也能看出:所有的3d旋转,对着正方向去看,都是顺时针旋转。
格式:
transform: rotateX(360deg); //绕 X 轴旋转360度 transform: rotateY(360deg); //绕 Y 轴旋转360度 transform: rotateZ(360deg); //绕 Z 轴旋转360度
格式举例:
(1)rotateX 举例
效果:
上方代码中,我们最好加个透视的属性,方能看到3D的效果;没有这个属性的话,图片旋转的时候,像是压瘪了一样。
而且,透视的是要加给图片的父元素 div,方能生效。我们在后面会讲解透视属性。
(2)rotateY 举例:
效果:
(3)rotateZ 举例:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> .rotateZ { width: 330px; height: 227px; margin: 100px auto; /* 透视*/ perspective: 200px; } img { transition: all 1s; } .rotateZ:hover img { transform: rotateZ(360deg); } </style> </head> <body> <div class="rotateZ"> <img src="images/z.jpg" alt=""/> </div> </body> </html>
效果:
案例:百度钱包
现在有下面这张图片素材:
要求做成下面这种效果:
上面这张图片素材其实用的是精灵图。实现的代码如下:
2、移动:translateX、translateY、translateZ
格式:
transform: translateX(100px); //沿着 X 轴移动 transform: translateY(360px); //沿着 Y 轴移动 transform: translateZ(360px); //沿着 Z 轴移动
格式举例:
(1)translateX 举例:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> .box { width: 200px; height: 200px; background: green; transition: all 1s; } .box:hover { transform: translateX(100px); } </style> </head> <body> <div class="box"> </div> </body> </html>
效果:
(2)translateY 举例:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> .box { width: 200px; height: 200px; background: green; transition: all 1s; } .box:hover { transform: translateY(100px); } </style> </head> <body> <div class="box"> </div> </body> </html>
效果:
(3)translateZ 举例:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> body { /* 给box的父元素加透视效果*/ perspective: 1000px; } .box { width: 250px; height: 250px; background: green; transition: all 1s; margin: 200px auto } .box:hover { /* translateZ必须配合透视来使用*/ transform: translateZ(400px); } </style> </head> <body> <div class="box"> </div> </body> </html>
效果:
上方代码中,如果不加透视属性,是看不到translateZ的效果的。
3、透视:perspective
电脑显示屏是一个 2D 平面,图像之所以具有立体感(3D效果),其实只是一种视觉呈现,通过透视可以实现此目的。
透视可以将一个2D平面,在转换的过程当中,呈现3D效果。但仅仅只是视觉呈现出3d 效果,并不是正真的3d。
格式有两种写法:
4、3D呈现(transform-style)
3D元素构建是指某个图形是由多个元素构成的,可以给这些元素的父元素设置transform-style: preserve-3d来使其变成一个真正的3D图形。属性值可以如下:
transform-style: preserve-3d; //让 子盒子 位于三维空间里 transform-style: flat; //让子盒子位于此元素所在的平面内(子盒子被扁平化)
案例:立方体
动画是CSS3中具有颠覆性的特征,可通过设置多个节点 来精确控制一个或一组动画,常用来实现复杂的动画效果。
1、定义动画的步骤
(1)通过@keyframes定义动画;
(2)将这段动画通过百分比,分割成多个节点;然后各节点中分别定义各属性;
(3)在指定元素里,通过 animation 属性调用动画。
之前,我们在 js 中定义一个函数的时候,是先定义,再调用:
js 定义函数: function fun(){ 函数体 } 调用: fun();
同样,我们在 CSS3 中定义动画的时候,也是先定义,再调用:
定义动画: @keyframes 动画名{ from{ 初始状态 } to{ 结束状态 } } 调用: animation: 动画名称 持续时间;
其中,animation属性的格式如下:
animation: 定义的动画名称 持续时间 执行次数 是否反向 运动曲线 延迟执行。(infinite 表示无限次) animation: move1 1s alternate linear 3; animation: move2 4s;
定义动画的格式举例:
注意好好看代码中的注释。
效果如下:
2、动画属性
我们刚刚在调用动画时,animation属性的格式如下:
animation属性的格式如下:
animation: 定义的动画名称 持续时间 执行次数 是否反向 运动曲线 延迟执行。(infinite 表示无限次) animation: move1 1s alternate linear 3; animation: move2 4s;
可以看出,这里的 animation 是综合属性,接下来,我们把这个综合属性拆分看看。
(1)动画名称:
animation-name: move;
(2)执行一次动画的持续时间:
animation-duration: 4s;
备注:上面两个属性,是必选项,且顺序固定。
(3)动画的执行次数:
animation-iteration-count: 1; //iteration的含义表示迭代
属性值infinite表示无数次。
(3)动画的方向:
animation-direction: alternate;
属性值:normal 正常,alternate 反向。
(4)动画延迟执行:
animation-delay: 1s;
(5)设置动画结束时,盒子的状态:
animation-fill-mode: forwards;
属性值: forwards:保持动画结束后的状态(默认), backwards:动画结束后回到最初的状态。
(6)运动曲线:
animation-timing-function: ease-in;
属性值可以是:linear ease-in-out steps()等。
注意,如果把属性值写成steps(),则表示动画不是连续执行,而是间断地分成几步执行。我们接下来专门讲一下属性值 steps()。
steps()的效果
我们还是拿上面的例子来举例,如果在调用动画时,我们写成:
animation: move2 4s steps(2);
效果如下:
有了属性值 steps(),我们就可以作出很多不连续地动画效果。比如时钟;再比如,通过多张静态的鱼,作出一张游动的鱼。
step()举例:时钟的简易模型
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> div { width: 3px; height: 200px; background-color: #000; margin: 100px auto; transform-origin: center bottom; /* 旋转的中心点是底部 */ animation: myClock 60s steps(60) infinite; } @keyframes myClock { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } </style> </head> <body> <div></div> </body> </html>
上方代码,我们通过一个黑色的长条div,旋转360度,耗时60s,分成60步完成。即可实现。
效果如下:
动画举例:摆动的鱼
现在,我们要做下面这种效果,为了作出上面这种效果,要分成两步。
(1)第一步:让鱼在原地摆动
鱼在原地摆动并不是一张 gif动图,她其实是由很多张静态图间隔地播放,一秒钟播放完毕,就可以了
图片的url是http://img.smyhvae.com/20180209_1245.gif,图片较大,如无法观看,可在浏览器中单独打开。
上面这张大图的尺寸是:宽 509 px、高 2160 px。
我们可以理解成,每一帧的尺寸是:宽 509 px、高 270 px。270 * 8=2160。让上面这张大图,在一秒内从 0px 的位置往上移动2160px,分成8步来移动。就可以实现了。
代码是:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> .shark { width: 509px; height: 270px; /*盒子的宽高是一帧的宽高*/ border: 1px solid #000; margin: 100px auto; background: url(images/shark.png) left top; /* 让图片一开始位于 0 px的位置 */ animation: sharkRun 1s steps(8) infinite; /* 一秒之内,从顶部移动到底部,分八帧, */ } @keyframes sharkRun { 0% { } /* 270 * 8=2160 */ 100% { background-position: left -2160px; /* 动画结束时,让图片位于最底部 */ } } </style> </head> <body> <div class="sharkBox"> <div class="shark"></div> </div> </div> </body> </html>
我们不妨把上面的动画的持续时间从1s改成 8s,就可以看到动画的慢镜头
这下,你应该恍然大悟了。
(2)第二步:让鱼所在的盒子向前移动。
实现的原理也很简单,我们在上一步中已经让shark这个盒子实现了原地摇摆,现在,让 shark 所在的父盒子 sharkBox向前移动,即可。完整版代码是:
最后效果很好
这是我在学习CSS3动画的时候收藏的一篇好文,现在分享在这里,既方便大家学习参考,也方便日后查阅,最后感谢作者
链接文章
https://www.cnblogs.com/qianguyihao/p/8435182.html
在完成前面的基本概念的学习以后,今天开始我们来学习HTML。
在百度上搜索HTML,你会看到一大片的描述,很多读者会陷入迷惑中,到底什么是HTML?我们在这里给出一些关键概念的理解。首先我们要明确的是,我们通过编写HTML的代码并通过浏览器运行,就能得到我们想到的界面。HTML提供了很多基本的元素、标签用于我们构建界面,你可能你并不明白什么是元素和标签,没关系我们可以直接开始一个例子来讲解和体会这些概念。
先练后理,我认为是很好的一个学习办法。因为计算机包含了太多东西,先想理清楚所有的知识在开始写软件,这是不现实的。
<!-- 首先,利用VS Code 创建一个demo.html,并在里面完成一下代码的编写,如图一所示 -->
<!-- 这些都是注释,并不会影响实际的效果 -->
<!-- 下面的代码是一个HTML的基本框架,我们会通过注释的方式一一讲解-->
<!-- 第一行代码是用于表示这是一个HTML的文档,这样浏览器就会用正确的方式展示这个页面 -->
<!DOCTYPE html>
<!-- html标签是每个HTML文档的开始 -->
<html lang="en">
<!-- head标签主要提供一些基本的设置,其中title是指你打开页面的时候,显示的结果 -->
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<!-- body标签是页面的内容部分,我们想向界面添加新的元素的话,就在这里添加 -->
<body>
</body>
</html>
图一
在没有给上面的代码添加任何东西的时候,打开的效果如图二,你会发现上面显示的Document就是我们在title里面设置的值。
任务一:修改代码里面<title> </title>两个标签中间的值,从Document改为我的主页,并且查看打开页面是否生效
图二
<!DOCTYPE html>
<!-- html标签是每个HTML文档的开始 -->
<html lang="en">
<!-- head标签主要提供一些基本的设置,其中title是指你打开页面的时候,显示的结果 -->
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<!-- body标签是页面的内容部分,我们想向界面添加新的元素的话,就在这里添加 -->
<body>
</body>
</html>
图三
非常简单并且快速,我们只需要向body标签内部添加h1和h2标签,在界面中就能出现对应的标题和二级标题。那么我们还有什么标签呢?我们可以简单的介绍几个
任务二:百度搜索HTML标签了解一下,还有哪些常见的标签。
<!-- 首先,利用VS Code 创建一个demo.html,并在里面完成一下代码的编写,如图一所示 -->
<!-- 这些都是注释,并不会影响实际的效果 -->
<!-- 下面的代码是一个HTML的基本框架,我们会通过注释的方式一一讲解-->
<!-- 第一行代码是用于表示这是一个HTML的文档,这样浏览器就会用正确的方式展示这个页面 -->
<!DOCTYPE html>
<!-- html标签是每个HTML文档的开始 -->
<html lang="en">
<!-- head标签主要提供一些基本的设置,其中title是指你打开页面的时候,显示的结果 -->
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<!-- body标签是页面的内容部分,我们想向界面添加新的元素的话,就在这里添加 -->
<body>
<!-- body中间添加新的内容来丰富我们的界面 -->
<!-- h1标签是用于在界面中添加一个 一级标题 -->
<!-- 如果你需要添加一个标题,那肯定就会用h1标签 -->
<h1> HTML课堂开课啦 </h1>
<!-- 同样的,h2标签是用于在界面中添加一个 二级标题 -->
<!-- 让我们看看效果 -->
<h2> 二级标题-HTML课堂开课啦 </h2>
<!-- 添加的新标签,效果如图四 -->
<!-- 这里开始涉及到属性,href属性是用于指定当你点击这个超链接的时候,跳转到网站 -->
<!-- href="www.baidu.com" 意味着会跳转到百度,快试试吧!-->
<a href="www.baidu.com">超链接</a>
<button>一个按钮</button>
<!-- 同样的,这里的src属性是指定显示的图片地址,你可以试试改为其他地址 -->
<img src="http://t7.baidu.com/it/u=3616242789,1098670747&fm=79&app=86&size=h300&n=0&g=4n&f=jpeg?sec=1583627811&t=0dcfb9b5461a7ceaf634f834e00ef93a" alt="">
</body>
</html>
图四
任务三:从了解到标签里面选几个添加到代码中,并验证效果
本节我们完成了基本的HTML的认识,我们能够清楚的知道,界面是完全由我们写的代码控制的。我们需要什么组件,就通过对应的标签就能够完成效果。有的同学会觉得当前的页面很丑,但是不用着急,因为那是CSS部分的知识了。就像修房子一样,HTML是造房子,CSS就是装修的事儿了。
小建议:
谢谢大家的阅读,有任何问题可以提出来,一定会尽力解答。
*请认真填写需求信息,我们会在24小时内与您取得联系。