前一阵子,要给yoho.cn的logo加声音彩蛋,我就重新看了下页面加声音方法,之前也看过比较有趣的一些做法。
再加上文宾提供的yahoo的flash叫声,基本上有两种:
- flash声音加载方式
- embed声音加载方式
先把声音文件导入flash,编译出连续播放的.swf文件。然后在页面里采用如下js代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | //flash的HTML代码 var sound_str='<object width="0" height="0" data="xxx.swf" type="application/x-shockwave-flash"> <param name="id" value="wmsgsound" /> <param name="quality" value="high" /> <param name="loop" value="0" /><param name="src" value="xxx.swf" /> <param name="name" value="wmsgsound" /></object>'; //声音加载方法 function load_sound() { var sound = document.createElement("span"); sound.style.visibility = "hidden"; sound.innerHTML = yodel_str; document.body.appendChild(sound);//把flash的HTML代码插入上面的span内 }; //页面触发 document.getELementById("a").onclick=function() { load_sound(); } |
这种方式,必须使用flash才行,还有注意flash的版本,不然IE的object标签会加载flash失败.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //开始播放 function startWav(uri) { stopWav(); embedEl = document.createElement(”embed”); embedEl.setAttribute(”src”, uri); embedEl.setAttribute(”hidden”, true); embedEl.setAttribute(”autostart”, true); document.body.appendChild(embedEl); } //停止播放 function stopWav() { if (embedEl) document.body.removeChild(embedEl); embedEl = null; } //页面触发 document.getELementById("a").onclick=function() { startWav('a.wav'); } |
这种方式,无需使用flash即可加载音频文件,但是用一个缺点,就是有时间的延迟,有一个加载音频文件的延迟,在
http://softwareas.com/offline-sound-no-flash-no-file 有趣的JavaScript实现的节拍器(没有使用插件)有解决方案,就是把音频文件转成页面的文本编码,但是我试了下,在ie下加载不成功。
所以最后采用flash的方式来做的。
现在点击www.yoho.cn的logo会有叫声了。
评论 (0)





