B2. 多媒体与嵌入:让网页会说话
2.1 音频audio与视频video元素
让网页开口说话
"给网页加背景音乐就像用Python播放MP3?但HTML只需要一个
<audio>
标签!为什么有些音乐在手机能播网页却不行?格式兼容性是个大坑!"
html
<!-- 基础音频播放器 -->
<audio controls>
<source src="bgm.mp3" type="audio/mpeg">
你的浏览器不支持音频播放(就像Python的try-except)
</audio>
<!-- 带高级设置的视频播放 -->
<video width="400" controls muted>
<source src="cat.mp4" type="video/mp4">
<track label="中文字幕" kind="subtitles" src="sub.vtt" srclang="zh">
</video>
属性详解
controls
:显示播放控制条(播放/暂停、音量、进度条等)autoplay
:页面加载后自动播放(注意:很多浏览器会阻止带声音的自动播放)muted
:静音播放(常用于自动播放视频)loop
:循环播放preload
:预加载设置(auto
/metadata
/none
)
⚠️ 易错点:忘记写controls
属性会导致播放器没有控制条!视频文件路径错误是最常见404错误
2.2 iframe的使用与限制
网页中的俄罗斯套娃
"想在网页里嵌入B站视频?就像Python导入模块那样简单!但为什么老师总说iframe有安全隐患?"
html
<iframe
src="https://www.bilibili.com/video/BV1GJ411x7h7"
width="560"
height="315"
allowfullscreen>
</iframe>
属性详解
src
:嵌入内容的URL(可以是网页、视频、地图等)width
/height
:设置iframe的宽高(建议用CSS控制)allowfullscreen
:允许全屏显示sandbox
:安全限制(如allow-scripts
允许执行脚本)loading
:加载方式(eager
立即加载,lazy
延迟加载)
安全沙盒模式
"就像Python的沙箱环境,给iframe加上防护罩:"
html
<iframe
src="https://example.com"
sandbox="allow-scripts allow-same-origin"
loading="lazy">
</iframe>
⚠️ 易错点:随意嵌入第三方网站可能导致XSS攻击!加载慢的iframe要用loading="lazy"
2.3 画布canvas的使用
创建数字画板
"还记得Python的turtle绘图吗?canvas更强大!但为什么必须用JavaScript操作?"
html
<canvas id="myCanvas" width="300" height="150"></canvas>
<script>
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d'); // 就像拿到画笔
ctx.fillStyle = '#FF0000'; // 设置红色
ctx.fillRect(10, 10, 100, 50); // 绘制矩形
</script>
常用方法
getContext('2d')
:获取2D绘图上下文fillRect(x, y, width, height)
:绘制填充矩形strokeRect(x, y, width, height)
:绘制边框矩形beginPath()
:开始新路径moveTo(x, y)
:移动画笔到指定位置lineTo(x, y)
:绘制直线到指定位置
路径绘制进阶
"想画对话气泡?需要组合多个绘图指令:"
javascript
ctx.beginPath();
ctx.moveTo(75, 50);
ctx.lineTo(100, 75);
ctx.lineTo(100, 25);
ctx.fill(); // 绘制三角形
⚠️ 易错点:忘记调用beginPath()
会导致绘图路径叠加!canvas默认透明需手动设置背景色
知识回顾
<audio>
/<video>
需要controls
显示播放控件,注意文件格式兼容性- iframe可嵌入外部网页,但需注意安全限制和性能影响
- canvas绘图必须通过JavaScript操作,需要先获取绘图上下文
- 常见错误:文件路径错误、忘记重要属性、canvas未获取上下文直接绘图
课后练习
(填空)让视频自动静音播放需要添加____属性,延迟加载iframe用____属性
(代码纠错)以下canvas代码为什么无法绘图?
html
<canvas width="200" height="100">
const ctx = document.querySelector('canvas').getContext('2d');
ctx.fillRect(50, 50, 100, 50);
</canvas>
(选择)哪个属性可以防止iframe执行JavaScript?
- A.
sandbox="allow-scripts"
- B.
sandbox=""
- C.
security="restricted"
- D.
allow="none"
- A.
(项目)制作canvas动画:让红色方块从左到右循环移动(提示:使用
requestAnimationFrame
)