首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

一个js有关问题

2012-09-13 
一个js问题请大牛帮忙写段小代码,功能就跟 fm. baidu .com一样大家可以看一下那效果, 就是 播放过的歌曲会

一个js问题
请大牛帮忙写段小代码, 功能就跟 fm. baidu .com一样 大家可以看一下那效果, 就是 播放过的歌曲会出现在左边, 然后你点击它就可以再播放一次, 播放完后继续下一首, 我就是想要这样的循环功能, 

我自己是这个构架这个逻辑的 下边给个我模拟的图,



右边是列表, 中间是正在播放的, 左边是刚播放过的。 
图帧的解释:
1. 现在 显示 id_1 的内容 左边没有显示
2. 点击 前 ,id_2 到 现在 , id_1显示到左边
3. 点击 后 , id_1退回 现在 , 右边不变
4. 再点击 前 , id_1 到 左边 , id_3到 现在

如果我的解释让您头晕, 那就无视我解释的, 就是要fm .baidu的那效果, 我这还有一段基本符合的代码, 但是循环不对 您也可以直接看一下

HTML code
<!DOCTYPE html><html>    <head>        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />        <title>expl</title><script language="javascript">var nowid=0;var maxid=5;var next;var prev;function fn1(){    nowid++;    if(nowid>maxid){        nowid=1;    }    if(nowid<1){        nowid=maxid;    }    prev=nowid-1;    next=nowid+1;    if(next>maxid){        next=1;    }    if(prev<1){        prev=maxid;    }    document.getElementById('txt').innerHTML=document.getElementById('id_'+nowid).title;    document.getElementById('prev').innerHTML=document.getElementById('id_'+prev).title;    document.getElementById('next').innerHTML=document.getElementById('id_'+next).title;}function fn2(){    nowid--;    if(nowid>maxid){        nowid=1;    }    if(nowid<1){        nowid=maxid;    }    prev=nowid-1;    next=nowid+2;    if(next>maxid){        next=1;    }    if(prev<1){        prev=maxid;    }    document.getElementById('txt').innerHTML=document.getElementById('id_'+nowid).title;    document.getElementById('prev').innerHTML=document.getElementById('id_'+prev).title;    document.getElementById('next').innerHTML=document.getElementById('id_'+next).title;}window.onload=(function(){fn1();});</script>    </head>    <body><div><a title="这是1" id="id_1">这是1</a><br><a title="这是2" id="id_2">这是2</a><br><a title="这是3" id="id_3">这是3</a><br><a title="这是4" id="id_4">这是4</a><br><a title="这是5" id="id_5">这是5</a><br></div><br><br><br><style>.go{padding:5px;border:solid 1px;}</style><span id="prev" class='go'>前</span><span id="txt" class='go'>现</span><span id="next" class='go'>后</span><br><br><input value="后" type='button' onclick='fn2();' /><input value="前" type='button' onclick='fn1();' />    </body></html>


这个代码就是点击 后 再点 前 计算的不对。

麻烦高手帮帮忙, 万分感谢! 因为我现在就差这一个功能了

[解决办法]
HTML code
<!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>expl</title>    </head>    <body><div id="musiclist"style="width:150px;height:auto;float:left;"><a title="这是1" id="id_1">这是1</a><br><a title="这是2" id="id_2">这是2</a><br><a title="这是3" id="id_3">这是3</a><br><a title="这是4" id="id_4">这是4</a><br><a title="这是5" id="id_5">这是5</a><br></div><br><br><br><style>.go{padding:5px;border:solid 1px;}</style>历史列表:<span id="histroy" class='go' style="cursor:pointer;">无历史记录</span>当前播放:<span id="now" class='go'>当前播放</span><br><br><input value="上一首" type='button' id="prev" onclick="play2('prev');" /><input value="下一首" type='button' onclick="play2('next');" /><script type="text/javascript" language="javascript">var count=document.getElementById("musiclist").getElementsByTagName("a").length;var o=document.getElementById("musiclist").getElementsByTagName("a");var nowid=0;var historyid=0;var playstatus;var ajax=0;function listbind(){    for(i=0;i<o.length;i++)    {      o[i].onclick = (function(i){        return function(){           play(i+1,1);        }       })(i);    }    document.getElementById("prev").disabled="disabled";}function play(index,t){    if(t==1){nowid=index}    var musicname=t==1?o[nowid-1].innerHTML:o[index].innerHTML;    if((nowid>1 || historyid>0) && t==1){        historyid=nowid==1?count-1:nowid-2;        historyid=(playstatus=='prev' && historyid==count-1)?0:historyid;        //只有当播放过一首以后才有播放历史        document.getElementById("histroy").innerHTML=o[historyid].innerHTML;        document.getElementById("histroy").onclick=function (){play(historyid,2)}        //只有当播放过一首以后上一首按钮才可操作        document.getElementById("prev").disabled="";    }    if(histroy==count){document.getElementById("histroy").innerHTML="";}    document.getElementById("now").innerHTML=musicname;}function play2(t){   playstatus=t;    switch(t){        case 'next':            if(nowid==count){                if(ajax==1){                    alert('当前是最后一首了,执行你的ajax重新获取列表')                }else{                    play(1,1)                }            }else{                play(parseInt(nowid+1),1);//播放下一首            }            break;        case 'prev':            if(nowid==1){                play(1,1);//当前是第一首时,点上一首则直接重新播放当前            }else{                play(parseInt(nowid-1),1);//播放上一首            }            break;    }}listbind();play(1,1)</script>    </body></html> 


[解决办法]
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>expl</title>
<style type="text/css" >
html,body{ font:normal 13px Arial, Helvetica, sans-serif; color:#333;}
span{ display:inline-block; width:100px; height:34px; line-height:34px; border:1px solid #CCC; text-align:center; background:#F5F5F5;}
</style>
</head>
<body>
<div>
<a title="这是1" id="id_1">这是1</a><br>
<a title="这是2" id="id_2">这是2</a><br>
<a title="这是3" id="id_3">这是3</a><br>
<a title="这是4" id="id_4">这是4</a><br>
<a title="这是5" id="id_5">这是5</a><br>
</div>
<br><br>
<br>
<span id="ptxt" class='go'>前</span>
<span id="ctxt" class='go'>现</span>
<br>
<br>
<input value="后" type='button' id="prev" /><input value="前" type='button' id="next"/>

<script type="text/javascript" >
var prevCache=-1, //prev index cache
index=0, //data index,you may use database.Here we assume that the text in the a tag is we need;
currentIndex=index,
data=document.getElementsByTagName("a"), //assume data
len=data.length;
function $(id){
return document.getElementById(id);
}

function show(cIndex,pIndex){
$("ctxt").innerHTML=data[cIndex].innerHTML;
currentIndex=cIndex;
if(pIndex!==undefined){
$("ptxt").innerHTML=data[pIndex].innerHTML;
}
else{
$("ptxt").innerHTML="&nbsp;";
}
//$("ntxt").innerHTML=data[(currentIndex-1)%len].innerHTML;
}
function prev(){
//index++;
//index%=len;
if(prevCache==-1){
return;
}
show(prevCache);
prevCache=-1;
}
function next(){
prevCache=currentIndex;
index++;
index%=len;
show(index,prevCache);
}

$("prev").onclick=prev;
$("next").onclick=next;
show(index);
</script>
</body>
</html>

热点排行