HTML5(音视频,canvas画布,画布动画)

音频与视频

HTML5提供了相关标签支持在网页中实现音频与视频的播放。

音频标签

音频标签支持的文件格式有:WAVMP3ogg

音频标签的简单使用方法:

<audio src="../assets/xxxx.mp3" controls></audio>

音频标签的标准使用方法:

<audio controls>
	<source src="xxx.mp3" type="audio/mpeg"/>
    <source src="xxx.wav" type="audio/wav"/>
    <source src="xxx.ogg" type="audio/ogg"/>
    什么破浏览器,换一个吧~
</audio>

audio的常用属性

<audio	controls	是否显示播放器控制面板
       	src=""
       	autoplay    是否在加载完毕后自动播放
       	muted		是否静音
       	loop		是否单曲循环
       	preload="预加载模式"></audio>

preload:

  1. none 不预加载
  2. metadata 只预加载元数据
  3. auto 尽可能的加载音频数据

视频标签

简写方式:

<video src=""		 视频文件的链接路径
       controls
       autoplay
       muted
       loop
       width=""      视频播放器的宽度
       height=""  	 视频播放器的高度
       poster=""	 海报帧图片路径
></video>

音视频相关的DOM操作

我们可以通过Javascript获取音视频的DOM对象。

可以通过访问对象的属性,调用对象的方法来访问音视频播放状态,控制音视频的播放。

<audio id="audio" src="./let.mp3"></audio>
<script>
	let audio = document.getElementById('audio')
    audio.duration   属性  返回时长
    audio.play()     方法  播放视频
</script>

查看DOM相关文档:

https://www.w3school.com.cn/tags/html_ref_audio_video_dom.asp

HTML5 Audio/Video 属性
let audio = document.getElementById('audio')
audio.currentTime
audio.duration
属性描述
audioTracks返回表示可用音轨的 AudioTrackList 对象
autoplay设置或返回是否在加载完成后随即播放音频/视频
buffered返回表示音频/视频已缓冲部分的 TimeRanges 对象
controller返回表示音频/视频当前媒体控制器的 MediaController 对象
controls设置或返回音频/视频是否显示控件(比如播放/暂停等)
crossOrigin设置或返回音频/视频的 CORS 设置
currentSrc返回当前音频/视频的 URL
currentTime设置或返回音频/视频中的当前播放位置(以秒计)
defaultMuted设置或返回音频/视频默认是否静音
defaultPlaybackRate设置或返回音频/视频的默认播放速度
duration返回当前音频/视频的长度(以秒计)
ended返回音频/视频的播放是否已结束
error返回表示音频/视频错误状态的 MediaError 对象
loop设置或返回音频/视频是否应在结束时重新播放
mediaGroup设置或返回音频/视频所属的组合(用于连接多个音频/视频元素)
muted设置或返回音频/视频是否静音
networkState返回音频/视频的当前网络状态
paused设置或返回音频/视频是否暂停
playbackRate设置或返回音频/视频播放的速度
played返回表示音频/视频已播放部分的 TimeRanges 对象
preload设置或返回音频/视频是否应该在页面加载后进行加载
readyState返回音频/视频当前的就绪状态
seekable返回表示音频/视频可寻址部分的 TimeRanges 对象
seeking返回用户是否正在音频/视频中进行查找
src设置或返回音频/视频元素的当前来源
startDate返回表示当前时间偏移的 Date 对象
textTracks返回表示可用文本轨道的 TextTrackList 对象
videoTracks返回表示可用视频轨道的 VideoTrackList 对象
volume设置或返回音频/视频的音量
HTML5 Audio/Video 方法
方法描述
play()开始播放音频/视频
pause()暂停当前播放的音频/视频
HTML5 Audio/Video 事件
audio.addEventListener('abort', function (){
    当音频/视频的加载已放弃时执行
})
audio.addEventListener('play', function(){
    
})
audio.addEventListener('pause', function(){
    
})
事件描述
abort当音频/视频的加载已放弃时
canplay当浏览器可以播放音频/视频时
canplaythrough当浏览器可在不因缓冲而停顿的情况下进行播放时
durationchange当音频/视频的时长已更改时
emptied当目前的播放列表为空时
ended当目前的播放列表已结束时
error当在音频/视频加载期间发生错误时
loadeddata当浏览器已加载音频/视频的当前帧时
loadedmetadata当浏览器已加载音频/视频的元数据时
loadstart当浏览器开始查找音频/视频时
pause当音频/视频已暂停时
play当音频/视频已开始或不再暂停时
playing当音频/视频在已因缓冲而暂停或停止后已就绪时
progress当浏览器正在下载音频/视频时
ratechange当音频/视频的播放速度已更改时
seeked当用户已移动/跳跃到音频/视频中的新位置时
seeking当用户开始移动/跳跃到音频/视频中的新位置时
stalled当浏览器尝试获取媒体数据,但数据不可用时
suspend当浏览器刻意不获取媒体数据时
timeupdate当目前的播放位置已更改时
volumechange当音量已更改时
waiting当视频由于需要缓冲下一帧而停止

实现简易音乐播放器

https://neteasecloudmusicapi.vercel.app/#/?id=license

Canvas

canvas意为“画布”。我们可以使用javascript操作画布上的任何一个像素,从而实现在网页中绘制图像。常用于:

  1. 网页特效。
  2. 网页游戏。
  3. 图形图表。

canvas的基本使用

<canvas id="cvs" width="640" height="360"></canvas>

绘制API

let cvs = document.getElementById('cvs')
let ctx = cvs.getContext('2d')    //  获取绘制Canvas所需要的Context对象
ctx.fillStyle = 'red'  // 设置填充颜色
ctx.fillRect()         // 填充矩形

绘制填充

ctx.fillStyle = 'red'  					// 设置填充颜色
ctx.fillRect(x, y, width, height)       // 填充矩形

绘制描边

ctx.strokeStyle = 'blue'				// 设置描边颜色
ctx.strokeRect(x, y, width, height)		// 针对矩形描边

绘制文本

ctx.font = '24px 微软雅黑'				// 设置字体
ctx.fillText('文本内容', x, y)      	// 填充文字
ctx.strokeText('文本内容', x, y)		// 针对文字描边

Canvas路径

什么是路径?

将一些连续的点按照顺序连接起来所形成的图形称为路径。 路径没有颜色,可以通过API对路径进行描边。若想要填充路径,需要先闭合路径。

绘制路径的基本写法

  1. 调用ctx.beginPath()开启一条新路径。
  2. 调用ctx.moveTo(x, y)将画笔移动到某一个坐标点。
  3. 调用ctx的相关方法(例如ctx.lineTo(x, y) )绘制路径。
  4. 路径绘制完毕后,调用stroke()fill()来进行描边或填充。

案例:实现一个画板。

移动端针对网页会触发touch相关事件:

  1. touchstart 当开始触摸目标元素时触发
  2. touchmove 当触摸目标元素并移动时触发
  3. touchcancel 当触摸目标元素被打断时触发
  4. touchend 当触摸结束时触发

如何实现一个画板?

  1. 监听touchstart, 开始触摸canvas时,开启一条新路径。
  2. 监听touchmove,当触摸移动时,获取移动到的坐标位置,绘制路径,描边即可。
绘制路径的其他常用API

绘制矩形路径

ctx.rect(x, y, width, height)   // 仅仅用于绘制透明路径
ctx.stroke()
ctx.fill()

绘制圆弧路径

ctx.beginPath()
// 绘制圆弧  (圆心x, 圆心y, 半径, 起始弧度值, 结束弧度值)
ctx.arc(102, 98, 93, Math.PI*4/3, Math.PI*2)
ctx.lineTo(102, 98)
ctx.fillStyle = 'blue'
ctx.fill()

Canvas动画

动画的本质:每隔很短的一段时间( 30帧/秒 60帧/秒 ),重新绘制界面从而形成动画。

window.setInterval(function(){
    微调UI的属性信息
    重新绘制UI界面
}, 1000/60)

案例:实现视频播放器的弹幕效果。

  1. 修改视频播放器案例,添加发送弹幕、文本框等标签。
  2. Video标签之上盖一层canvas
  3. 当点击发送弹幕时,将弹幕内容写在canvas的右侧。
  4. 实现动画。

动画卡顿的原因:掉帧导致卡顿(不能保证每秒60帧的刷新率)

window.setInterval()天生的缺陷保证不了每秒60帧的刷新率,所以会出现顿顿感。

如果希望实现丝滑的动画,推荐使用window.requestAnimationFrame(callback)方法。

该方法的作用是:请求显示器在刷新下一帧时执行callback。可以借助于这个方法来完成丝滑的动画,基本调用模式如下:

function draw(){
    微调修改ui的属性
    执行耗时操作
    ...
    window.requestAnimationFrame(draw)
}
draw()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给您提供一个HTML5+CSS3编写的示例页面,其中包含了HTML5的主要特性,如百分比布局、页面框架iframe、圆角边框、阴影、动画音视频标签、画布等内容。 以下是示例代码: ``` <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>HTML5+CSS3示例页面</title> <style> /* 页面布局 */ body { margin: 0; padding: 0; font-family: Arial, sans-serif; background-color: #f5f5f5; } .container { width: 90%; margin: 0 auto; } header { background-color: #333; color: #fff; padding: 20px; text-align: center; border-top-left-radius: 10px; border-top-right-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); } nav { background-color: #333; color: #fff; padding: 10px; text-align: center; border-bottom-left-radius: 10px; border-bottom-right-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); } nav ul { margin: 0; padding: 0; list-style-type: none; display: flex; justify-content: center; } nav ul li { margin: 0 10px; } nav ul li a { color: #fff; text-decoration: none; font-size: 18px; transition: color 0.3s ease; } nav ul li a:hover { color: #ff0; } /* 页面内容 */ main { background-color: #fff; padding: 20px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); } h1 { font-size: 36px; margin-bottom: 20px; } p { font-size: 18px; line-height: 1.5; margin-bottom: 10px; } /* 动画效果 */ .animated { animation-duration: 1s; animation-fill-mode: both; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .fadeIn { animation-name: fadeIn; } /* 音视频标签 */ audio, video { display: block; margin: 20px 0; } /* 画布 */ canvas { display: block; margin: 20px 0; border: 1px solid #ccc; } </style> </head> <body> <div class="container"> <header> <h1>HTML5+CSS3示例页面</h1> </header> <nav> <ul> <li><a href="#">首页</a></li> <li><a href="#">产品介绍</a></li> <li><a href="#">服务内容</a></li> <li><a href="#">联系我们</a></li> </ul> </nav> <main class="animated fadeIn"> <h1>欢迎来到HTML5+CSS3示例页面</h1> <p>本页面展示了HTML5的主要特性,包括:</p> <ul> <li>百分比布局</li> <li>页面框架iframe</li> <li>圆角边框和阴影</li> <li>动画效果</li> <li>音视频标签</li> <li>画布</li> </ul> <p>下面是一段示例音频:</p> <audio src="https://www.w3school.com.cn/i/horse.ogg" controls></audio> <p>下面是一段示例视频:</p> <video src="https://www.w3school.com.cn/i/movie.ogg" controls width="480"></video> <p>下面是一个示例画布:</p> <canvas id="myCanvas" width="200" height="200"></canvas> </main> </div> <script> // 画布示例 var canvas = document.getElementById('myCanvas'); var ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.arc(100, 100, 50, 0, 2 * Math.PI); ctx.fillStyle = '#f00'; ctx.fill(); </script> </body> </html> ``` 在这个示例页面中,我们使用了HTML5的各种特性,包括百分比布局、页面框架iframe、圆角边框和阴影、动画效果、音视频标签和画布等。同时,我们也使用了CSS3的一些新特性,如flex布局和过渡动画等。 在实际开发中,您可以根据需要进行修改和扩展,以满足具体的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值