h5 audio JS控制音乐开关

概述

H5页面,需要加入一个音乐,然后要对音乐进行开、关控制。

首先H5加入音乐的话,需要用到H5的audio标签。

然后为了在页面上做音乐开关的控制,替换了默认的音乐播放器的图片,找了一个漂亮的音乐icon替代。

为了音乐播放过程的美观,需要对音乐icon控制,音乐播放的时候,图片旋转,暂定的时候,图片停止旋转。因此用到Jquery的插件:JqueryRotate

H5-audio标签

说明

标签定义声音,比如音乐或者其他音频流。是HTML5的新标签。
由于老的浏览器不兼容。因此可以在audio标签之间,放置需要默认显示的内容
例如:

<audio src="/path/test.mp3">
	您的浏览器不支持audio标签
</audio>
属性
属性 描述
autoplay autoplay 如果出现该属性,则音频在就绪后,马上播放。
controls controls 如果出现该属性,则向用户显示控件,比如播放器按钮等。
loop loop 如果出现该属性,则每当音频结束时都会重新开始播放。
preload preload 如果出现该属性,则音频在页面加载时进行加载,并预备播放。如果使用 "autoplay",则忽略该属性。
src url 要引用的音频文件的路径。
示例
<audio src="test.mp3" loop controls autoplay="autoplay" id="audio">
	您的浏览器不支持audio标签
</audio>

该音频,会在该页面打开的时候,直接播放test.mp3文件,并且显示默认的控件。
最终真实效果:

JS-控制播放

关于JS控制音频文件的事件,目前只整理2个
1. play() 播放
2. pause() 暂停(非停止,再次播放,会连续上次的播放节点)
示例
  1. js示例代码
<script type="text/javascript">
	var audio = document.getElementById("audio");
	audio.play();	//播放
	audio.pause();	//暂停
</script>
  1. jquery示例代码
<script type="text/javascript">
	var audio = $("#audio")[0];
	audio.play();	//播放
	audio.pause();	//暂停
</script>

其他说明:
JS操作获得的是audio对象,因此可以直接操作play、pause
Jquery选择器获取的是jquery对象,0才是对应的audio对象,所以不能直接操作。

JqueryRotate-图片旋转

介绍

JqueryRotate,可以实现旋转效果的jquery插件。支持所有主流浏览器。
可以在其 官网 获取下载资源以及使用案例。

使用示例
<img src="./yinyue.png" alt="" id="img">
<script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.js"></script>
<script src="./jQueryRotate.js"></script>
<script>
	// 直接旋转45度(向右旋转)
	$('#img').rotate(45);
	$('#img').rotate({angle:45});

	// 鼠标事件控制:获取鼠标右转180度,鼠标离开回归原始
	$('#img').rotate({ 
	    bind : {
	        mouseover : function(){
	            $(this).rotate({animateTo: 180});
	        }, mouseout : function(){
	            $(this).rotate({animateTo: 0});
	        }
	    }
	});

	// 不停的旋转
	var angle = 0;
	setInterval(function(){
	    angle +=3;
	    $('#img').rotate(angle);
	}, 15);

	// 间隔旋转,每次旋转都会有停顿
	var rotation = function (){
	    $('#img').rotate({
	        angle: 0, 
	        animateTo: 360, 
	        callback: rotation
	    });
	}
	rotation();

	// 不停旋转,中间没有卡顿
	var rotation2 = function(){
	    $('#img').rotate({
	        angle: 0, 
	        animateTo: 360, 
	        callback: rotation2,
	        easing: function(x,t,b,c,d){
	            return c*(t/d)+b;
	        }
	    });
	}
	rotation2();

	// 点击旋转
	$('#img').rotate({ 
	    bind: {
	        click: function(){
	            $(this).rotate({
	                angle: 0,
	                animateTo: 360,
	                easing: $.easing.easeInOutExpo
	            });
	        }
	    }
	});


</script>
参数说明
参数 类型 默认值 说明
angle 数字 0 旋转一个角度
animateTo 数字 0 从当前的角度,旋转到多少度
step 函数 每个动画步骤中执行的回调函数,当前角度值作为该函数的第一个参数
easing 函数 定义旋转速度、旋转效果,但是需要加载:jQuery.easing.js
duration 整数 旋转持续时间,以毫秒为单位
callback 函数 旋转完成后的回调函数
getRotateAngle 函数 返回旋转对象的当前的旋转角度
stopRotate 函数 停止旋转

演示虽然使用的是图片,但 jqueryrotate 并不只是能运用在图片上,其他元素如 div 等也可以使用。

最终效果

思路
  1. 用audio标签,完成音频文件的引用,设置标签循环播放,不自动播放(让JS控制播放)
  2. 美化:将audio标签设置为隐藏style="display:none;",用其他图片代替,用图片的JS时间,控制播放、暂停
  3. 美化:用jqueryrotate插件美化图片的旋转效果,图片旋转随着音乐的播放和暂停来旋转和不旋转
源码
<img src="yinyue.svg" alt="" class="rotate" id="music_img">
<audio id="media" src="test.mp3" loop="loop"style="display:none">
	您的浏览器不支持audio标签
</audio>

<script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.js"></script>
<script src="jQueryRotate.js"></script>
<script type="text/javascript">
	$(function () {
		if ($("#music_img").length > 0) {
			var Media = $("#media")[0];
			if ($("#music_img").hasClass('rotate')) {
				var angle = 0;
				setInterval(function(){
					angle +=3;
					$('.rotate').rotate(angle);
				}, 15);
				Media.play();
			}
			$("#music_img").on("click", function () {
				if ($(this).hasClass('rotate')) {
					Media.pause();
					$(this).addClass('off').removeClass('rotate');
				} else {
					Media.play();
					$(this).addClass('rotate').removeClass('off');
				}
			});
		}
	});
</script>
最终效果

在静态图片上,显示不出旋转效果,其实图片是旋转的
点击旋转中的图标,图标停止旋转,音乐暂停
点击暂停的图标,图标开始旋转,音乐继续

主要参考:
http://www.tuicool.com/articles/ZfU7ju
http://www.dowebok.com/72.html
http://www.w3school.com.cn/tags/tag_audio.asp