在閃吧看到了這個(gè)flash播放器,想下載其源碼下來研究已供自己使用,沒想到閃吧已做禁止下載功能。費(fèi)了幾天的網(wǎng)上搜索,除了幾篇相關(guān)資料外,沒有源碼下載,更沒有實(shí)例講解。受不住誘惑,只好自己參考資料親手寫了。這個(gè)flash影片播放控制器時(shí)用了閃吧的播放界面,程序代碼完全親手寫上。
<script defer>
var movie=document.getElementById("movie");
loadSWF("http://down.wren.cn/flash/navigation_68.swf","600","400"); //loadSWF("flash地址","寬度","高度")
</script>
下面看看我寫的驅(qū)動(dòng)程序代碼,保存為play.js:
var total;//定義flash影片總楨數(shù)
var frame_number;//定義flash影片當(dāng)前楨數(shù)
//以下是滾動(dòng)條圖片拖動(dòng)程序
var dragapproved=false;
var z,x,y
//移動(dòng)函數(shù)
function move(){
if (event.button==1&&dragapproved){
y=temp1+event.clientX-x;
//以下是控制移動(dòng)的范圍
if(y<0)
y=0;
if(y>420)
y=420;
z.style.pixelLeft=y
movie.GotoFrame(y/420*total);//移動(dòng)到某一位置,flash影片播放到某個(gè)位置
return false
}
}
//獲得拖動(dòng)前初始數(shù)據(jù)的函數(shù)
function drags(){
if (!document.all)
return
if (event.srcElement.className=="drag"){
dragapproved=true
z=event.srcElement
temp1=z.style.pixelLeft
x=event.clientX
document.onmousemove=move
}
}
//動(dòng)態(tài)顯示播放影片的當(dāng)前楨/總楨數(shù)
function showcount(){
frame_number=movie.CurrentFrame();
frame_number++;
frameCount.innerText=frame_number+"/"+movie.TotalFrames;
element.style.pixelLeft=420*(frame_number/movie.TotalFrames);//滾動(dòng)條圖片隨之到相應(yīng)的位置
if(frame_number==movie.TotalFrames)
clearTimeout(tn_ID);
else
var tn_ID=setTimeout(''''''''showcount();'''''''',1000);
}
//使影片返回第一幀
function Rewind(){
if(movie.IsPlaying()){
Pause();
}
movie.Rewind();
element.style.pixelLeft=0;
frameCount.innerText="1/"+total;
}
//播放影片
function Play(){
movie.Play();
showcount();
}
//暫停播放
function Pause(){
movie.StopPlay();
}
//跳至最末幀
function GoToEnd(){
if(movie.IsPlaying())
Pause();
movie.GotoFrame(total);
element.style.pixelLeft=420;
frameCount.innerText=total+"/"+total;
}
//快退影片
function Back()
{
if(movie.IsPlaying())
Pause();
frame_number=frame_number-50;
movie.GotoFrame(frame_number);
Play();
}
//快進(jìn)影片
function Forward()
{
if(movie.IsPlaying())
Pause();
frame_number=frame_number+50;
movie.GotoFrame(frame_number);
Play();
}
//重新播放影片
function Replay(){
if(movie.IsPlaying()){
Pause();
movie.Rewind();
Play();
}
else
{
movie.Rewind();
Play();
}
}
//停止播放影片返回到第一楨
function Stop(){
if(movie.IsPlaying()){
Pause();
movie.Rewind();
}
else
{
movie.Rewind();
}
}
//顯示影片載入進(jìn)度,完全載入后控制按鈕可用
function jindu(){
var in_ID;
bar.style.width=Math.round(movie.PercentLoaded())+"%";
frameCount.innerText=Math.round(movie.PercentLoaded())+"%";
if(movie.PercentLoaded() == 100){
ctlButtons.document.all.tags(''''''''IMG'''''''')[0].disabled=false;
ctlButtons.document.all.tags(''''''''IMG'''''''')[1].disabled=false;
ctlButtons.document.all.tags(''''''''IMG'''''''')[2].disabled=false;
ctlButtons.document.all.tags(''''''''IMG'''''''')[3].disabled=false;
ctlButtons.document.all.tags(''''''''IMG'''''''')[4].disabled=false;
ctlButtons.document.all.tags(''''''''IMG'''''''')[5].disabled=false;
ctlButtons.document.all.tags(''''''''IMG'''''''')[6].disabled=false;
ctlButtons.document.all.tags(''''''''IMG'''''''')[7].disabled=false;
ctlButtons.document.all.tags(''''''''IMG'''''''')[8].disabled=false;
total=movie.TotalFrames;
frame_number++;
frameCount.innerText=frame_number+"/"+total;
bar.style.background="";
//bar.style.width="0%"
bar.innerHTML=''''''''<img src="images/button/posbar1.gif" style="cursor:hand;border:0;" id="element" class="drag" OnMouseOver="fnOnMouseOver()" OnMouseOut="fnOnMouseOut()">'''''''';
document.onmousedown=drags
document.onmouseup=new Function("dragapproved=false;Play()")
showcount();
clearTimeout(in_ID);
}
else
in_ID=setTimeout("jindu();",1000);
}
//開始載入flash影片,載入過程中,播放控制按鈕不可用
function loadSWF(fsrc,fwidth,fheight){
movie.LoadMovie(0, fsrc);
movie.width=fwidth;
movie.height=fheight;
ctlButtons.document.all.tags(''''''''IMG'''''''')[0].disabled=true;
ctlButtons.document.all.tags(''''''''IMG'''''''')[1].disabled=true;
ctlButtons.document.all.tags(''''''''IMG'''''''')[2].disabled=true;
ctlButtons.document.all.tags(''''''''IMG'''''''')[3].disabled=true;
ctlButtons.document.all.tags(''''''''IMG'''''''')[4].disabled=true;
ctlButtons.document.all.tags(''''''''IMG'''''''')[5].disabled=true;
ctlButtons.document.all.tags(''''''''IMG'''''''')[6].disabled=true;
ctlButtons.document.all.tags(''''''''IMG'''''''')[7].disabled=true;
ctlButtons.document.all.tags(''''''''IMG'''''''')[8].disabled=true;
frame_number=movie.CurrentFrame();
jindu();
}
//顯示層函數(shù)
function showMenu(menu){
menu.style.display=''''''''block'''''''';
}
//鼠標(biāo)點(diǎn)擊滾動(dòng)條上的位置,影片相應(yīng)播放到那個(gè)位置
function Jump(fnume){
if(movie.IsPlaying()){
Pause();
movie.GotoFrame(fnume);
Play();
}
else
{
movie.GotoFrame(fnume);
Play();
}
}
//以下兩個(gè)函數(shù)是圖片切換函數(shù)
function fnOnMouseOver(){
element.src = "images/button/posbar.gif";
}
function fnOnMouseOut(){
element.src = "images/button/posbar1.gif";
}
以上代碼,我們仔細(xì)研究后會(huì)發(fā)現(xiàn)其實(shí)很簡單,不過卻費(fèi)了我很大精力。歡迎大家繼續(xù)在此基礎(chǔ)上改進(jìn),增添新的功能。
附
可控制Flash Player的Javascript方法。
一覽表:
Play() ---------------------------------------- 播放動(dòng)畫
StopPlay()------------------------------------停止動(dòng)畫
IsPlaying()----------------------------------- 動(dòng)畫是否正在播放
GotoFrame(frame_number)---------------- 跳轉(zhuǎn)到某幀
TotalFrames()------------------------------- 獲取動(dòng)畫總幀數(shù)
CurrentFrame()------------------------------回傳當(dāng)前動(dòng)畫所在幀數(shù)-1
Rewind()-------------------------------------使動(dòng)畫返回第一幀
SetZoomRect(left,top,right,buttom)-------放大指定區(qū)域
Zoom(percent)------------------------------改變動(dòng)畫大小
Pan(x_position,y_position,unit)------------使動(dòng)畫在x,y方向上平移
PercentLoaded()----------------------------返回動(dòng)畫被載入的百分比
LoadMovie(level_number,path)----------- 加載動(dòng)畫
TGotoFrame(movie_clip,frame_number)- movie_clip跳轉(zhuǎn)到指定幀數(shù)
TGotoLabel(movie_clip,label_name)------ movie_clip跳轉(zhuǎn)到指定標(biāo)簽
TCurrentFrame(movie_clip)--------------- 回傳movie_clip當(dāng)前幀-1
TCurrentLabel(movie_clip)-----------------回傳movie_clip當(dāng)前標(biāo)簽
TPlay(movie_clip)---------------------------播放movie_clip
TStopPlay(movie_clip)----------------------停止movie_clip的播放
GetVariable(variable_name)-----------------獲取變量
SetVariable(variable_name,value)-----------變量賦值
TCallFrame(movie_clip,frame_number)---call指定幀上的action
TCallLabel(movie_clip,label)----------------call指定標(biāo)簽上的action
TGetProperty(movie_clip,property)--------獲取movie_clip的指定屬性
TSetProperty(movie_clip,property,number)-設(shè)置movie_clip的指定屬性
以上代碼,我們仔細(xì)研究后會(huì)發(fā)現(xiàn)其實(shí)很簡單,不過卻費(fèi)了我很大精力。歡迎大家繼續(xù)在此基礎(chǔ)上改進(jìn),增添新的功能。