DOM编程艺术(音频、视频)

28 篇文章 0 订阅
4 篇文章 0 订阅

内容概要:

1、多媒体   <audio>、<video>

2、图形编程<canvas>

1、多媒体

1、基本用法:

	<audio src="music.mp3"></audio>

	<video src="movie.mov" width=320 height=240></video>

2、<audio>兼容用法:

	<audio>
		//	type属性是可选的,可以帮助浏览器解码音频或视频
		<source src="music.mp3" type="audio/mpeg">
		<source src="music.wav" type="audio/x-wav">
		<source src="music.ogg" type="audio/ogg">
	</audio>

3、<video>兼容用法:

	<video>
		<source src="movie.webm" type="video/webm; codecs='vp8, vorbis'">
		<source src="movie.mp4" type="video/mp4; codecs='avc1.42E01E, mp4a.40.2'">
	</video>

4、上面是主流浏览器的音频视频格式写法,下面两个链接是多媒体格式兼容性列表:

------音频

------视频

5、关于如何检测一种音频视频格式在浏览器中是否兼容:

可以用到audio的canPlayType方法:

		var a = new Audio();
		a.canPlayType('audio/nav');

如果浏览器支持的话,返回的就是“maybe”或者“probably”,否则返回“”。

注意:video没有办法用video构造函数生成video对象后像上面audio那样操作,只能通过在HTML中创建video标签后通过js获取标签的DOM对象,然后在调用这个DOM对象的canPlayType方法。

6、HTML属性:

第三个属性与第二个属性相冲突,如果使用了autoplay则preload失效。

7、控制多媒体播放:

方法:

------load()   加载媒体内容

------play()    开始播放

------pause()   暂停播放

属性:

-------playbackRate      播放速度(0-1为慢速播放、1为正常播放、大于1为快速播放)

-------currentTime      播放进度(以s为单位)

-------volume       音量(0-1的浮点数)

-------muted     静音(布尔值)

8、查询多媒体状态:

值为布尔:

------paused   暂停

------seeking    跳转

------ended    播放完成

值为数值:

------duration      媒体时长

------initialTime       媒体开始时间

9、多媒体相关事件

------loadstart          开始请求媒体内容

------loadmetadata      媒体元数据已经加载完成

------canplay        加载了一些内容,可以开始播放

------play     调用play(),或设置了autoplay

------waiting     缓冲数据不够,播放暂停

------playing     正在播放

其他事件:事件列表

10、Web Audio API——更高级的用法

2、图形编程:

1、<canvas>基本用法:

	<canvas id="tutorial" width="300" height="150"></canvas>

上面的宽高值即为默认数据,这里不建议用css来指定宽高,因为css的渲染速度有差异。

2、渲染上下文:

canvas大部分的API都在一个叫做“渲染上下文”的对象里面。

获取“渲染上下文”对象:

		var canvas = document.getElementById('tutorial');
		var ctx = canvas.getContext('2d');
		//在画每一帧图像之前,要设置globalCompositeOperation属性,这个属性可以理解为全局的组合操作
		ctx.globalCompositeOperation = 'destination-over';

globalCompositeOperation取值——

3、基本绘图的步骤:

案例练习:

实现太阳,地球、月亮的旋转;

		//生成三个Image对象
		var sun = new Image();
		var moon = new Image();
		var earth = new Image();
		//对三个对象的src属性进行赋值,并保存在内存中,之后对这三个对象进行操作时就可以直接对内存进行读取,而不是要通过网络进行获取
		function init(){
			sun.src = 'Canvas_sun.png';
			moon.src = 'Canvas_moon.png';
			earth.src = 'Canvas_earth.png';
			//通过requestAnimationFrame定时器实现动画
			window.requestAnimationFrame(draw);
		}

		//具体的每一帧是通过draw函数来进行绘制的
		function draw(){
			var ctx = document.getElementById('canvas').getContext('2d');

			ctx.globalCompositeOperation = 'destination-over';
			ctx.clearRect(0,0,300,300);//clear canvas

			ctx.fillStyle = 'rgba(0,0,0,0.4)';
			ctx.strokeStyle = 'rgba(0,153,255,0.4)';
			ctx.save();//保存画布状态
			ctx.translate(150,150);

			//Earth
			var time = new Date();
			ctx.rotate( ((2*Math.PI)/60)*time.getSeconds() + ((2*Math.PI)/60000)*time.getMilliseconds() );
			ctx.translate(105,0);
			ctx.fillRect(0,-12,50,24);//Shadow
			ctx.drawImage(earth,-12,-12);

			//Moon
			ctx.rotate( ((2*Math.PI)/6)*time.getSeconds() + ((2*Math.PI)/6000)*time.getMilliseconds() );
			ctx.translate(0,28.5);
			ctx.drawImage(moon,-3.5,-3.5);

			ctx.restore();//恢复画布状态

			//画轨道的代码
			ctx.beginPath();
			ctx.arc(150,150,105,0,Math.PI*2,false);//Earth orbit
			ctx.stroke();

			ctx.drawImage(sun,0,0,300,300);

			window.requestAnimationFrame(draw);
		}

		init();


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值