package ckaction.style { import flash.display.Sprite; import flash.text.TextField; import flash.display.Stage; import fl.transitions.Tween; import fl.transitions.easing.None; import fl.motion.easing.Quadratic; import fl.motion.easing.Cubic; import fl.motion.easing.Quartic; import fl.motion.easing.Quintic; import fl.motion.easing.Sine; import fl.motion.easing.Exponential; import fl.motion.easing.Circular; import fl.motion.easing.Elastic; import fl.motion.easing.Back; import fl.motion.easing.Bounce; import fl.transitions.TweenEvent; import flash.events.MouseEvent; import flash.display.MovieClip; import flash.events.Event; import ckaction.act.script; import ckaction.style.loadSpriteImg; import ckaction.C.C; import com.dynamicflash.util.Base64; //import ckaction.act.log; public class newElement { private var pauseded: Boolean = false; private var STAGE: Stage = null; private var THIS: Sprite = null; private var FLASHVARS: Object = null; private var list: Array = []; //private var C:MovieClip=null private var alt: int = 0; private var eleArr: Array = [], eleNameArr: Array = []; //保存所有在改变舞台尺寸时需要调整位置的元件的数组 private var eleTempArr: Array = [], eleNameTempArr: Array = []; //保存所有在改变舞台尺寸时需要调整位置的元件的数组 private var animateArray: Array = [], animateElementArray: Array = [], animatePauseArray: Array = []; //缓动tween数组,缓动的元件ID数组,暂停时需要停止的元件ID数组 public function newElement(stage: Stage, sprite: Sprite, an: int = 0) { STAGE = stage; THIS = sprite; var config: Object = C.CONFIG; FLASHVARS = config["flashvars"]; alt = an; //C=cm; stage.addEventListener(Event.RESIZE, resizeHandler); } //当修改了C.CONFIG后 public function changeConfig() { var config: Object = C.CONFIG; FLASHVARS = config["flashvars"]; } public function addelement(newObj): Sprite { var obj = { list: [], x: "100%", y: "50%", position: [], alpha: 1, backgroundColor: null, backAlpha: 1, backRadius: 0, border: 0, borderColor: 0x000000, clickEvent: "" } obj = script.mergeObject(obj, newObj); //new log(obj); list = obj["list"]; if (list.length == 0) { return null; } var bObj: Object = {}; var elementArr: Array = []; var i: int = 0; var ele: Object = {}; var cx: int = 0, maxH: int = 0; for (i = 0; i < list.length; i++) { ele = list[i]; var mH: int = 0; var eleSprite: Sprite = null; switch (ele["type"]) { case "image": case "png": case "jpg": case "jpeg": case "bmp": case "swf": bObj = { type: "image", file: "", radius: 0, //圆角弧度 width: 30, //定义宽,必需要定义 height: 30, //定义高,必需要定义 alpha: 1, //透明度 marginLeft: 0, marginRight: 0, marginTop: 0, marginBottom: 0, clickEvent: "" }; list[i] = ele = script.mergeObject(bObj, ele); eleSprite = loadSpriteImg.loadImg(bObj["file"], bObj["width"], bObj["height"], bObj["radius"], i,bObj["clickEvent"]!=""?Base64.encode(bObj["clickEvent"]):""); cx += ele["marginLeft"]; eleSprite.x = cx; cx += (eleSprite.width || ele["width"]) + ele["marginRight"]; mH = ele["marginTop"]; eleSprite.y = mH; mH += (eleSprite.height || ele["height"]) + ele["marginBottom"]; if (maxH < mH) { maxH = mH; } if (bObj["clickEvent"] != "") { eleSprite.name=Base64.encode(bObj["clickEvent"]); eleSprite.buttonMode = true; eleSprite.addEventListener(MouseEvent.CLICK, mouseClickHandler); } elementArr.push(eleSprite); //eleNameArr.push(); break; case "gif": bObj = { type: "gif", file: "", radius: 0, //圆角弧度 width: 30, //定义宽,必需要定义 height: 30, //定义高,必需要定义 alpha: 1, //透明度 marginLeft: 0, marginRight: 0, marginTop: 0, marginBottom: 0, clickEvent: "" }; list[i] = ele = script.mergeObject(bObj, ele); var spObj: Object = { width: bObj["width"], height: bObj["height"] }; eleSprite = loadSpriteGif.loadGif(bObj["file"], bObj["width"], bObj["height"], bObj["radius"], i); trace("加载"); cx += ele["marginLeft"]; eleSprite.x = cx; cx += (eleSprite.width || ele["width"]) + ele["marginRight"]; mH = ele["marginTop"]; eleSprite.y = mH; mH += (eleSprite.height || ele["height"]) + ele["marginBottom"]; if (maxH < mH) { maxH = mH; } if (bObj["clickEvent"] != "") { eleSprite.name=Base64.encode(bObj["clickEvent"]); eleSprite.buttonMode = true; eleSprite.addEventListener(MouseEvent.CLICK, mouseClickHandler); } elementArr.push(eleSprite); //eleNameArr.push(); break; case "text": bObj = { type: "text", //说明是文本 text: "", //文本内容 color: 0xFFFFFF, size: 14, font: "Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑", leading: 0, alpha: 1, //透明度 bold: false, paddingLeft: 0, //左边距离 paddingRight: 0, //右边距离 paddingTop: 0, paddingBottom: 0, marginLeft: 0, marginRight: 0, marginTop: 0, marginBottom: 0, backgroundColor: null, backAlpha: 1, backRadius: 0, border: 0, borderColor: 0x000000 }; list[i] = ele = script.mergeObject(bObj, ele); var textObj: Object = { text: bObj["text"], color: bObj["color"], size: bObj["size"], font: bObj["font"], bold: bObj["bold"], width: 0, height: 0, alpha: bObj["alpha"] }; var text: TextField = element.newText(textObj); var textBgWidth: int = text.width + bObj["paddingLeft"] + bObj["paddingRight"]; var textBgHeight: int = bObj["leading"] > 0 ? bObj["leading"] : 0; text.y = textBgHeight > 0 ? (textBgHeight - text.height) * 0.5 + bObj["paddingTop"] : bObj["paddingTop"]; textBgHeight += (bObj["paddingTop"] + bObj["paddingBottom"]); text.x = bObj["paddingLeft"]; var textBgObj: Object = { backgroundColor: bObj["backgroundColor"], //背景颜色 radius: bObj["backRadius"], //圆角弧度 backgroundAlpha: bObj["backAlpha"], //背景透明度 border: bObj["border"], borderColor: bObj["borderColor"], width: textBgWidth, height: textBgHeight }; eleSprite = element.newSprite(textBgObj); eleSprite.addChild(text); //eleSprite.name = "ele_" + i; cx += ele["marginLeft"]; eleSprite.x = cx; cx += eleSprite.width + ele["marginRight"]; mH = ele["marginTop"]; eleSprite.y = mH; mH += eleSprite.height + ele["marginBottom"]; if (maxH < mH) { maxH = mH; } elementArr.push(eleSprite); if (bObj["clickEvent"] != "" && (obj["clickEvent"] == "" || obj["clickEvent"] == null) && bObj["clickEvent"] != null) { eleSprite.name=Base64.encode(bObj["clickEvent"]); eleSprite.buttonMode = true; eleSprite.addEventListener(MouseEvent.CLICK, mouseClickHandler); } break; default: break; } } var spBgObj: Object = { backgroundColor: obj["backgroundColor"] != null ? obj["backgroundColor"] : null, //背景颜色 radius: obj["backRadius"], //圆角弧度 backgroundAlpha: obj["backAlpha"], //背景透明度 border: obj["border"], borderColor: obj["borderColor"], width: cx, height: maxH }; var sprite: Sprite = element.newSprite(spBgObj); for (i = 0; i < elementArr.length; i++) { sprite.addChild(elementArr[i]); } sprite.name = obj["x"] + "$" + obj["y"] + "$" + obj["position"].join(",") + "$" + script.randomString(); var eleCoor: Object = calculationCoor(sprite); sprite.x = eleCoor["x"]; sprite.y = eleCoor["y"]; sprite.alpha = obj["alpha"]; THIS.addChildAt(sprite, alt + 1); eleArr.push(sprite); eleNameArr.push(sprite.name); if (obj["clickEvent"] != "") { sprite.buttonMode = true; sprite.addEventListener(MouseEvent.CLICK, function (event: MouseEvent): void { THIS["clickEvent"](obj["clickEvent"]); }); } return sprite; } private function mouseClickHandler(event: MouseEvent): void { //new log(event.target.name); var ce: String = Base64.decode(event.target.name); //new log(ce); THIS["clickEvent"](ce); } private function calculationCoor(ele: Sprite): Object { var arr = ele.name.split("$"); var obj = { x: arr[0], y: arr[1], position: arr[2] != "" ? arr[2].split(",") : [] } var x: int = Number(obj["x"].toString().split("%").join("")), y: int = Number(obj["y"].toString().split("%").join("")), position: Array = obj["position"]; var w: int = STAGE.stageWidth, h: int = STAGE.stageHeight; var ew: int = ele.width, eh: int = ele.height; if (position.length > 0) { position.push(null, null, null, null); var i = 0; for (i = 0; i < position.length; i++) { if (position[i] == "null" || position[i] == "") { position[i] = null; } if (position[i] != null) { position[i] = Number(position[i]); } } if (position[2] == null) { switch (position[0]) { case 0: x = 0; break; case 1: x = (w - ew) * 0.5; break; default: x = w - ew; break; } } else { switch (position[0]) { case 0: x = position[2]; break; case 1: x = w * 0.5 + position[2]; break; default: x = w + position[2]; break; } } if (position[3] == null) { switch (position[1]) { case 0: y = 0; break; case 1: y = (h - eh) * 0.5; break; default: y = h - eh; break; } } else { switch (position[1]) { case 0: y = position[3]; break; case 1: y = h * 0.5 + position[3]; break; default: y = h + position[3]; break; } } } else { if (obj["x"].toString().search("%") > -1) { x = Math.floor(Number(obj["x"].toString().split("%").join("")) * w * 0.01); } if (obj["y"].toString().search("%") > -1) { y = Math.floor(Number(obj["y"].toString().split("%").join("")) * h * 0.01); } } return { x: x, y: y } } public function getElement(name: String): Object { var num: int = eleNameArr.indexOf(name); var sprite: Sprite =null if (num > -1) { sprite = eleArr[num]; return { x: sprite.x, y: sprite.y, width: sprite.width, height: sprite.height, alpha: sprite.alpha } } num = eleNameTempArr.indexOf(name); if (num > -1) { sprite = eleTempArr[num]; return { x: sprite.x, y: sprite.y, width: sprite.width, height: sprite.height, alpha: sprite.alpha, show:sprite.visible } } return null; } public function elementShow(name: String="",bn:Boolean=true):void{ if(name==""){ var i:int=0; for(i=0;i -1) { eleArr[num].visible=bn; } num = eleNameTempArr.indexOf(name); if (num > -1) { eleTempArr[num].visible=bn; } } public function animate(ob: Object): String { var obj: Object = { element: null, parameter: "x", static: false, effect: "None.easeIn", start: null, end: null, speed: 0, overStop: false, pauseStop: false, callBack: null }; obj = script.mergeObject(obj, ob); if (obj["element"] == null || obj["speed"] == 0) { return ""; } var w: int = STAGE.stageWidth, h: int = STAGE.stageHeight; var eleCoor = { x: 0, y: 0 }; var run: Boolean = true; var pm = getElement(obj["element"]); //包含x,y,width,height,alpha属性 //将该元件从元件数组里删除,让其不再跟随播放器的尺寸改变而改变位置 var num = eleNameArr.indexOf(obj["element"]); var sprite: Sprite = null; if (num > -1) { sprite = eleArr[num]; eleNameArr.splice(num, 1); eleArr.splice(num, 1); eleTempArr.push(sprite); eleNameTempArr.push(obj["element"]); } if (sprite == null) { return ""; } var b: Number = 0; //初始值 var c: Number = 0; //变化后的值 var d = obj["speed"]; //持续时间 //var setTimeOut = null; //var tweenObj = null; var start: String = obj["start"] == null ? "" : obj["start"].toString(); var end: String = obj["end"] == null ? "" : obj["end"].toString(); switch (obj["parameter"]) { case "x": if (obj["start"] == null) { b = pm["x"]; } else { if (start.substr(start.length - 1, start.length) == "%") { b = Number(start.substr(0, start.length - 1)) * w * 0.01; } else { b = Number(start); } } if (obj["end"] == null) { c = pm["x"]; } else { if (end.substr(end.length - 1, end.length) == "%") { c = Number(end.substr(0, end.length - 1)) * w * 0.01; } else if (end.substr(0, 1) == "-" || end.substring(0, 1) == "+") { if (typeof (obj["end"]) == "number") { c = obj["end"]; } else { c = b + Number(end); } } else { c = Number(end); } } b = Math.floor(b); c = Math.floor(c); break; case "y": if (obj["start"] == null) { b = pm["y"]; } else { if (start.substr(start.length - 1, start.length) == "%") { b = Number(start.substr(0, start.length - 1)) * h * 0.01; } else { b = Number(start); } } if (obj["end"] == null) { c = pm["y"]; } else { if (end.substr(end.length - 1, end.length) == "%") { c = Number(end.substr(0, end.length - 1)) * h * 0.01; } else if (end.substr(0, 1) == "-" || end.substring(0, 1) == "+") { if (typeof (obj["end"]) == "number") { c = obj["end"]; } else { c = b + Number(end); } } else { c = Number(end); } } b = Math.floor(b); c = Math.floor(c); break; case "alpha": if (obj["start"] == null) { b = pm["alpha"]; } else { if (start.substr(start.length - 1, start.length) == "%") { b = Number(start.substr(0, start.length - 1)); } else { b = Number(obj["start"]); } } if (obj["end"] == null) { c = pm["alpha"]; } else { if (end.substr(end.length - 1, end.length) == "%") { c = Number(end.substr(0, end.length - 1)); } else if (end.substr(0, 1) == "-" || end.substring(0, 1) == "+") { if (typeof (obj["end"]) == "number") { c = obj["end"]; } else { c = b + Number(end); } } else { c = Number(end); } } break; } var effArr: Array = [None, Quadratic, Cubic, Quartic, Quintic, Sine, Exponential, Circular, Elastic, Back, Bounce]; var effNameArr: Array = ["None", "Quadratic", "Cubic", "Quartic", "Quintic", "Sine", "Exponential", "Circular", "Elastic", "Back", "Bounce"]; var arr: Array = obj["effect"].split("."); num = effNameArr.indexOf(arr[0]); var effectFun = effArr[num][arr[1]]; var tween: Tween = new Tween(sprite, obj["parameter"], effectFun, b, c, d, true); if (obj["static"]) { function changeHandler(event: TweenEvent) { var coor = calculationCoor(sprite); switch (obj["parameter"]) { case "x": sprite.y = coor["y"]; break; case "y": sprite.x = coor["x"]; break; case "alpha": sprite.x = coor["x"]; sprite.y = coor["y"]; break; } }; tween.addEventListener(TweenEvent.MOTION_CHANGE, changeHandler); } function backCall(): void { //trace("=====================================backcall"); var numT:int = eleNameTempArr.indexOf(sprite.name); if (numT > -1) { eleNameTempArr.splice(numT, 1); eleTempArr.splice(numT, 1); } eleNameArr.push(sprite.name); eleArr.push(sprite); tween.removeEventListener(TweenEvent.MOTION_FINISH, finishHandler); tween = null; if (obj["callBack"] != null && typeof (obj["callBack"]) == "string") { script.callJs(obj["callBack"], sprite.name); } } function finishHandler(event: TweenEvent): void { switch (obj["parameter"]) { case "x": if (sprite.x != c) { tween.resume(); } else { backCall(); } break; case "y": if (sprite.y != c) { tween.resume(); } else { backCall(); } break; case "alpha": if (sprite.alpha != c) { tween.resume(); } else { backCall(); } break; } } tween.addEventListener(TweenEvent.MOTION_FINISH, finishHandler); if (obj["overStop"]) { function overHandler(event: MouseEvent) { tween.stop(); sprite.removeEventListener(MouseEvent.MOUSE_OVER, overHandler); sprite.addEventListener(MouseEvent.MOUSE_OUT, outHandler); }; function outHandler(event: MouseEvent) { var start = true; if (obj["pauseStop"] && pauseded) { start = false; } if (start) { tween.resume(); } sprite.removeEventListener(MouseEvent.MOUSE_OUT, outHandler); sprite.addEventListener(MouseEvent.MOUSE_OVER, overHandler); }; sprite.addEventListener(MouseEvent.MOUSE_OVER, overHandler); } tween.start(); var animateId = "animate" + script.randomString(); animateArray.push(tween); animateElementArray.push(animateId); if (obj["pauseStop"]) { animatePauseArray.push(animateId); } return animateId; } /* 接口函数 继续运行animate */ public function animateResume(id: String = "") { var arr: Array = []; if (id != "" && id != "undefined" && id != "pause") { arr.push(id); } else { if (id === "pause") { arr = animatePauseArray; } else { arr = animateElementArray; } } for (var i: int = 0; i < arr.length; i++) { var index: int = animateElementArray.indexOf(arr[i]); if (index > -1) { animateArray[index].resume(); } } } /* 接口函数 暂停运行animate */ public function animatePause(id: String = "") { var arr: Array = []; if (id != "" && id != "undefined" && id != "pause") { arr.push(id); } else { if (id === "pause") { arr = animatePauseArray; } else { arr = animateElementArray; } } for (var i: int = 0; i < arr.length; i++) { var index: int = animateElementArray.indexOf(arr[i]); if (index > -1) { animateArray[index].stop(); } } } /* 内置函数 根据元件删除数组里对应的内容 */ public function deleteAnimate(id:String) { var index = animateElementArray.indexOf(id); if (index > -1) { //animatePause(id); animateArray[index].fforward(); //animateArray.splice(index, 1); //animateElementArray.splice(index, 1); } } /* 内置函数 删除外部新建的元件 */ public function deleteElement(name: String): void { trace(name); trace(eleNameArr); var num: int = eleNameArr.indexOf(name); if (num > -1) { THIS.removeChild(eleArr[num]); eleNameArr.splice(num, 1); eleArr.splice(num, 1); } deleteAnimate(name); } public function changePauseded(b: Boolean): void { pauseded = b; if (animatePauseArray.length == 0) { return; } if (b) { animatePause("pause"); } else { animateResume("pause"); } } public function resizeHandler(event: Event): void { if (eleArr.length > 0) { for (var i: int = 0; i < eleArr.length; i++) { var coor: Object = calculationCoor(eleArr[i]); eleArr[i].x = coor["x"]; eleArr[i].y = coor["y"]; } } } } }