用纯AS写了个滚动条
用纯AS写了个滚动条
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:下面是所有的AS代码://%%%%%%%%%%%%MC类自定义方法%%%%%%%%%%%%////——————绘图方法——...

复制代码 代码如下:

下面是所有的AS代码:

//%%%%%%%%%%%%MC类自定义方法%%%%%%%%%%%%//

//——————绘图方法————//

//三角型方法

MovieClip.prototype.sanjiaoxing=function(zuobiao1,zuobiao2,zuobiao3,bangzhi,yanse,toumingdu){

this.lineStyle(bangzhi,yanse,toumingdu);

this.moveTo(zuobiao1.x,zuobiao1.y);

this.lineTo(zuobiao2.x,zuobiao2.y);

this.lineTo(zuobiao3.x,zuobiao3.y);

this.lineTo(zuobiao1.x,zuobiao1.y);

};

//宽高矩形法,根据初始点坐标和宽与高确定矩形。x,y为初始点坐标,kuan和gao为矩形的宽和高。

MovieClip.prototype.changkuanjuxing=function(x,y,kuan,gao,bangzhi,yanse,toumingdu){

this.lineStyle(bangzhi,yanse,toumingdu);

this.moveTo(x,y);

this.lineTo(x+kuan,y);

this.lineTo(x+kuan,y+gao);

this.lineTo(x,y+gao);

this.lineTo(x,y);

};

//中心点矩形法,根据中心点的坐标和宽与高确定矩形。x,y为中心点坐标,kuan,gao为矩形的长和宽。

MovieClip.prototype.zhongxinjuxing=function(x,y,kuan,gao,bangzhi,yanse,toumingdu){

this.lineStyle(bangzhi,yanse,toumingdu);

this.moveTo(x-kuan/2,y+gao/2);

this.lineTo(x+kuan/2,y+gao/2);

this.lineTo(x+kuan/2,y-gao/2);

this.lineTo(x-kuan/2,y-gao/2);

this.lineTo(x-kuan/2,y+gao/2);

};

//————定位方法————//

MovieClip.prototype.dingwei=function(x,y){

this._x=x;

this._y=y;

};

//————上色方法————//

//定义一个获取颜色值,并把它转化成16进制的函数

//获取颜色值的后六位,使此方法可以同时满足“#FFFFFF”和“0xFFFFFF”两种格式的颜色值

functionjinzhizhuanhuan(yansezhi){

varyansezhi=yansezhi.substr(-6,6);

returnparseInt(yansezhi,16);

}

Color.prototype.shangse=function(yansezhi){

this.setRGB(jinzhizhuanhuan(yansezhi));

};

MovieClip.prototype.shangse=function(yansezhi){

varlinshi_color=newColor(this);

linshi_color.shangse(yansezhi);

};

//%%%%%%%%%%%加载XML文档%%%%%%%%%%%%%//

gundongtiao_xml=newXML();

gundongtiao_xml.ignoreWhite=true;

gundongtiao_xml.load("gundongtiao.xml");

gundongtiao_xml.onLoad=function(){

varjiedianlujing_xml=gundongtiao_xml.firstChild.childNodes;

//滚动条背景参数

with(jiedianlujing_xml[0]){

vargundongtiaobeijingse=jinzhizhuanhuan(attributes["背景色"]);

vargundongtiaotoumingdu=attributes["背景透明度"];

vargundongtiaobiankuangse=jinzhizhuanhuan(attributes["边框色"]);

vargundongtiaobiankuangtoumingdou=attributes["边框透明度"];

vargundongtiaobiankuangcuxi=attributes["边框粗细"];

vargundongtiaokuan=attributes["宽"];

}

//方块参数

with(jiedianlujing_xml[1]){

varfangkuaibeijingse=jinzhizhuanhuan(attributes["背景色"]);

varfangkuaitoumingdu=attributes["背景透明度"];

varfangkuaibiankuangse=jinzhizhuanhuan(attributes["边框色"]);

varfangkuaibiankuangtoumingdou=attributes["边框透明度"];

varfangkuaibiankuangcuxi=attributes["边框粗细"];

}

//三角参数

with(jiedianlujing_xml[2]){

varsanjiaoyuanshise=jinzhizhuanhuan(attributes["原始色"]);

varsanjiaohuodongse=jinzhizhuanhuan(attributes["活动色"]);

//记录下原始色和活动色,以备在“上”,“下”按钮中使用

jiluyuanshise=attributes["原始色"];

jiluhuodongse=attributes["活动色"];

varsanjiaotoumingdou=attributes["透明度"];

}

//滑块参数

with(jiedianlujing_xml[3]){

varhuakuaibeijingse=jinzhizhuanhuan(attributes["背景色"]);

varhuakuaitoumingdu=attributes["背景透明度"];

varhuakuaibiankuangse=jinzhizhuanhuan(attributes["边框色"]);

varhuakuaibiankuangtoumingdou=attributes["边框透明度"];

varhuakuaibiankuangcuxi=attributes["边框粗细"];

}

//先根据文本域的高确定滚动条的高

gundongtiaogao=wenben_txt._height;

////////////中心法绘制滚动条背景矩形条

createEmptyMovieClip("gundongtiao_mc",1000);

gundongtiao_mc.beginFill(gundongtiaobeijingse,gundongtiaotoumingdu);

gundongtiao_mc.zhongxinjuxing(0,0,gundongtiaokuan,gundongtiaogao,gundongtiaobiankuangcuxi,gundongtiaobiankuangse,gundongtiaobiankuangtoumingdou);

gundongtiao_mc.endFill();

//根据文本域的位置确定滚动条位置,使其紧贴在文本域的右端

gundongtiao_mc.dingwei(wenben_txt._x+wenben_txt._width+gundongtiao_mc._width/2,wenben_txt._y+wenben_txt._height/2);

/////////中心点矩形法绘制滚动条上下按钮

//////绘制上按钮背景方块

gundongtiao_mc.createEmptyMovieClip("shangfangkuai_mc",1);

gundongtiao_mc.shangfangkuai_mc.beginFill(fangkuaibeijingse,fangkuaitoumingdu);

gundongtiao_mc.shangfangkuai_mc.zhongxinjuxing(0,0,gundongtiao_mc._width,gundongtiao_mc._width,fangkuaibiankuangcuxi,fangkuaibiankuangse,fangkuaitoumingdu);

gundongtiao_mc.shangfangkuai_mc.endFill();

//定位上按钮背景方块

gundongtiao_mc.shangfangkuai_mc.dingwei(0,-gundongtiao_mc._height/2+gundongtiao_mc.shangfangkuai_mc._height/2);

//////绘制上按钮三角形

gundongtiao_mc.createEmptyMovieClip("shangsanjiao_mc",2);

//中心点法绘制三角形

//首先定义一个因子,此因子等于正三角形中心到各顶点的距离,用来定位三角形各顶点的位置。

varyinzi=gundongtiaokuan/3;

varzuobiao1x=-1/2*Math.pow(3,1/2)*yinzi;

varzuobiao1y=1/2*yinzi;

varzuobiao2x=1/2*Math.pow(3,1/2)*yinzi;

varzuobiao2y=1/2*yinzi;

varzuobiao3x=0;

varzuobiao3y=-yinzi;

varzuobiao1={x:zuobiao1x,y:zuobiao1y};

varzuobiao2={x:zuobiao2x,y:zuobiao2y};

varzuobiao3={x:zuobiao3x,y:zuobiao3y};

gundongtiao_mc.shangsanjiao_mc.beginFill(sanjiaoyuanshise,sanjiaotoumingdou);

gundongtiao_mc.shangsanjiao_mc.sanjiaoxing(zuobiao1,zuobiao2,zuobiao3,1,0x000000,0);

gundongtiao_mc.shangsanjiao_mc.endFill();

//定位上三角形

gundongtiao_mc.shangsanjiao_mc.dingwei(0,-gundongtiao_mc._height/2+gundongtiao_mc.shangfangkuai_mc._height/2);

//////复制上按钮背景方块和三角形,并定位于下方

//复制下方块

gundongtiao_mc.shangfangkuai_mc.duplicateMovieClip("xiafangkuai_mc",3);

//定位下按钮背景方块,这里的Y坐标加一,是为了让下方块跟文本框底部对齐!

gundongtiao_mc.xiafangkuai_mc.dingwei(0,Math.floor(gundongtiao_mc._height/2-gundongtiao_mc.xiafangkuai_mc._height/2)+1);

//复制下三角形

gundongtiao_mc.shangsanjiao_mc.duplicateMovieClip("xiasanjiao_mc",4);

//旋转180度

gundongtiao_mc.xiasanjiao_mc._rotation=180;

//定位下三角形

gundongtiao_mc.xiasanjiao_mc.dingwei(0,gundongtiao_mc._height/2-gundongtiao_mc.xiafangkuai_mc._height/2);

///////////绘制滑块

//长宽矩形法绘制滑块矩形

gundongtiao_mc.createEmptyMovieClip("huakuai_mc",5);

gundongtiao_mc.huakuai_mc.beginFill(huakuaibeijingse,huakuaitoumingdu);

gundongtiao_mc.huakuai_mc.changkuanjuxing(-gundongtiao_mc._width/2,0,gundongtiao_mc._width,gundongtiao_mc._width,huakuaibiankuangcuxi,huakuaibiankuangse,huakuaibiankuangtoumingdou);

gundongtiao_mc.huakuai_mc.endFill();

//---------滚动初始化---------//

//滑块的初始高度,并记录

chushigaodu=Math.floor(gundongtiao_mc.xiafangkuai_mc._y-gundongtiao_mc.shangfangkuai_mc._y-gundongtiao_mc.shangfangkuai_mc._height);

//初始化滑块Y坐标,并记录

ychushiweizhi=gundongtiao_mc.huakuai_mc._y=Math.round(gundongtiao_mc.shangfangkuai_mc._y+gundongtiao_mc.shangfangkuai_mc._height/2);

//小滑块不可见

gundongtiao_mc.huakuai_mc._visible=false;

};

//%%%%%%%%%%%%%%%%滚动代码%%%%%%%%%%%%%%%%%%//

//////////为父剪辑的文字域注册侦听器,以侦听在文字域产生变化时,也就是在文本被载入进来时,执行下面的代码。这样就不用担心代码执行顺序问题!

varzhentingqi=newObject();

wenben_txt.addListener(zhentingqi);

//当文字域载入完成时,为什么触发onScroller事件,而不是onChange事件?

zhentingqi.onScroller=function(){

trace("-------------------------");

trace("滚动总行数="+wenben_txt.maxscroll);

trace("当前行="+wenben_txt.scroll);

//判断滑块儿是否显示,并根据文本内容多少定义滑块高度

if(_parent.wenben_txt.maxscroll!=1){

gundongtiao_mc.huakuai_mc._visible=true;

//定义一个高度因子,此因子随加载文本的增多,将无限趋向于1。

vargaoduyinzi=1-(wenben_txt.maxscroll-1.5)/wenben_txt.maxscroll;

//初始化滑块的高度,它的最小高度定义为2象素。

gaodu=gundongtiao_mc.huakuai_mc._height=Math.floor(chushigaodu*Math.pow(gaoduyinzi,1/6));

trace("滑块高="+gaodu);

}

//滑块滚动的总象素数

varzongxiangsu=gundongtiao_mc.xiafangkuai_mc._y-gundongtiao_mc.shangfangkuai_mc._y-gundongtiao_mc.shangfangkuai_mc._height-gundongtiao_mc.huakuai_mc._height;

//定义平均象素,每一行所包含的像素数,即文本域每滚动一行,滑块需要移动的象素数。

varpingjunxiangsu=zongxiangsu/(wenben_txt.maxscroll-1);

//定义平均行数,每一像素包含的行数,即滑块每移动一象素,文本域在理论上应当滚动的行数(尽管非整数行在视觉上没有反映)。

varpingjunhangshu=(wenben_txt.maxscroll-1)/Math.floor(zongxiangsu);

trace("滚动总象素="+zongxiangsu);

trace("平均象素值="+pingjunxiangsu);

///////////定义上按钮

gundongtiao_mc.shangfangkuai_mc.onRollOver=function(){

gundongtiao_mc.shangsanjiao_mc.shangse(jiluhuodongse);

this.onPress=function(){

this.onEnterFrame=function(){

wenben_txt.scroll--;

//使滑块儿移动到相应的位置。

gundongtiao_mc.huakuai_mc._y=ychushiweizhi+pingjunxiangsu*(wenben_txt.scroll-1);

trace("滑块Y坐标="+gundongtiao_mc.huakuai_mc._y);

};

};

this.onRelease=function(){

deletethis.onEnterFrame;

};

this.onRollOut=function(){

gundongtiao_mc.shangsanjiao_mc.shangse(jiluyuanshise);

};

};

////////////定义下按钮

gundongtiao_mc.xiafangkuai_mc.onRollOver=function(){

gundongtiao_mc.xiasanjiao_mc.shangse(jiluhuodongse);

this.onPress=function(){

this.onEnterFrame=function(){

wenben_txt.scroll++;

//使滑块儿移动到相应的位置。

gundongtiao_mc.huakuai_mc._y=ychushiweizhi+pingjunxiangsu*(wenben_txt.scroll-1);

trace("滑块Y坐标="+gundongtiao_mc.huakuai_mc._y);

};

};

this.onRelease=function(){

deletethis.onEnterFrame;

};

this.onRollOut=function(){

gundongtiao_mc.xiasanjiao_mc.shangse(jiluyuanshise);

};

};

///////////换用MOUSE对象的onMouseWheel方法结合侦听器实现滑块随鼠标滚球滚动

mouseListener=newObject();

Mouse.addListener(mouseListener);

mouseListener.onMouseWheel=function(delta){

delta=1;

gundongtiao_mc.huakuai_mc._y=ychushiweizhi+pingjunxiangsu*(wenben_txt.scroll-1);

};

///////////滑块MC事件处理,当鼠标经过或按下时

gundongtiao_mc.huakuai_mc.onPress=function(){

//开始拖动

this.startDrag(false,this._x,ychushiweizhi,this._x,Math.round(gundongtiao_mc.xiafangkuai_mc._y-gundongtiao_mc.xiafangkuai_mc._height/2-gundongtiao_mc.huakuai_mc._height));

//使文本随滑块滚动

this.onEnterFrame=function(){

//在滚动过程中即时获得“滑块所处位置”

varxianzaiweizhi=Math.floor(this._y);

trace("现在位置="+xianzaiweizhi);

//使文本随滚动条滚动,这里为什么要加1,可见scroll属性值应该是取正的,也就是说它会删除小数部分,而非采用四舍五入制?

wenben_txt.scroll=(xianzaiweizhi-ychushiweizhi)*pingjunhangshu+1;

trace("scroll值="+Math.floor((xianzaiweizhi-ychushiweizhi)*pingjunhangshu+1));

trace("初始位置="+ychushiweizhi);

trace("现在位置="+xianzaiweizhi);

};

};

//滑块MC事件处理,鼠标移出或释放时

gundongtiao_mc.huakuai_mc.onRollOut=gundongtiao_mc.huakuai_mc.onRelease=function(){

//“滑块”停止拖动

this.stopDrag();

//停止文本随滑块滚动事件

deletethis.onEnterFrame;

};

};

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Flash教程学习
热门Flash教程学习
网页设计子分类