HTML網頁與FLASH之間的“靜態”傳值_Flash教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:Flash8輕松繪制一個超酷的網站導航
      使用Flash8可以輕松繪制一個超酷的網站導航菜單,這個教程由于步驟比較煩瑣,在這里我只給大家簡單的講解一下,假如你想深入學習,那就自己研究下源文件吧!效

        在論壇上經常看見有新手問到“我想讓FLASH得到URL中的參數ID號,該怎么辦?”“某某視頻網站的FLASH播放器是如何播放不同ID的視頻的?”...諸如此類問題看到了太多,每次都有一堆回帖,眾說紛紜,里面難免有誤導性質的回復。今天特結合自己平時工作中使用的心得對此類問題做一個小小的歸納。

        我所指的靜態傳值是區別于與服務端通信進行值傳遞的方式,例如LoadVars,XML,Remoting之類,后者暫且不在本文的討論范圍內,當你想讓FLASH獲取URL中的參數時,你為何不換個角度想了?其實我們可以讓服務端動態生成SWF的的插入代碼,主動將我們需要的參數“靜態”傳遞給FLASH,FLASH直接用就可以了,根本不需要自己去拿,而以何種形式傳遞給FLASH,就是我所指的靜態傳值。我知道的可行的HTML與FLASH之間的靜態傳值方法有三種:

      SWF地址后使用參數傳遞符“?”
      FlashVars傳遞
      JS控制

        下面來具體介紹下這三種方式的傳遞是如何工作的:

         一、SWF地址后使用參數傳遞符“?”

        我們知道,在ULR地址中使用參數傳遞符“?”可以以GET方式傳遞參數,例如http://www.v-sky.com?uid=12&uname=vsky,這里使用了參數傳遞符“?”,同時使用了連接符“&”做為變量分隔標識,以這種規范的格式來傳遞兩個參數:uid=12和uname=vsky,那么服務端可以使用GET方式獲取這兩個值。

        在FLASH中我們同樣可以采用類似的方式來傳遞參數,HTML頁面中插入SWF文件最常用的就是使用Object標簽和Embed標簽結合的方式,這也是Adobe的推薦方式:

      <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="400" height="300" id="flashvars" align="middle">
      <param name="allowScriptAccess" value="sameDomain" />
      <param name="movie" value="demo.swf?uid=12&uname=vsky" />
      <param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />
      <embed src="demo.swf?uid=12&uname=vsky" quality="high" bgcolor="#ffffff" width="400" height="300" name="flashvars" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
      </object>

      其中粗體部分對應的就是SWF文件的地址,那么我們可以在這個地址后面通過類似于URL中GET方式傳參的方法來個SWF傳遞參數,例如上面代碼在頁面完全加載完畢時,它已經給SWF文件寫入了兩個變量:uid=12和uname=vsky。

         二、FlashVars傳遞

        你可以查閱FLASH幫助文檔來看FlashVars的官方定義。其實在HTML語法中,這是一個被很多新手所忽視的屬性,同樣以上面的參數為例,下面用FlashVars來傳遞變量:

      <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="400" height="300" id="flashvars" align="middle">
      <param name="allowScriptAccess" value="sameDomain" />
      <param name="movie" value="demo.swf" />
      <param name="FlashVars" value="uid=12&uname=vsky" />
      <param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />
      <embed src="demo.swf" FlashVars="uid=12&uname=vsky" quality="high" bgcolor="#ffffff" width="400" height="300" name="flashvars" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
      </object>

      跟方式一相同,它也是直接給FLASH里添加了這兩個變量。但我個人推薦使用此方式,結合SWFObject的使用,使用FlashVars來傳遞變量有很多好處,例如代碼清楚,輕易治理,瀏覽其兼容,符合標準。他們的結合使用在“為FLASH程序構造靈活的接口”一文中我已經做了介紹(PS:隨后我會提供一個復雜點的、有說服力的實際應用來說明這種靈活接口的使用)。

         三、JS控制

        對于客戶端頁面中的資源,JS通過DOM結構來控制它們可以說是隨心所欲的,FLASH也不例外,下面是Flash Player的Javascript方法一覽表:

      Play() —————————————- 播放動畫
      StopPlay()————————————停止動畫
      IsPlaying()———————————– 動畫是否正在播放
      GotoFrame(frame_number)—————- 跳轉到某幀
      TotalFrames()——————————- 獲取動畫總幀數
      CurrentFrame()——————————回傳當前動畫所在幀數-1
      Rewind()————————————-使動畫返回第一幀
      SetZoomRect(left,top,right,buttom)——-放大指定區域
      Zoom(percent)——————————改變動畫大小
      Pan(x_position,y_position,unit)————使動畫在x,y方向上平移
      PercentLoaded()—————————-返回動畫被載入的百分比
      LoadMovie(level_number,path)———– 加載動畫
      TGotoFrame(movie_clip,frame_number)- movie_clip跳轉到指定幀數
      TGotoLabel(movie_clip,label_name)—— movie_clip跳轉到指定標簽
      TCurrentFrame(movie_clip)————— 回傳movie_clip當前幀-1
      TCurrentLabel(movie_clip)—————–回傳movie_clip當前標簽
      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指定標簽上的action
      TGetProperty(movie_clip,property)——–獲取movie_clip的指定屬性
      TSetProperty(movie_clip,property,number)———-設置movie_clip的指定屬性

      在這里我們只需要使用的是粗體標識的SetVariable方法,JS通過調用此方法能夠直接更改SWF中的變量值。首先我們需要定義插入的SWF的ID,例如id為VskyDemo,那么我們可以通過下面的JS語句來完成SWF內部變量的設置: window.document.VskyDemo.SetVariable("uid", 12);

      很簡單吧,就是這樣的。除非是涉及到了HTML中SWF之外元素跟它交互,否則我一般不使用JS來控制SWF里的變量,因為我總覺得怪怪的,呵呵,個人習慣吧。多多實踐,不要覺得這些小東西不起眼,小東西多了,聚結到一起了就是一個大的應用。條條大路通北京,選擇你自己喜歡的,自己認為便捷的方式就可以了,目前我是沒有發現這三個方式存在功能上的缺陷。

      歡迎大家加入討論,如承蒙轉載,請注明出處:http://www.v-sky.com/blog/index.php/archives/179

      分享:Flash制作動漫中常用的眨眼效果動畫
      今天看一個很早以前的flash留言板,上面也有個眨眼效果.分析方法的確很簡單,總結了一下,發上來,這種效果在動漫上經常看到,簡單實用,廢話不多了,看教程吧.

      /所屬分類:Flash教程/更新時間:2008-03-05
      相關Flash教程