★在看代码之前,请先看看下面的说明,这会对理解代码有很大的帮助:
[url=http://www.huoshan.org/shiyan/gundongtiao/gundongtiao.htm]
[color="#333366"]http://www.huoshan.org/shiyan/gundongtiao/gundongtiao.htm[/color]
[/url]
★下面是滚动条中所有的代码:
//%%%%%%%%%%%%%%%%接口变量%%%%%%%%%%%%//
//接收父剪辑文本域名字
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);
//定义平均行数,每一像素包含的行数,即滑块每移动一象素,文本域在理论上应当滚动的行数(尽管非整数行在视觉上没有反映)。
★这个滚动条是我在没有参考任何其它滚动条代码,也没看过滚动条标准算法的情况下,按着自己的想象,完全独立制作完成的,所以算法可能有点奇怪,而且存在一个小BUG,就是在极少数情况下,拖动滑块到到最下方,文本域却只能显示倒数第二行,最后一行只能通过点击下按钮来显示,比如,请在上面那个示例的输入文本域中输入文本至总行数为197行,你就会发现拖动滑块无法显示最后一行。对于这个BUG,我一直很困惑,希望高手能多多指教!这也是我发这篇帖子的最重要原因!
请用FLASH8打开。
math.pow(a,b);就是计算a的b次方。所以,如果b是分数,就是开a的b次方了。比如math.pow(4,1/2);就是4开平方,得到2。
下面解释一下楼上问到的两段代码:
本文转自:http://www.5uflash.com/flashjiaocheng/Flashyingyongkaifa/1089.html
[url=http://www.huoshan.org/shiyan/gundongtiao/gundongtiao.htm]
[color="#333366"]http://www.huoshan.org/shiyan/gundongtiao/gundongtiao.htm[/color]
[/url]
★下面是滚动条中所有的代码:
//%%%%%%%%%%%%%%%%接口变量%%%%%%%%%%%%//
//接收父剪辑文本域名字
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);
//定义平均行数,每一像素包含的行数,即滑块每移动一象素,文本域在理论上应当滚动的行数(尽管非整数行在视觉上没有反映)。
★这个滚动条是我在没有参考任何其它滚动条代码,也没看过滚动条标准算法的情况下,按着自己的想象,完全独立制作完成的,所以算法可能有点奇怪,而且存在一个小BUG,就是在极少数情况下,拖动滑块到到最下方,文本域却只能显示倒数第二行,最后一行只能通过点击下按钮来显示,比如,请在上面那个示例的输入文本域中输入文本至总行数为197行,你就会发现拖动滑块无法显示最后一行。对于这个BUG,我一直很困惑,希望高手能多多指教!这也是我发这篇帖子的最重要原因!
请用FLASH8打开。
math.pow(a,b);就是计算a的b次方。所以,如果b是分数,就是开a的b次方了。比如math.pow(4,1/2);就是4开平方,得到2。
下面解释一下楼上问到的两段代码:
本文转自:http://www.5uflash.com/flashjiaocheng/Flashyingyongkaifa/1089.html
Flash滚动条代码解析
4万+

被折叠的 条评论
为什么被折叠?



