`

很不错的flex果冻特效 转

    博客分类:
  • flex
阅读更多

index.mxml

 

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
     xmlns:local="*">
 <mx:Script>
  <![CDATA[

      private function onClick(e:MouseEvent):void{
           window.show();
      }
  ]]>
 </mx:Script>
 <local:JellyWindow width="400" height="500" horizontalCenter="0" id="window"
  backgroundColor="#ffff00" vibrationCount="30" delayNumber="0" visible="false"/>
 <mx:Button x="157" y="244" label="show" width="91" height="33" click="onClick(event)" fontSize="14"/>
</mx:Application>

 

JellyWindow .as

 

package
{
 import com.adobe.ac.mxeffects.Distortion;
 import com.adobe.ac.mxeffects.DistortionConstants;
 
 import flash.events.TimerEvent;
 import flash.geom.Point;
 import flash.utils.Timer;
 
 import mx.containers.Canvas;

  public class JellyWindow extends Canvas
 {
   private const InitPoint:Point = new Point(100,100);
 
   public function JellyWindow()
  {
   super();
  
   distortionTimeer = new Timer(delayNumber, vibrationCount);
   distortionTimeer.addEventListener(TimerEvent.TIMER, timerHandler);
  
   pointsSpecimen = [
    50,55.251048395021485,67.86320984930961,83.2024901610665,97.44865698524941,
    108.11123531529728,114.13278592010593,115.6794726556897,113.7514225333381,
    109.74227285271256,105.04958100112648,100.79808814176877,97.69749345012417,
    96.023554262826,95.69027018664536,96.37235141377161,97.63915519115437,
    99.07033390929932,100.33572339218681,101.2341473366892,101.69546822829375,
    101.75619974227371,101.52120076364723,101.12306421982154,100.68788141853504,
    100.312273569012,100.05293362397794,99.9270920221492,99.92062845073377,100
   ];
  
   for(var j : int=0;j<pointsSpecimen.length; j++)
   {
    pointsSpecimen[j] -= (pointsSpecimen[j] - 100)
     * ( (pointsSpecimen[j] > 100) ? 0.85 : 0.7 );
   }
  }
 
  private var distortion: Distortion;
  private var currentPoint : Number = 0;
 
  private var pointsSpecimen:Array;
  private var pointsArray : Array;
  private var distortionTimeer : Timer;
  private var dyncDelayNumber : Number = delayNumber;
 
  /**
   * 窗口振动次数
   */
  public var vibrationCount : Number = 15;
 
  /**
   * 振动间隔
   */
  public var delayNumber : Number = 55;
 
 
    private function timerHandler(evt : TimerEvent) : void
  {
   currentPoint++;
   dyncDelayNumber = dyncDelayNumber + 0.5;
  
   var leftTopPoint : Point = new Point(pointsArray[0][currentPoint], pointsArray[0][currentPoint]);
   var rightTopPoint : Point = new Point(pointsArray[1][currentPoint], pointsArray[1][currentPoint]);
   var rightBottomPoint : Point = new Point(pointsArray[2][currentPoint], pointsArray[2][currentPoint]);
   var leftBottomPoint : Point = new Point(pointsArray[3][currentPoint], pointsArray[3][currentPoint]);
  
   distortion.renderCorners(leftTopPoint, rightTopPoint, rightBottomPoint, leftBottomPoint);
  
   if (currentPoint >= vibrationCount) {
    reset();
   }
  }
 
   private function reset():void {
   if (distortion != null) {
    distortion.destroy();
    distortion = null;
   }
  
   dyncDelayNumber = delayNumber;
   distortionTimeer.repeatCount = vibrationCount;
   currentPoint = 0;
   distortionTimeer.reset();
  }
 
    private function generatePointsArray(): void {

   var tempPointsArr:Array = new Array(4);
   var n1:Number;
   var n2:Number;
   var n3:Number;
   var n4:Number;

   pointsArray = new Array();

   var pointNum : Number = pointNum = 0;

   while (pointNum++ < 5) {
   
    tempPointsArr = [];

    n1 = Math.random() * 0.70 + 0.80;
    n2 = 0;

    while (n2++ <= vibrationCount) {
    
     n4 = Math.round(n2 * n1);
    
     if (n4 <= vibrationCount - 4) {
      tempPointsArr.push(pointsSpecimen[n4]);
      continue;
     }
    
     tempPointsArr.push(100);
    }
   
    pointsArray.push(tempPointsArr);
   }
  
  }

   public function show():void
  {
   if (distortion != null) {
    return;
   }
  
   visible = true;

   distortion = new Distortion(this);
   distortion.buildMode = DistortionConstants.POPUP;
   distortion.smooth = true;
  
   generatePointsArray();
  
   distortionTimeer.repeatCount = vibrationCount;
   distortionTimeer.start();
   timerHandler(null);
  }
 
    public function hide():void
  {
   visible = false;
  }
 }
}


 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics