JS模擬酷狗音樂(lè)播放器收縮折疊關(guān)閉效果代碼
本文實(shí)例講述了JS模擬酷狗音樂(lè)播放器收縮折疊關(guān)閉效果代碼。分享給大家供大家參考,具體如下:
這是一款模擬酷狗音樂(lè)播放器的關(guān)閉特效,采用JavaScript實(shí)現(xiàn),關(guān)閉的時(shí)候播放界面縮成一條線,然后消失,就像有些電視機(jī)突然停電的效果,很有意思的網(wǎng)頁(yè)動(dòng)畫(huà)特效。
運(yùn)行效果截圖如下:

在線演示地址如下:
http://demo.jb51.net/js/2015/js-kugou-music-player-style-demo/
具體代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>酷狗音樂(lè)播放器的關(guān)閉特效,采用JavaScript實(shí)現(xiàn)</title>
<style type="text/css">
* {
padding:0px;
margin:0px;
}
#outer {
width:952px;
height: 640px;
position:absolute;
left:100px;
top:20px; }
#div1 {
width:952px;
height: 640px;
overflow:hidden;
position:absolute;font-size:0px;
}
#div1 a {
position:absolute;
width:23px;
height:21px;
right:5px;
top:5px;
display:block; z-index:100; background:url(images/kugou.jpg) no-repeat 957px 645px;}
#div1 a:hover {
background:url(images/hover.jpg) no-repeat right top;
}
#line {
height:3px;
width:952px;
display:none;
z-index:100;
position:absolute;
left:0px;
top:0px; font-size:0px;
}
#light{ /*width:50px; height:10px;*/ position:absolute; left:50%; top:50%;/* margin-left:-25px; margin-top:-5px;*/ width:0px; height:0px; filter:alpha(opacity:0);opacity:0;); overflow:hidden;}
</style>
<script type="text/javascript">
function css(obj, attr, value)
{
if(arguments.length==2)
{
if(attr!='opacity')
{
return parseInt(obj.currentStyle?obj.currentStyle[attr]:document.defaultView.getComputedStyle(obj, false)[attr]);
}
else
{
return Math.round(100*parseFloat(obj.currentStyle?obj.currentStyle[attr]:document.defaultView.getComputedStyle(obj, false)[attr]));
}
}
else if(arguments.length==3)
switch(attr)
{
case 'width':
case 'height':
case 'paddingLeft':
case 'paddingTop':
case 'paddingRight':
case 'paddingBottom':
value=Math.max(value,0);
case 'left':
case 'top':
case 'marginLeft':
case 'marginTop':
case 'marginRight':
case 'marginBottom':
obj.style[attr]=value+'px';
break;
case 'opacity':
obj.style.filter="alpha(opacity:"+value+")";
obj.style.opacity=value/100;
break;
default:
obj.style[attr]=value;
}
return function (attr_in, value_in){css(obj, attr_in, value_in)};
}
var MIAOV_MOVE_TYPE={
BUFFER: 1,
FLEX: 2
};//json
function miaovStopMove(obj)
{
clearInterval(obj.timer);
}
function miaovStartMove(obj, oTarget,iSpeedCtrol, iType, fnCallBack, fnDuring)
{
var fnMove=null;
if(obj.timer)
{
clearInterval(obj.timer);
}
switch(iType)
{
case MIAOV_MOVE_TYPE.BUFFER:
fnMove=miaovDoMoveBuffer;
break;
case MIAOV_MOVE_TYPE.FLEX:
fnMove=miaovDoMoveFlex;
break;
}
obj.timer=setInterval(function (){
fnMove(obj, oTarget,iSpeedCtrol, fnCallBack, fnDuring);
}, 30);
}
function miaovDoMoveBuffer(obj, oTarget,iSpeedCtrol, fnCallBack, fnDuring)
{
var bStop=true;
var attr='';
var speed=0;
var cur=0;
for(attr in oTarget)
{
cur=css(obj, attr);
if(oTarget[attr]!=cur)
{
bStop=false;
speed=(oTarget[attr]-cur)/iSpeedCtrol;
speed=speed>0?Math.ceil(speed):Math.floor(speed);
css(obj, attr, cur+speed);
}
}
if(fnDuring)fnDuring.call(obj);
if(bStop)
{
clearInterval(obj.timer);
obj.timer=null;
if(fnCallBack)fnCallBack.call(obj);
}
}
function miaovDoMoveFlex(obj, oTarget,iSpeedCtrol, fnCallBack, fnDuring)
{
var bStop=true;
var attr='';
var speed=0;
var cur=0;
for(attr in oTarget)
{
if(!obj.oSpeed)obj.oSpeed={};
if(!obj.oSpeed[attr])obj.oSpeed[attr]=0;
cur=css(obj, attr);
if(Math.abs(oTarget[attr]-cur)>=1 || Math.abs(obj.oSpeed[attr])>=1)
{
bStop=false;
obj.oSpeed[attr]+=(oTarget[attr]-cur)/iSpeedCtrol;
obj.oSpeed[attr]*=0.7;
css(obj, attr, cur+obj.oSpeed[attr]);
}
}
if(fnDuring)fnDuring.call(obj);
if(bStop)
{
clearInterval(obj.timer);
obj.timer=null;
if(fnCallBack)fnCallBack.call(obj);
}
}
</script>
<script type="text/javascript">
window.onload=function(){
var oDiv1 = document.getElementById('div1');
var oAbtn = oDiv1.getElementsByTagName('a')[0];
var oImg1 = document.getElementById('img1');
var oImg2 = document.getElementById('img2');
var oImg3 = document.getElementById('img3');
var oLine = document.getElementById('line');
var oLight = document.getElementById('light');
oAbtn.onclick=function(){
miaovStartMove(oDiv1, {height:3,marginTop:315},1.5, MIAOV_MOVE_TYPE.BUFFER,function(){
oImg1.style.display='none';
oLine.style.display='block';
miaovStartMove(oDiv1, {width:0,marginLeft:476},2, MIAOV_MOVE_TYPE.BUFFER);
miaovStartMove(oLine, {width:0},2, MIAOV_MOVE_TYPE.BUFFER);
miaovStartMove(oImg2, {width:0},2, MIAOV_MOVE_TYPE.BUFFER,function(){
miaovStartMove(oImg3, {width:200,height:10},1, MIAOV_MOVE_TYPE.BUFFER);
miaovStartMove(oLight, {width:200,height:10,marginLeft:-100,marginTop:-5,opacity:100},1, MIAOV_MOVE_TYPE.BUFFER,function(){
miaovStartMove(oLight, {opacity:0},1, MIAOV_MOVE_TYPE.BUFFER);
});
});
});
}
}
</script>
</head>
<body>
<div id="outer">
<div id="light"><img id="img3" src="images/line1.png" style="width:0px; height:0px;"/></div>
<div id="div1">
<img id="img1" src="images/kugou.jpg" style="height:640px; width:952px; z-index:-3;"/>
<a href="#"></a>
<div id="line">
<img id="img2" src="images/line.png" style=" width:952px; height:3px;" />
</div>
</div>
</div>
</body>
</html>
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- Vue.js實(shí)現(xiàn)音樂(lè)播放器
- 原生JS實(shí)現(xiàn)音樂(lè)播放器
- js+audio實(shí)現(xiàn)音樂(lè)播放器
- js實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放器
- JavaScript實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放器
- 原生JS實(shí)現(xiàn)小小的音樂(lè)播放器
- JS+html5制作簡(jiǎn)單音樂(lè)播放器
- 運(yùn)用js教你輕松制作html音樂(lè)播放器
- js實(shí)現(xiàn)可兼容IE、FF、Chrome、Opera及Safari的音樂(lè)播放器
- js實(shí)現(xiàn)網(wǎng)頁(yè)音樂(lè)播放器
相關(guān)文章
javascript 控制input只允許輸入的各種指定內(nèi)容
這篇文章主要介紹了通過(guò)javascript控制input只允許輸入的各種指定內(nèi)容,需要的朋友可以參考下2014-06-06
JS優(yōu)雅的使用function實(shí)現(xiàn)一個(gè)class
這篇文章主要為大家介紹了JS優(yōu)雅的使用function實(shí)現(xiàn)一個(gè)class示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
詳解Javascript動(dòng)態(tài)操作CSS
本文我們會(huì)討論如何通過(guò) JavaScript 在運(yùn)行時(shí)操作 CSS,從而動(dòng)態(tài)地更新應(yīng)用到我們的元素上的式樣。本文所用的技術(shù)是我們已經(jīng)看到過(guò)的,但在利用 CSS DOM 來(lái)進(jìn)行操作的時(shí)候還需要注意幾個(gè)特殊點(diǎn)。2014-12-12
每天一篇javascript學(xué)習(xí)小結(jié)(屬性定義方法)
這篇文章主要介紹了javascript中的屬性定義方法知識(shí)點(diǎn),對(duì)屬性定義方法的基本使用方法,以及各種方法進(jìn)行整理,感興趣的小伙伴們可以參考一下2015-11-11
用JavaScript事件串連執(zhí)行多個(gè)處理過(guò)程的方法
用JavaScript事件串連執(zhí)行多個(gè)處理過(guò)程的方法...2007-03-03
微信小程序中上傳圖片并進(jìn)行壓縮的實(shí)現(xiàn)代碼
這篇文章主要介紹了微信小程序中上傳圖片并進(jìn)行壓縮的實(shí)現(xiàn)代碼,文中提到了上傳圖片并進(jìn)行壓縮的屬性值,需要的朋友可以參考下2018-08-08
分享10個(gè)優(yōu)化代碼的CSS和JavaScript工具
如果你想在保持文件的時(shí)候或執(zhí) 行的階段lint代碼,那么linting工具也可以如你所愿。這取決于個(gè)人的選擇。如果你正在找尋用于CSS和JavaScript最好的 linting工具,那么請(qǐng)繼續(xù)閱讀2016-05-05

