SleekMove.as
上传用户:chunsheng
上传日期:2022-06-13
资源大小:1476k
文件大小:7k
源码类别:

FlashMX/Flex源码

开发平台:

Flex

  1. package keymet.effect
  2. {
  3. import mx.controls.Image;
  4. import mx.events.EffectEvent;
  5. import mx.effects.easing.*;
  6. public class SleekMove
  7. {
  8. import mx.controls.Alert;
  9. import mx.effects.*;
  10. private var imgW:int;
  11. private var imgH:int;
  12. private var imgSpace:int;
  13. private var offsetX:int;
  14. private var offsetY:int;
  15. private var zoomInPer:Number;
  16. private var img:Array;
  17. private var total:int;
  18. private var cur5:Array;
  19. private var x5:Array;
  20. private var y5:Array;
  21. private var yOffsetDiv:int;
  22. private var curIndex:int = 0;
  23. public function SleekMove()
  24. {
  25. }
  26. public function init(img:Array,imgW:int,imgH:int,imgSpace:int=50,offsetX:int=0,offsetY:int=0,zoomInPer:Number=.6):void
  27. {
  28. this.img = img;
  29. this.imgW = imgW;
  30. this.imgH = imgH;
  31. this.imgSpace = imgSpace;
  32. this.offsetX = offsetX;
  33. this.offsetY = offsetY;
  34. this.zoomInPer = zoomInPer;
  35. total = img.length;
  36. cur5 = new Array(5);
  37. //Alert.show(img.length.toString());
  38. caleXY();
  39. putImgArray();
  40. createEffect();
  41. }
  42. private function caleXY():void
  43. {
  44. yOffsetDiv = int((imgH - int(imgH*zoomInPer))/2);
  45. x5 = new Array(5);
  46. y5 = new Array(5);
  47. x5[0] = offsetX;
  48. x5[1] = x5[0] + int(imgW*zoomInPer) + imgSpace;
  49. x5[2] = x5[1] + int(imgW*zoomInPer) + imgSpace;
  50. x5[3] = x5[2] + imgW + imgSpace;
  51. x5[4] = x5[3] + int(imgW*zoomInPer) + imgSpace;
  52. y5[0] = offsetY;
  53. y5[1] = offsetY;
  54. y5[2] = offsetY - yOffsetDiv;
  55. y5[3] = offsetY;
  56. y5[4] = offsetY;
  57. }
  58. private function putImgArray():void
  59. {
  60. var i:int;
  61. var tmp:Image;
  62. for (i =0 ;i < total;i++)
  63. {
  64. tmp = img[i] as Image;
  65. tmp.width = imgW;
  66. tmp.height = imgH;
  67. tmp.scaleX = zoomInPer;
  68. tmp.scaleY = zoomInPer;
  69. tmp.visible = false;
  70. }
  71. for (i =0 ;i < 5;i++)
  72. {
  73. cur5[i] = img[i];
  74. tmp = cur5[i] as Image;
  75. tmp.x = x5[i];
  76. tmp.y = y5[i];
  77. if (i == 2)
  78. {
  79. tmp.scaleX = 1;
  80. tmp.scaleY = 1;
  81. }
  82. tmp.visible = true;
  83. }
  84. }
  85. private var duration:int = 1000;
  86. private var par_left:Parallel;
  87. private var move_left1:Move;
  88. private var move_left2:Move;
  89. private var move_left3:Move;
  90. private var par_right:Parallel;
  91. private var move_right1:Move;
  92. private var move_right2:Move;
  93. private var move_right3:Move;
  94. private var fadein:Fade;
  95. private var fadeout:Fade;
  96. private var apinX:AnimateProperty;
  97. private var apinY:AnimateProperty;
  98. private var apoutX:AnimateProperty;
  99. private var apoutY:AnimateProperty;
  100. private var stateInEffect:Boolean = false;
  101. public function createEffect():void
  102. {
  103. move_left1 = new Move();
  104. move_left1.xBy = -1 * (imgSpace + imgW * zoomInPer);
  105. move_left1.duration = duration;
  106. move_left2 = new Move(); 
  107. move_left2.xBy = -1 * (imgSpace + imgW * zoomInPer);
  108. move_left2.yBy = yOffsetDiv;
  109. move_left2.duration = duration;
  110. move_left3 = new Move(); 
  111. move_left3.xBy = -1 * (imgSpace + imgW);
  112. move_left3.yBy = -1 * yOffsetDiv;
  113. move_left3.duration = duration;
  114. fadein = new Fade();
  115. fadein.alphaFrom = 0.0;
  116. fadein.alphaTo = 1.0;
  117. fadein.duration = duration;
  118. fadeout = new Fade();
  119. fadeout.alphaFrom = 1.0;
  120. fadeout.alphaTo = 0.0;
  121. fadeout.duration = duration;
  122. apinX = new AnimateProperty();
  123. apinX.property = "scaleX";
  124. apinX.fromValue = 1.0;
  125. apinX.toValue = zoomInPer;
  126. apinY = new AnimateProperty();
  127. apinY.property = "scaleY";
  128. apinY.fromValue = 1.0;
  129. apinY.toValue = zoomInPer;
  130. apoutX = new AnimateProperty();
  131. apoutX.property = "scaleX";
  132. apoutX.fromValue = zoomInPer;
  133. apoutX.toValue = 1.0;
  134. apoutY = new AnimateProperty();
  135. apoutY.property = "scaleY";
  136. apoutY.fromValue = zoomInPer;
  137. apoutY.toValue = 1.0;
  138. par_left = new Parallel();
  139. par_left.addChild(move_left1);
  140. par_left.addChild(move_left2);
  141. par_left.addChild(move_left3);
  142. par_left.addChild(fadeout);
  143. par_left.addChild(fadein);
  144. par_left.addChild(apinX);
  145. par_left.addChild(apinY);
  146. par_left.addChild(apoutX);
  147. par_left.addChild(apoutY);
  148. move_right1 = new Move();
  149. move_right1.xBy = imgSpace + imgW * zoomInPer;
  150. move_right1.duration = duration;
  151. move_right2 = new Move();
  152. move_right2.xBy = imgSpace + imgW;
  153. move_right2.yBy = yOffsetDiv;
  154. move_right2.duration = duration;
  155. move_right3 = new Move();
  156. move_right3.xBy = imgSpace + imgW * zoomInPer;
  157. move_right3.yBy = -1 * yOffsetDiv;
  158. move_right3.duration = duration;
  159. par_right = new Parallel();
  160. par_right.addChild(move_right1);
  161. par_right.addChild(move_right2);
  162. par_right.addChild(move_right3);
  163. par_right.addChild(fadeout);
  164. par_right.addChild(fadein);
  165. par_right.addChild(apinX);
  166. par_right.addChild(apinY);
  167. par_right.addChild(apoutX);
  168. par_right.addChild(apoutY);
  169. par_left.addEventListener(EffectEvent.EFFECT_START,effect_start);
  170. par_left.addEventListener(EffectEvent.EFFECT_END,effect_end);
  171. par_right.addEventListener(EffectEvent.EFFECT_START,effect_start);
  172. par_right.addEventListener(EffectEvent.EFFECT_END,effect_end);
  173. }
  174. private function effect_start(event:EffectEvent):void
  175. {
  176. stateInEffect = true;
  177. }
  178. private function effect_end(event:EffectEvent):void
  179. {
  180. stateInEffect = false;
  181. }
  182. private function getCycIndex(indexadd:int):int
  183. {
  184. var tmp:int;
  185. if (indexadd >= total)
  186. return indexadd%total;
  187. tmp = indexadd;
  188. while(tmp < 0)
  189. tmp += total;
  190. return tmp;
  191. }
  192. private function updateCur5():void
  193. {
  194. var i:int;
  195. for (i = 0; i < 5; i++)
  196. {
  197. cur5[i] = img[getCycIndex(curIndex + i)];
  198. }
  199. }
  200. private function putLeftEffectBeforeAction():void
  201. {
  202. var newimg:Image = img[getCycIndex(curIndex + 5)];
  203. newimg.visible = true;
  204. //Alert.show(getCycIndex(curIndex + 5).toString());
  205. fadeout.target = cur5[0];
  206. move_left1.targets = new Array(cur5[1],cur5[4]);
  207. move_left2.target = cur5[2];
  208. move_left3.target = cur5[3];
  209. fadein.target = newimg;
  210. newimg.x = x5[4];
  211. newimg.y = y5[4];
  212. apinX.target = cur5[2];
  213. apinY.target = cur5[2];
  214. apoutX.target = cur5[3];
  215. apoutY.target = cur5[3];
  216. }
  217. private function putRightEffectBeforeAction():void
  218. {
  219. var newimg:Image = img[getCycIndex(curIndex - 1)];
  220. newimg.visible = true;
  221. fadeout.target = cur5[4];
  222. move_right1.targets = new Array(cur5[0],cur5[3]);
  223. move_right2.target = cur5[2];
  224. move_right3.target = cur5[1];
  225. fadein.target = newimg;
  226. newimg.x = x5[0];
  227. newimg.y = y5[0];
  228. apinX.target = cur5[2];
  229. apinY.target = cur5[2];
  230. apoutX.target = cur5[1];
  231. apoutY.target = cur5[1];
  232. }
  233. public function pressLeft():void
  234. {
  235. if (stateInEffect)
  236. return;
  237. putLeftEffectBeforeAction();
  238. curIndex = getCycIndex(curIndex + 1);
  239. par_left.play();
  240. updateCur5();
  241. }
  242. public function pressRight():void
  243. {
  244. if (stateInEffect)
  245. return;
  246. putRightEffectBeforeAction();
  247. curIndex = getCycIndex(curIndex - 1);
  248. par_right.play();
  249. updateCur5();
  250. }
  251. public function getSelected():int
  252. {
  253. return getCycIndex(curIndex + 2);
  254. }
  255. public function setEasingFun(val:Function):void
  256. {
  257. move_left1.easingFunction = val;
  258. move_left2.easingFunction = val;
  259. move_left3.easingFunction = val;
  260. move_right1.easingFunction = val;
  261. move_right2.easingFunction = val;
  262. move_right3.easingFunction = val;
  263. }
  264. }
  265. }