按钮补遗,再说缩放式按钮 |
| 作者:佚名 来源:作者: 陪你去…… 更新:2007-1-13 20:48:13 错误报告 我要投稿 |
好久没来这交流了,总算到了周末[em03][em03],我来了 先看看这东东是什么样子的:
有几个要注意的问题: 1、同一场景中的Mc的onEnterFrame事件并不是同时运行的,他们有一个先后顺序,所以 不能指望每个Mc单独计算自己的位置,如果是那样的话,最终你看到的缩放是你想要的,但是在这个过程中,原本挨着的按钮由于速度的原因变得乱七八糟了,解决的办法很简单 用一个Mc来计算所有MC的位置。 2、另外有一个问题是如果一个按钮由Rollover变成RollOut时,整个按钮尚未恢复到原始 尺寸,又有新的按钮触发了onRollover事件,必然会推动整个按钮朝一个方向运动,解决 的方法:在每一个onRollover事件最起初使所有的按钮都恢复到原始位置。 3、整个按钮隐含了一些特点,整个长度不变!!利用这个特点只要分两种情况: 一:最左边的按钮按下的时候其位置属性是不改变的,在这种情况下其他所有的位置都 要改变!! 二:以最左边为基础计算其他的按钮位置和_width属性,按钮的属性变化分放大的和缩小的,放大对象是鼠标经过的按钮。 呵呵,比较模糊是吧,看看代码了:
/*___________________________________ 先将按钮导入 */ for (var i = 0; i<=5; i++) { a = attachMovie("a", "a"+i, i); b = _root.a.attachMovie("b", "b"+i, (10+i)); b.gotoAndStop(i+1); a.n = i; a._x = 25+100*i; b._x = 50; b._y = -1; a._y = 100; a.old_x = a._x; a.onRollOver = pres; a.onRollOut = rele; } //定义_root.init值,当为1时表示恢复成最初的状态,0时表示放大移动状态 /*..........................................................................*/ _root.init = 1; /*下面是鼠标按下时,产生几个重要信息:_root.pressnumber 按下按钮的名字数字 _root.init = 0;告诉系统现在到了缩放的时候了 */ function pres() { this.gotoAndStop(2);//第二贞是鼠标经过时按钮的画面 for (var i = 0; i<=5; i++) { _root["a"+i]._x = _root["a"+i].old_x; _root["a"+i]._width = 100; } _root.pressnumber = this.n; _root.init = 0; } //...........................................................................鼠标滑出时恢复原始 function rele() { this.gotoAndStop(1); _root.init = 1; } //.............................................用主场景的onEnterFrame统一计算各个按钮尺寸 onEnterFrame = function () { main = _root["a"+pressnumber];//简单化按下的按钮对象 //下面的代码是回复时的情况 if (!init) { main.ax = (200-main._width)/2; main.vx += main.ax; main._width += main.vx; //分几种情况请仔细体会: if (pressnumber == 0) { //如果最左边的按钮按下了,那么它右边的按钮pressnumber+1开始执行回复,他们回复的速度相同,等于原放大按钮回复速度的五分之一 for (var i = pressnumber+1; i<=5; i++) { fol = _root["a"+i]; befor = _root["a"+(i-1)];//用前面的按钮位置来定自己的位置,最终焦点就是最左边的按钮了 fol._width -= (main.vx/5); fol._x = befor._x+befor._width; } } else {//如果按下的按钮不是最左边的,先分大的两种情况,一是按下的按钮,一是其他没按的按钮,其他没按的按钮又分最左边的,与普通的,最左边的_x是不变的,其他的都改变。 for (var i = 0; i<=5; i++) { fol = _root["a"+i]; if (i != pressnumber) { fol._width -= (main.vx/5); if (i != 0) {//这里面是要变位置的MC befor = _root["a"+(i-1)]; fol._x = befor._x+befor._width; } } else { befor = _root["a"+(pressnumber-1)]; main._x = befor._x+befor._width; } } } main.vx *= .6;//弹性系数,可以试试改改 } else { //....................................................下面是按下按钮时的情况 main.ax = (100-main._width)/2; main.vx += main.ax; main._width += main.vx; if (pressnumber == 0) { for (var i = pressnumber+1; i<=5; i++) { fol = _root["a"+i]; befor = _root["a"+(i-1)]; fol._width -= (main.vx/5); fol._x = befor._x+befor._width; } } else { for (var i = 0; i<=5; i++) { fol = _root["a"+i]; if (i != pressnumber) { fol._width -= (main.vx/5); if (i != 0) { befor = _root["a"+(i-1)]; fol._x = befor._x+befor._width; } } else { befor = _root["a"+(pressnumber-1)]; main._x = befor._x+befor._width; } } } main.vx *= .6; } };
源文件下载http://file.flash8.net/2003up/2003/5/17/20035171659266228.rar
|
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |