<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>HTML &#8211; 李辉 / Grey Li</title>
	<atom:link href="https://greyli.com/tag/html/feed/" rel="self" type="application/rss+xml" />
	<link>https://greyli.com</link>
	<description>一个编程和写作爱好者的在线记事本</description>
	<lastBuildDate>Thu, 06 Nov 2025 11:36:11 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.9.26</generator>

<image>
	<url>https://greyli.com/wp-content/uploads/2025/03/avatar-500-compressed-144x144.jpg</url>
	<title>HTML &#8211; 李辉 / Grey Li</title>
	<link>https://greyli.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>（使用 HTML、JavaScript、Flask 或 Nginx）为丢失的图片显示默认图片</title>
		<link>https://greyli.com/display-default-image-for-missing-image/</link>
		<comments>https://greyli.com/display-default-image-for-missing-image/#respond</comments>
		<pubDate>Sat, 23 Feb 2019 10:58:46 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[计算机与编程]]></category>
		<category><![CDATA[Flask]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[图片]]></category>

		<guid isPermaLink="false">http://greyli.com/?p=2307</guid>
		<description><![CDATA[当在 HTML 页面上显示图片时，如果图片不存在，我们通常需要显示一个默认图片。 假设我们的图片路径在 /im [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>
	当在 HTML 页面上显示图片时，如果图片不存在，我们通常需要显示一个默认图片。
</p>
<p>
	假设我们的图片路径在 /imgs 下，默认图片为 /imgs/default.jpg，下面是一些常见的处理方法示例。
</p>
<h2>
	Solution 1: HTML / JavaScript<br />
</h2>
<p>
	最简单的，你可以使用 &lt;img&gt;&nbsp;元素的&nbsp;<code>onerror</code>&nbsp;属性来设置默认图片：
</p>
<pre>
<code>&lt;img src=&quot;/imgs/cat.jpg&quot; onerror=&quot;this.src=&#39;/imgs/default.jpg&#39;&quot;&gt;</code></pre>
<p>
	类似的，你也可以使用 JavaScript（jQuery）监听 img 元素的 error 事件（当图片地址无效时浏览器会触发这个事件）：
</p>
<pre>
<code>$(&#39;img&#39;).on(&quot;error&quot;, function() {
  $(this).attr(&#39;src&#39;, &#39;/imgs/default.jpg&#39;);  // 替换为默认图片
});</code></pre>
<h2>
	Solution 2: Flask<br />
</h2>
<p>
	除此之外，你也可以在服务器端处理，以 Flask 为例，你可以写一个自定义视图函数来加载图片：
</p>
<pre>
<code>import os
from flask import send_from_directory

# ...

@app.route(&#39;/img/&lt;path:filename&gt;&#39;)
def get_image(filename):
    img_path = os.path.join(images_path, filename)  # 获取图片路径

    if not os.path.exists(img_path):  # 判断图片文件是否存在
        return send_from_directory(os.path.join(images_path, &#39;/imgs/default.jpg&#39;))
    return send_from_directory(img_path)</code></pre>
<p>
	在模板里，使用这个视图函数获取图片 URL：
</p>
<pre>
<code>&lt;img src=&quot;{{ url_for(&#39;get_image&#39;, filename=</code>&#39;imgs/&#39;&nbsp;+ <code>image.filename) }}&quot; &gt;</code></pre>
<h2>
	Solution 3: Nginx<br />
</h2>
<p>
	在生产环境下，出于性能的考虑，我们通常会使用 Web 服务器（比如 Nginx / Apache）&nbsp;来服务（serve）静态文件。以 Nginx 为例，你可以使用&nbsp;<a href="http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files"><code>try_files</code></a>&nbsp;指令来设置默认图片：
</p>
<pre>
<code>location /imgs/ {
    try_files $uri /imgs/default.jpg;
}</code></pre>
<p>
	附注：本文改写自我的<a href="https://stackoverflow.com/a/54684256/5511849">SO&nbsp;回答</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/display-default-image-for-missing-image/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>页面右侧出现空白？试试这个CSS调试器！</title>
		<link>https://greyli.com/white-space-appears-on-the-right-side-of-the-page-try-this-css-debugger/</link>
		<comments>https://greyli.com/white-space-appears-on-the-right-side-of-the-page-try-this-css-debugger/#comments</comments>
		<pubDate>Sun, 06 Nov 2016 09:28:31 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[计算机与编程]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://withlihui.com/?p=1197</guid>
		<description><![CDATA[很多新手在写CSS会遇到很多问题，比如发现页面右侧出现了很多空白。你在网上搜索了之后，发现使用这行代码可以解决 [&#8230;]]]></description>
				<content:encoded><![CDATA[<div class="Editable-unstyled" data-block="true" data-editor="9ligl" data-offset-key="3iooc-0-0">
<p class="Editable-unstyled" data-block="true" data-editor="bh3nk" data-offset-key="emak3-0-0">很多新手在写CSS会遇到很多问题，比如发现页面右侧出现了很多空白。你在网上搜索了之后，发现使用这行代码可以解决：</p>
</div>
<pre class="">body, html {
    overflow-x: hidden;
}</pre>
<p class="">但是虽然滚动条被隐藏了，问题并没有解决，你还是不知道是哪个元素在作怪。而且，隐藏了x向的滚动条会导致很多副作用，比如缩小浏览器后无法滚动。</p>
<h2 class=""><b>调试工具</b></h2>
<p class="">最佳的解决方法是使用一个CSS调试工具来把出问题的元素揪出来。你可以访问<a href="http://greyli.com/ghost.html">这个页面</a>，点击页面第二行的链接（Click me……），然后看看发生了什么……不用担心，刷新一下，页面就会恢复正常</p>
<p class=""><span data-offset-key="futbj-0-0">如果你使用Chrome浏览器，那么可以试试这个</span><a class="Link" href="https://chrome.google.com/webstore/detail/ghostpage/hegpcollkgldlimbhkimijhhhoaicipp" target="_blank" rel="noopener" data-offset-key="futbj-1-0" data-editable="true"><span data-offset-key="futbj-1-0">GhostPage</span></a><span data-offset-key="futbj-2-0">扩展。</span></p>
<h2 class=""><b>使用方法</b></h2>
<p class="">你可以拖拽这个链接到你浏览器的书签栏（或是使用上面提到的Chrome扩展），然后在任一个打开的页面，都可以通过点击这个书签来查看整个页面的元素结构。比如一开始我打开知乎的主页，是这样：</p>
<div id="attachment_1207" style="width: 1162px" class="wp-caption aligncenter"><img class="wp-image-1207 size-full" src="http://greyli.com/wp-content/uploads/2016/11/before.png" alt="知乎主页" width="1152" height="942" srcset="https://greyli.com/wp-content/uploads/2016/11/before.png 1152w, https://greyli.com/wp-content/uploads/2016/11/before-150x123.png 150w, https://greyli.com/wp-content/uploads/2016/11/before-300x245.png 300w, https://greyli.com/wp-content/uploads/2016/11/before-1024x837.png 1024w, https://greyli.com/wp-content/uploads/2016/11/before-624x510.png 624w" sizes="(max-width: 1152px) 100vw, 1152px" /><p class="wp-caption-text">正常的页面</p></div>
<p class="">当我点了这个书签，页面就变成了这样：</p>
<div id="attachment_1208" style="width: 1172px" class="wp-caption aligncenter"><a href="http://greyli.com/wp-content/uploads/2016/11/after.png" rel="attachment wp-att-1208"><img class="size-full wp-image-1208" src="http://greyli.com/wp-content/uploads/2016/11/after.png" alt="使用了Ghost CSS后的页面" width="1162" height="939" srcset="https://greyli.com/wp-content/uploads/2016/11/after.png 1162w, https://greyli.com/wp-content/uploads/2016/11/after-150x121.png 150w, https://greyli.com/wp-content/uploads/2016/11/after-300x242.png 300w, https://greyli.com/wp-content/uploads/2016/11/after-1024x827.png 1024w, https://greyli.com/wp-content/uploads/2016/11/after-624x504.png 624w" sizes="(max-width: 1162px) 100vw, 1162px" /></a><p class="wp-caption-text">使用了Ghost CSS后的页面</p></div>
<p class="">很神奇吧？</p>
<p class="">其实原理很简单，只是在页面的CSS文件里加入了这几行代码：</p>
<pre class="" lang="css">* {
    background: #000 !important;
    color: #0f0 !important;
    outline: solid #f00 1px !important;
}</pre>
<p class="">更改所有元素的背景，颜色和边框（你可以通过修改书签的链接内容来自定义颜色）。</p>
<p class="">在你的出现右侧空白问题的页面上，你会看到有一个元素一直顶到最右边的边界，修正这个元素就可以彻底的解决问题。这样，一旦页面出现了奇怪的问题时，你就可以通过点击这个书签来检查问题。把它放到你的日常开发工具箱里吧：）</p>
<p class="">方法来自：<a class="" href="http://wernull.com/2013/04/debug-ghost-css-elements-causing-unwanted-scrolling/" target="_blank" rel="noopener" data-editable="true" data-title="Debug Ghost CSS Elements Causing Unwanted Scrolling">Debug Ghost CSS Elements Causing Unwanted Scrolling</a></p>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/white-space-appears-on-the-right-side-of-the-page-try-this-css-debugger/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>impress.js——用HTML“写”幻灯片</title>
		<link>https://greyli.com/html-for-impress-js-write-slides/</link>
		<comments>https://greyli.com/html-for-impress-js-write-slides/#comments</comments>
		<pubDate>Sun, 15 May 2016 10:25:39 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[计算机与编程]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://withlihui.com/?p=497</guid>
		<description><![CDATA[一、我做的幻灯片 先看一下我用impress.js做的幻灯片吧！加载可能会有些慢。如果打不开那就看一下作者的d [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2><b>一、我做的幻灯片</b></h2>
<p>先看一下我用impress.js做的<a href="http://greyli.com/one-of-the-best-slide-ive-done-so-far/" target="_blank">幻灯片</a>吧！<br />加载可能会有些慢。如果打不开那就看一下作者的<a href="http://impress.github.io/impress.js/#/bored" target="_blank">demo</a>吧。<br />注：文字摇晃的特效使用的是<a href="http://greyli.com/css-shake/" target="_blank">CSSHake</a>，视频用Chomp（ios）制作。</p>
<p>&nbsp;</p>
<h2><b>二、概述</b></h2>
<p>impress.js是一个免费开源的JavaScript库，可以用来制作非常酷的幻灯片。如果你之前接触过<a href="https://prezi.com/">Prezi</a>，肯定还记得那让人赞叹的特效吧。而impress.js就是受Prezi启发做成的。</p>
<p>常见的<a href="http://greyli.com/make-a-fun-slide/" target="_blank">幻灯片工具</a>有微软的PowerPoint【1】，苹果的Keyword等。不常见的有Prezi等。除此之外，还有一些通过HTML，CSS，JavaScript等前端语言制作的工具，主要有<a href="https://github.com/impress/impress.js">impress.js</a>，<a href="http://lab.hakim.se/reveal-js/#/" target="_blank">reveal.js</a>（这个有时间探索一下），<a href="http://imakewebthings.com/deck.js/#intro">deck.js</a>，<a href="https://github.com/skaegi/html5slides">html5slides</a>。其中impress.js最让人印象深刻（impress！），使用它可以你可以制作出许多特效：三维空间的无限延伸，3D效果，任意角度的旋转，任意大小的缩放，把一页幻灯片放在三维空间的任一位置。算了，语言是苍白的，看看作者的<a href="http://impress.github.io/impress.js/#/bored">demo</a>吧。</p>
<p>虽然效果很好，但impress.js也有一些缺点：比如编辑方式太繁琐（其实是需要学的东西很多……），尤其是想要获得一些特殊效果时。总的来说，impress.js比较适合以演讲内容为主的展示（参考<a href="http://greyli.com/make-a-fun-slide/" target="_blank">高桥流简报法</a>），单页只放一个名词或句子，或是一张图片，这样会带来比较出众的效果。可以用它来做一个<a href="http://greyli.com/make-a-fun-slide/" target="_blank">词云图</a>，前提是演讲水平够好。</p>
<p>先泼一盆冷水，工具是为内容服务的，如果你没有什么好的内容——要么是有质量，要么有意思，那么幻灯片做的再炫也没什么用。当然，如果你只求酷炫，那当我没说。</p>
<p>&nbsp;</p>
<h2><b>三、前提要求</b></h2>
<p>需要一些HTML和CSS的基础知识（会JavaScript更好），没有的话花几个小时到<a href="http://www.w3schools.com/">w3school</a>（<a href="http://www.w3school.com.cn/index.html">中文</a>）或<a href="https://developer.mozilla.org/zh-CN/">MDN</a>上了解一下。</p>
<p>按照作者在代码注释里说的，你不光得有HTML和CSS的基础知识，还得有设计的眼光。因为impress.js没有默认的风格或样式，一切都得你自己来。而且作者不希望所有的impress.js展示都像demo一样，所以，明白了方法就自己从头做起，你会体会到很大的乐趣的！</p>
<p><b>英文好的还是去看</b><a href="https://github.com/impress/impress.js/blob/master/index.html"><b>源代码</b></a><b>吧。作者的注释很详细，也很有趣。</b></p>
<p>&nbsp;</p>
<h2><b>四、文件的使用</b></h2>
<p>新手可能会对文件有些疑问，所以在这里说明一下。<b>不需要可直接跳至下一节。</b></p>
<h3><b>下载</b></h3>
<p>你可以到项目的<a href="https://github.com/impress/impress.js">Github页面</a>下载文件，或者直接点击<a href="https://github.com/impress/impress.js/archive/master.zip">这儿</a>下载。解压后会得到一个文件夹，双击打开根目录下的index.html就可以看到作者的demo了。</p>
<p>&nbsp;</p>
<h3><b>主要文件组成</b></h3>
<p>impress：</p>
<ul>
<li>js
<ul>
<li>impress.js（JavaScript文件，提供特效支持）</li>
</ul>
</li>
<li>css
<ul>
<li>impress_demo.css（CSS文件，提供样式支持）</li>
</ul>
</li>
<li>index.html（HTML文件，幻灯片的入口，也是你写入幻灯片的地方）</li>
</ul>
<p>&nbsp;</p>
<h3><b>如何“制作”幻灯片</b></h3>
<p>你要做的就是创建一个HTML文件（使用文本编辑器比如Notepad++），demo对应的HTML文件就是根目录下的index.html。然后把CSS文件和JS文件引入你的HTML文件里（见“<b>初始化</b>”），接着把你的幻灯片按照一定的属性设置写进HTML文件里（见“<b>创建幻灯片</b>”）。最后用浏览器把这个HTML文件打开就可以了。</p>
<p>&nbsp;</p>
<h2><b>五、初始化</b></h2>
<h3><b>头部（</b><b>head</b><b>）</b></h3>
<p>先把文件<a href="https://github.com/impress/impress.js/archive/master.zip">下载</a>下来，然后创建一个HTML文件，把下面的head放上去：</p>
<pre class="">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="utf-8" /&gt;    
    &lt;meta name="viewport" content="width=1024" /&gt;
    &lt;meta name="apple-mobile-web-app-capable" content="yes" /&gt;
    &lt;title&gt;impress.js&lt;/title&gt;
    &lt;link href="css/impress-demo.css" rel="stylesheet" /&gt;
    &lt;link rel="apple-touch-icon" href="apple-touch-icon.png" /&gt;
&lt;/head&gt;</pre>
<p>头部信息经过删改。</p>
<p>&nbsp;</p>
<h3><b>错误反馈</b></h3>
<p>接下来是一个错误反馈的class，当浏览器不支持时会显示，可以改写错误信息的内容。也可以不加。</p>
<pre class="">&lt;body class="impress-not-supported"&gt;
&lt;div class="fallback-message"&gt;
    &lt;p&gt;Your browser &lt;b&gt;doesn't support the features required&lt;/b&gt; by impress.js, so you are presented with a simplified version of this presentation.&lt;/p&gt;
    &lt;p&gt;For the best experience please use the latest &lt;b&gt;Chrome&lt;/b&gt;, &lt;b&gt;Safari&lt;/b&gt; or&lt;b&gt;Firefox&lt;/b&gt; browser.&lt;/p&gt;
&lt;/div&gt;</pre>
<p>&nbsp;</p>
<h3><b>编辑幻灯片区域</b></h3>
<p>创建一个id为impress的div，待会所有的演示文稿都要放在这个div里：</p>
<pre class="">&lt;div id="impress"&gt;
&lt;/div&gt;</pre>
<p>&nbsp;</p>
<h3><b>操作提示</b></h3>
<p>下面这两段分别用于在电脑和移动设备上提示用户怎么控制幻灯片：</p>
<pre class="">&lt;div class="hint"&gt;
    &lt;p&gt;Use a spacebar or arrow keys to navigate&lt;/p&gt;
&lt;/div&gt;
&lt;script&gt;
    if ("ontouchstart" in document.documentElement) {
        document.querySelector(".hint").innerHTML = "&lt;p&gt;Tap on the left or right to navigate&lt;/p&gt;";
}
&lt;/script&gt;</pre>
<p>&nbsp;</p>
<h3><b>调用</b><b>JS</b><b>文件声明</b></h3>
<p>这两行放在文件的最后。声明对impress.js的引用，并且初始化impress.js。</p>
<pre class="">&lt;script src="js/impress.js"&gt;&lt;/script&gt;
&lt;script&gt;impress().init();&lt;/script&gt;</pre>
<p>别忘了关闭上面的几个标签：</p>
<p>&lt;/body&gt;<br />&lt;/html&gt;</p>
<p>点击<a href="http://23.83.239.241/impress/template.txt" target="_blank">这儿</a>看完整的模板文件。</p>
<p>&nbsp;</p>
<h2><b>六、创建幻灯片</b></h2>
<p>impress.js创建了一个三维空间，所有的幻灯片都有各自的位置坐标（x，y，z）。整个空间的中心是原点（0，0，0）。其他的幻灯片或文字都是相对于这个原点来设置位置的。（中心不一定是第一张幻灯片）</p>
<p>像之前提到的，所有的幻灯片都要放在一个id=impress的div里。而且所有幻灯片都使用一个div。设置幻灯片的各个参数如下：</p>
<p>id（可选）——可以用来表示幻灯片的顺序，格式是id=“step-N”，（比如id=&#8221;step-2&#8243;，序号为2）。<b>如果不指定</b><b>id</b><b>的话，幻灯片按照代码从上往下的顺序出现</b>。<br />class（必须）——通常有两个值，“step”表示一个步骤，<b>元素透明显示</b>，“step slide”有幻灯片白色方框。</p>
<p>其他的调整选项都以data开头。</p>
<h3><b>位置属性</b></h3>
<p>data-x——表示x轴坐标<br />data-y——表示y轴坐标<br />data-z——表示z轴坐标</p>
<p>坐标的设置，如图所示。需要注意的是<strong>Y轴向上是负值</strong>。简单的理解就是：往右（x），往下（y），往上（z）是正值；相应为负值。</p>
<div id="attachment_498" style="width: 740px" class="wp-caption aligncenter"><a href="http://greyli.com/wp-content/uploads/2016/05/locate.jpg" rel="attachment wp-att-498"><img class="size-full wp-image-498" src="http://greyli.com/wp-content/uploads/2016/05/locate.jpg" alt="坐标" width="730" height="480" srcset="https://greyli.com/wp-content/uploads/2016/05/locate.jpg 730w, https://greyli.com/wp-content/uploads/2016/05/locate-300x197.jpg 300w, https://greyli.com/wp-content/uploads/2016/05/locate-624x410.jpg 624w" sizes="(max-width: 730px) 100vw, 730px" /></a><p class="wp-caption-text">坐标方向</p></div>
<h3><b>常用效果</b></h3>
<p>data-rotate——表示旋转，分别有data-rotate-x，data-rotate-y和data-rotate-z（同data-rotate），值表示旋转的度数。<b>正值表示按照相应的轴顺时针旋转，负值则是逆时针。<br /></b>data-scale——表示幻灯片的大小，如data-scale=&#8221;4&#8243;表示比其他幻灯片大四倍</p>
<p>&nbsp;</p>
<h3><b>不常用属性</b></h3>
<p>data-transition-duration——幻灯片切换的时间，默认为1000，单位为ms（1000ms=1s）</p>
<p>data-perspective——表示视角，设为0则取消3D效果。默认为1000。更改前最好知道你在干什么，详情见：https://developer.mozilla.org/en/CSS/perspective</p>
<p>&nbsp;</p>
<h3><b>示例</b></h3>
<p>第一个div创建了一个有白色底框的幻灯片，位置在第四象限，沿x轴顺时针旋转90度。文本是100px大小的“Hello, world!”。</p>
<pre class="">    &lt;div class="step slide" style="font-size:100px" data-x="0" data-y="0"&gt;
        &lt;q&gt;Hello, World!&lt;/q&gt;
    &lt;/div&gt;</pre>
<p>&nbsp;</p>
<p>第二个div创建了一个透明的幻灯片，位置在第一张幻灯片的右上方，绕z轴旋转90度。</p>
<pre class="">    &lt;div class="step" data-x="2000" data-y="-2000" data-rotate-z="90"&gt;
        &lt;q&gt;Hello, You!&lt;/q&gt;
    &lt;/div&gt;</pre>
<p>第三个div创建了一个透明的幻灯片，位置在第二张下方。</p>
<pre class="">    &lt;div class="step" data-x="2000" data-y="-2000" data-z="-5000" &gt;
        &lt;q&gt;Hello, Boy!&lt;/q&gt;
    &lt;/div&gt;</pre>
<p>第四个div创建了一个透明的幻灯片，位置在第三张绕y轴旋转90度的地方，2倍大小。</p>
<pre class="">    &lt;div class="step" data-x="-2000" data-y="-2000" data-z="-5000" data-rotate-x="180" data-scale="2"&gt;
        &lt;q&gt;Hello, Girl!&lt;/q&gt;
    &lt;/div&gt;</pre>
<p>点击<a href="http://23.83.239.241/impress/demo.html" target="_blank">这里</a>查看这四张幻灯片的效果。</p>
<p>&nbsp;</p>
<h3><b>全景图</b></h3>
<p>最后一个div是一个全景图：</p>
<pre class="">    &lt;div id="overview" class="step" data-x="3000" data-y="1500" data-scale="10"&gt;
    &lt;/div&gt;</pre>
<p>以上这些属性可根据需要调节，<b>只有</b><b>x</b><b>和</b><b>y</b><b>坐标是必须的</b>。</p>
<p>&nbsp;</p>
<h2><b>七、插入媒体问题</b></h2>
<h3><b>使视频和音乐在进入幻灯片时自动播放</b></h3>
<p>html5可以使用&lt;video&gt;和 &lt;audio&gt;标签插入音视频，控制方式有三种：</p>
<table>
<tbody>
<tr>
<td>
<p>controls</p>
</td>
<td>
<p>显示视频控制条</p>
</td>
</tr>
<tr>
<td>
<p>loop</p>
</td>
<td>
<p>自动播放，循环播放</p>
</td>
</tr>
<tr>
<td>
<p>autoplay</p>
</td>
<td>
<p> 自动播放</p>
</td>
</tr>
</tbody>
</table>
<p>代码如下：</p>
<pre class="">&lt;video width="320" height="460" autoplay&gt;
    &lt;source src="video/test.webm" type=video/webm&gt;
&lt;/video&gt;</pre>
<p>音频的代码类似，只要去掉宽高设置，更改文件的type就可以了。</p>
<p>在impress.js中，把视频标签放入DOM限制了媒体的autoplay。这时我们可以在impress.js中插入这段代码：</p>
<pre class="">var videoStep = document.getElementById("video-step");
var video = document.getElementById("video");
videoStep.addEventListener("impress:stepenter", function(){
    video.play();
}, false);
videoStep.addEventListener("impress:stepleave", function(){
    video.pause();
}, false);</pre>
<p>代码解释：</p>
<p>1～2行：设置了两个变量，分别代表幻灯片和视频文件，后面分别填上相应的id。<br />3～5行：监听当前幻灯片上的事件，如果进入幻灯片就执行相应的函数（即播放视频文件）<br />6～8行：同3～5行，这次是设置离开幻灯片时执行的函数（即暂停视频文件）。</p>
<p>然后把有视频的那张幻灯片的id设为video-step，视频的id设为video。</p>
<pre class="">&lt;div id="video-step" class="step" data-x="-50000" data-y="2000" data-z="-60000" data-scale="6"&gt;
    &lt;video id="video" width="420" height="340" autoplay&gt;
        &lt;source src="video/IMG_1254.webm" type="video/webm"&gt;
    &lt;/video&gt;
&lt;/div&gt;</pre>
<p>这样视频就可以在进入到那张幻灯片时开始播放，进入下一张幻灯片时就自动暂停了。</p>
<h3> </h3>
<h3><b>一张幻灯片里放入多个视频或音频</b></h3>
<p>以放两个视频为例：</p>
<p>第一步：<br />在上面那段JS代码里定义两个视频文件的变量（比如video1，video2）：</p>
<pre class="">var video1 = document.getElementById("video-1");
var video2 = document.getElementById("video-2");</pre>
<p>第二步：<br />进入幻灯片时执行的函数变更为：</p>
<pre class="">videoStep.addEventListener("impress:stepenter", function(){
    video1.play();
    video2.play();
}, false);
</pre>
<p class="">离开幻灯片时执行的函数相应修改；</p>
<p>第三步：<br />HTML文件设置相应的id。</p>
<p>&nbsp;</p>
<h3><b>在不同幻灯片里分别放入视频</b></h3>
<p>以在三个幻灯片中放置视频为例：</p>
<ol>
<li>在impress.js重复插入三个上面那段代码；</li>
<li>改掉变量名称（videoStep和video）；</li>
<li>相应地更改其他位置的变量名；</li>
<li>修改相应的id名称（video-step和video）；</li>
<li>html文件设置相应的id。</li>
</ol>
<p>插入音频的方法，以此类推。</p>
<p>&nbsp;</p>
<h3><b>背景音乐</b></h3>
<p>上面的方法只适合在某一页幻灯片上放置媒体，而如果想要全程播放背景音乐的话，就可以把audio标签放在整个编辑幻灯片（id为“impress”）的div之外。同时，你还可以在任一页控制背景音乐的暂停与播放。方法相同，也是插入上面那段JS代码，更改相应的变量和id，然后设置相应的操作，具体见上面那段代码的解释。</p>
<p>&nbsp;</p>
<h3><b>编辑</b><b>JavaScript</b></h3>
<p>我还没开始学JavaScript，能给的建议就这几点：</p>
<ol>
<li>保持相同的缩进；</li>
<li>语句后加上分号；</li>
<li>变量名不能重复；</li>
<li>另外，HTML里的ID也不能重复</li>
</ol>
<p>&nbsp;</p>
<h2><b>八、头脑风暴</b></h2>
<p>把impress.js和其他的前端工具搭配使用，你会获得更加有趣的效果，比如reveal.js的作者推荐的许多有趣的<a href="http://hakim.se/" target="_blank">前端项目</a>。再比如<a href="https://elrumordelaluz.github.io/csshake/">CSShake</a>（可以让文字或图片实现各种摇晃效果），参考我之前写过的<a href="http://greyli.com/css-shake/" target="_blank">介绍</a>和<a href="http://greyli.com/css_shake_test.html" target="_blank">示例页面</a>。或者是做出一个<a href="http://greyli.com/make-a-fun-slide/" target="_blank">词云图</a>来，都是很好的创意。当然，你得会演讲。</p>
<div id="attachment_515" style="width: 1010px" class="wp-caption aligncenter"><a href="http://greyli.com/wp-content/uploads/2016/05/词云图impress-1.jpg" rel="attachment wp-att-515"><img class="size-full wp-image-515" src="http://greyli.com/wp-content/uploads/2016/05/词云图impress-1.jpg" alt="impress+word cloud" width="1000" height="769" srcset="https://greyli.com/wp-content/uploads/2016/05/词云图impress-1.jpg 1000w, https://greyli.com/wp-content/uploads/2016/05/词云图impress-1-300x231.jpg 300w, https://greyli.com/wp-content/uploads/2016/05/词云图impress-1-624x480.jpg 624w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><p class="wp-caption-text">impress+word cloud</p></div>
<p>像demo里说的，<strong>唯一的限制就是你的想象力</strong>，快去探索吧！</p>
<p>&nbsp;</p>
<h2><b>九、</b><b>Last but not least</b></h2>
<p>把作者的最后一大段注释翻译过来吧：</p>
<p>“现在，完成你第一个impress.js幻灯片的所有知识，你差不多都有了。但是在你开始之前……<br />啊，你已经从Github复制了代码？<br />你已经打开编辑器粘贴了上去？<br />快停下！<br />幻灯片不是这样做的。这些只是代码。实现这些创意之前你得在心里完成它们。</p>
<p>如果你想做出好的幻灯片，就拿出铅笔和纸。关掉电脑。打个草稿，写写画画，通过头脑风暴把你的创意在纸上展现出来。试着把你想展示的东西做出个思维导图。这会让你离待会你要用impress.js实现的排版越来越近。只有当你把你的展示在纸上做好了，再回到代码前。太早写代码没什么用，因为那样你只会把你的时间浪费在和没用的点坐标搏斗上。</p>
<p>如果你觉得我疯了，那么请你把你的手放在一本叫做《展示的哲学》（&#8221;Presentation Zen&#8221;）的书上。这本书完全是关于如何创建让人赞叹和着迷的幻灯片的。</p>
<p>好好想想，如果你没有什么有趣的东西要表达，impress.js可能帮不了你什么。”</p>
<p>&nbsp;</p>
<h2><b>十、附录</b></h2>
<p>作者的Twitter：@bartaz<br />项目Github地址【<a href="https://github.com/impress/impress.js" target="_blank">https://github.com/impress/impress.js</a>】</p>
<p>&nbsp;</p>
<h2 style="margin: 0in; font-family: 微软雅黑; font-size: 14.0pt;"><span style="font-weight: bold; font-style: italic;">注释</span></h2>
<p style="margin: 0in; font-size: 12.0pt;"><span lang="zh-CN" style="font-family: 微软雅黑;">【</span><span lang="en-US" style="font-family: Calibri;">1</span><span lang="zh-CN" style="font-family: 微软雅黑;">】因为大部分人都会用“</span><span lang="en-US" style="font-family: 微软雅黑;">PPT</span><span lang="zh-CN" style="font-family: 微软雅黑;">”代称幻灯片，可是“</span><span lang="en-US" style="font-family: 微软雅黑;">PPT</span><span lang="zh-CN" style="font-family: 微软雅黑;">”本身指的是用微软的演示文稿工具</span><span lang="en-US" style="font-family: 微软雅黑;">PowerPoint</span><span lang="zh-CN" style="font-family: 微软雅黑;">做出来的幻灯片（其生成的文件格式默认为</span><span lang="en-US" style="font-family: 微软雅黑;">ppt</span><span lang="zh-CN" style="font-family: 微软雅黑;">），而英文里这个在做展示</span><span lang="en-US" style="font-family: 微软雅黑;">/</span><span lang="zh-CN" style="font-family: 微软雅黑;">报告（</span><span lang="en-US" style="font-family: 微软雅黑;">Presentation/Slide Show</span><span lang="zh-CN" style="font-family: 微软雅黑;">）时用的东西一般称作</span><span lang="en-US" style="font-family: 微软雅黑;">Slide</span><span lang="zh-CN" style="font-family: 微软雅黑;">，翻译过来是幻灯片或是演示文稿。本文统一称为幻灯片。</span></p>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/html-for-impress-js-write-slides/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
