- 注册时间
- 2013-2-20
- 最后登录
- 2020-1-26
- 阅读权限
- 45
- 积分
- 1866
- 精华
- 1
- 帖子
- 181
|
要实现这个效果,首先想到的就是要用LTweenLite,的确如此,不过LTweenLite只能更改属性,而LSound继承自LMedia时,没有关于音量方面的属性,继承自LWebAudio时,虽然有volume,但是设置这个属性后,不会影响播放的音量,说通俗点就是只读属性。不过别着急,lufylegend中自然有设定音量的功能,只不过是个函数,不是个属性,这个函数就是setVolume,传给函数的参数就是需要音量的值,属于[0, 1]。
接下来,先上代码:- var fo = {
- times : 1
- };
- LTweenLite.to(fo, 1, {
- times : 0,
- onUpdate : function () {
- var toV = parseFloat(fo.times)
- if (toV < 0) {
- toV = 0;
- }
- sound.setVolume(toV);
- },
- onComplete : function () {
- sound.close();
- sound.setVolume(1);
- }
- });
复制代码 既然LTweenLite不能直接更改音量,那我们可以用一个假对象来保存音量,然后在onUpdate里调用setVolume来把音量设定为假对象保存的音量。随着假对象中的音量改变,sound的音量就会跟着改变了。如上代码所示,fo就是传说中的假对象,times就是其中保存的音量,sound就是真正的音频对象。值得注意的是,在onUpdate里,我们还需要判断假对象的音量是否低于0,如果低于0且你直接把这个值传给setVolume,那控制台会报错的,毕竟音量的取值范围是[0, 1]
此方法虽然实现了这个效果,但是感觉不太优雅,所以希望lufylegend为LSound加一个函数,直接实现让音乐逐渐消失效果。
|
|