| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 用户登录
按钮的小技巧
MC里的按钮转换场
6种常用的一个按钮
Flash中如何通过按
关于Mediaplaybac
Flash中一个按钮控
让某一区域的按钮
浅谈应用按钮事件
音乐按钮系列教程
用主场中的按钮控

按钮补遗,再说缩放式按钮           

按钮补遗,再说缩放式按钮

作者:佚名 来源:作者: 陪你去…… 更新: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 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。