Flash技巧:談動態滾動文本框制作方法_Flash教程

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

      推薦:Flash技巧:倒播或正播控制
      有網友問到:在FLASH中如何控制電影實例的正播放與倒播放?解決這個問題的方法有多個,前次在論壇上發了兩個,今天有空又做了一個實例。1、先做一個電影動畫元

      再看代碼之前,請先看看下面的說明,這會對理解代碼有很大的幫助:
      http://www.huoshan.org/shiyan/gundongtiao/gundongtiao.htm

      下面是滾動條中所有的代碼:
      //%%%%%%%%%%%%%%%%接口變量%%%%%%%%%%%%//
      //接收父剪輯文本域名字
      var wenben_txt = _parent.wenben_txt;
      //---------滾動初始化---------//
      //此變量是滑塊的初始高度,現在設置為最高,也就占滿上、下按鈕之間的空間
      //此變量將在外部文本載入完成,滾動條高度設定的時候得到應用(第32行)
      var chushigaodu = Math.floor(xia_btn._y-shang_btn._y-shang_btn._height);
      //初始化滑塊Y坐標,并記錄
      var ychushiweizhi = huakuai_mc._y=Math.round(shang_btn._y shang_btn._height);
      //小滑塊不可見,上下按鈕不可用
      huakuai_mc._visible = false;
      shang_btn.enabled = false;
      xia_btn.enabled = false;
      //%%%%%%%%%%%%%%%%滾動代碼%%%%%%%%%%%%%%%%%%//
      //////////為父剪輯的文字域注冊偵聽器,以偵聽在文字域產生變化時,也就是在文本被載入進來時,執行下面的代碼。這樣就不用擔心代碼執行順序問題!
      var zhentingqi = new Object();
      wenben_txt.addListener(zhentingqi);
      //當文字域載入完成時,為什么觸發onScroller事件,而不是onChange事件?
      zhentingqi.onScroller = function() {
      trace("----------------------");
      //在_root中的動態文本框中,顯示總行數和當前行
      _parent.zonghangshu_var = "總行數:" wenben_txt.maxscroll;
      _parent.dangqianhang_var = "當前行:" wenben_txt.scroll;
      //判定滑塊兒是否顯示,并根據文本內容多少定義滑塊高度
      if (wenben_txt.maxscroll != 1) {
      //小滑塊可見,上下按鈕可用
      huakuai_mc._visible = true;
      shang_btn.enabled = true;
      xia_btn.enabled = true;
      //定義一個高度因子,此因子隨加載文本的增多,將無限趨向于1。
      var gaoduyinzi = 1-(wenben_txt.maxscroll-2)/wenben_txt.maxscroll;
      //根據高度因子初始化滑塊的高度
      huakuai_mc._height = Math.floor(chushigaodu*Math.pow(gaoduyinzi, 1/5));
      //記錄外部文本載入完成后,滑塊的高度
      trace("滑塊高=" huakuai_mc._height);
      }
      //滑塊滾動的總象素數
      var zongxiangsu = xia_btn._y-shang_btn._y-shang_btn._height-huakuai_mc._height;
      //定義平均象素,每一行所包含的像素數,即文本域每滾動一行,滑塊需要移動的象素數。
      var pingjunxiangsu = zongxiangsu/(wenben_txt.maxscroll-1);
      //定義平均行數,每一像素包含的行數,即滑塊每移動一象素,文本域在理論上應當滾動的行數(盡管非整數行在視覺上沒有反映)。
      var pingjunhangshu = (wenben_txt.maxscroll-1)/Math.floor(zongxiangsu);
      //記錄“滾動總像素”、“平均像素”和“平均行數”
      trace("滾動總象素=" zongxiangsu);
      trace("平均象素值=" pingjunxiangsu);
      trace("平均行數值=" pingjunhangshu);
      //——————定義上按鈕
      shang_btn.onPress = function() {
      //記錄按下按鈕的時間點
      anxiashijian = getTimer();
      wenben_txt.scroll--;
      // 使滑塊兒移動到相應的位置。
      huakuai_mc._y = ychushiweizhi pingjunxiangsu*(wenben_txt.scroll-1);
      //當按下按鈕一定時間后,自動滾動文本
      onEnterFrame = function () {
      if (getTimer()-anxiashijian>500) {
      wenben_txt.scroll--;
      //使滑塊兒移動到相應的位置。
      //文本框現在的scroll值減1,然后乘以“平均像素”,得到它應該滾動的像素,然后再加上初始位置的Y坐標,就得到現在的應該滾動到的Y坐標
      huakuai_mc._y = ychushiweizhi pingjunxiangsu*(wenben_txt.scroll-1);
      //跟蹤滑塊的Y坐標
      trace("[滑塊Y坐標]=" huakuai_mc._y);
      }
      };
      };
      shang_btn.onRelease = function() {
      delete onEnterFrame;
      delete anxiashijian;
      };
      //——————定義下按鈕(原理與上按鈕一樣)
      xia_btn.onPress = function() {
      anxiashijian = getTimer();
      wenben_txt.scroll ;
      huakuai_mc._y = ychushiweizhi pingjunxiangsu*(wenben_txt.scroll-1);
      onEnterFrame = function () {
      if (getTimer()-anxiashijian>500) {
      wenben_txt.scroll ;
      huakuai_mc._y = ychushiweizhi pingjunxiangsu*(wenben_txt.scroll-1);
      trace("[滑塊Y坐標]=" huakuai_mc._y);
      }
      };
      };
      xia_btn.onRelease = function() {
      delete onEnterFrame;
      delete anxiashijian;
      };
      //——————滑塊MC事件處理,當鼠標按下時
      huakuai_mc.onPress = function() {
      //開始拖動
      this.startDrag(false, this._x, ychushiweizhi, this._x, xia_btn._y-huakuai_mc._height);
      //使文本隨滑塊滾動
      this.onEnterFrame = function() {
      //在滾動過程中即時獲得“滑塊所處位置”
      var xianzaiweizhi = Math.floor(this._y);
      trace("現在位置=" xianzaiweizhi);
      //先求出滑塊現在Y坐標與其在最開始初始化時Y坐標的像素差值,然后用這個差值乘“每一象素所包含的行數”,就可以得到文本現在應該滾動到的行數了
      //這里為什么要加1,可見scroll屬性值應該是取正的,也就是說它會刪除小數部分,而非采用四舍五入制?
      wenben_txt.scroll = (xianzaiweizhi-ychushiweizhi)*pingjunhangshu 1;
      //跟蹤滾動的當前行
      trace("[scroll值]=" Math.floor((xianzaiweizhi-ychushiweizhi)*pingjunhangshu 1));
      //記錄當在滑塊上按鈕下鼠標時,滑塊的初始位置
      trace("初始位置=" ychushiweizhi);
      //跟蹤滑塊的現在位置
      trace("[現在位置]=" xianzaiweizhi);
      };
      };
      //滑塊MC事件處理,鼠標移出或釋放時
      huakuai_mc.onRollOut = huakuai_mc.onMouseUp=function () {
      // “滑塊”停止拖動
      this.stopDrag();
      // 停止文本隨滑塊滾動事件
      delete this.onEnterFrame;
      };
      //——————換用MOUSE對象的onMouseWheel方法結合偵聽器實現滑塊隨鼠標滾球滾動
      mouseListener = new Object();
      Mouse.addListener(mouseListener);
      mouseListener.onMouseWheel = function(delta) {
      delta = 1;
      huakuai_mc._y = ychushiweizhi pingjunxiangsu*(wenben_txt.scroll-1);
      };
      };

      這里是源文件:http://www.huoshan.org/shiyan/gundongtiao/gundongtiao.rar

      小編物語:國際慣例——感謝火山的努力和付出。火山的BLOG可是他自己用FLASH開發的,有點意思哦。不過網頁設計就……恩,看來火山在繼續深入FLASH開發的同時,也有必要提高FLASH設計的修為啊。

      分享:Flash動畫—單擺的制作教程
      想起當初作這個動畫時,真是不知如何下手,所以,這是一篇獻給初學者的教程的單擺動畫的制作,應該要解決兩個方面的問題:一、單擺本身的制作,這一點只要用好

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