Flash技巧:談動態滾動文本框制作方法_Flash教程
推薦: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教程-Flash技巧:談動態滾動文本框制作方法。