Files
moeplayer/source/ckaction/ad/adOtherPlayer.as
T
2020-09-17 18:40:01 +08:00

273 lines
7.1 KiB
ActionScript

package ckaction.ad {
import flash.display.Sprite;
import flash.display.Loader;
import ckaction.player.gifPlayer;
import ckaction.act.httpload;
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
import flash.events.MouseEvent;
import ckaction.act.script;
import ckaction.act.requestController;
import ckaction.style.element;
import ckaction.C.C;
import ckaction.act.timeOut;
public class adOtherPlayer {
private var STAGE: Stage = null;
private var THIS: Sprite = null;
private var adObj: Object = null;
private var adNum: int = 0;
private var isClose: Boolean = false;
private var stageW: int = 0,
stageH: int = 0;
private var load: Loader = null;
private var gif: gifPlayer = null;
private var httpLoad: httpload = null;
private var loadGif: MovieClip = null;
private var adMask: Sprite = null;
private var adMetaData: Object = {
width: 0,
height: 0
};
private var CONFIG: Object = C.CONFIG;
private var STYLE: Object = {};
private var closeOtherButtonShow: Boolean = true;
private var closeButton: Sprite = null;
private var timeOutVal: timeOut = null;
public function adOtherPlayer(stage: Stage, sprite: Sprite, obj: Object, num: int = 0) {
// constructor code
STYLE = CONFIG["style"]
adObj = obj;
adNum = num;
STAGE = stage;
THIS = sprite;
closeOtherButtonShow = STYLE["advertisement"]["closeOtherButtonShow"];
stageW = STAGE.stageWidth,
stageH = STAGE.stageHeight;
STAGE.addEventListener(Event.RESIZE, function (event: Event) {
resizeHandler();
});
adPlay();
if (adObj.hasOwnProperty("time") && Number(adObj["time"]) > 0) {
timeOutVal = new timeOut(Number(adObj["time"]) * 1000, closeAd);
}
}
//当修改了C.CONFIG后
public function changeConfig() {
var config: Object = C.CONFIG;
STYLE = config["style"];
}
private function adPlay(): void {
if (isClose) {
return;
}
if (!adObj["type"]) {
adObj["type"] = script.getFileExt(adObj["file"]);
}
adObj["type"] = adObj["type"].replace(".", "");
switch (adObj["type"]) {
case "png":
case "jpg":
case "jpeg":
case "swf":
httpLoad = new httpload(adObj["file"], loaderHandler);
break;
case "gif":
gif = new gifPlayer(adObj["file"], gifHandler);
break;
default:
break;
}
}
//图片,swf加载成功
private function loaderHandler(ld: Loader = null): void {
if (isClose) {
return;
}
if (ld) {
load = ld;
adMetaData = {
width: load.width,
height: load.height
};
THIS.addChild(load);
resizeHandler();
if (adObj.hasOwnProperty("exhibitionMonitor")) {
new requestController(STYLE["advertisement"]["method"], adObj["exhibitionMonitor"], adObj);
}
if (adObj["link"]) {
addAdMask();
}
if (closeOtherButtonShow) {
addCloseOtherButton();
}
}
}
//gif加载成功
private function gifHandler(mc: MovieClip = null): void {
if (isClose) {
return;
}
//trace("===");
if (mc != null) {
loadGif = mc;
adMetaData = {
width: loadGif.width,
height: loadGif.height
};
//trace(loadGif.width);
THIS.addChild(loadGif);
resizeHandler();
if (adObj.hasOwnProperty("exhibitionMonitor") && adObj["exhibitionMonitor"]!="") {
new requestController(STYLE["advertisement"]["method"], adObj["exhibitionMonitor"], adObj);
}
if (adObj.hasOwnProperty("link") && adObj["link"]) {
addAdMask();
}
if (closeOtherButtonShow) {
addCloseOtherButton();
}
}
}
private function addCloseOtherButton(): void {
if (isClose) {
return;
}
if (STYLE.hasOwnProperty("advertisement") && STYLE["advertisement"].hasOwnProperty("closeOtherButton")) {
closeButton = element.imgButton(STYLE["advertisement"]["closeOtherButton"], "closeOtherAd", function () {});
THIS.addChild(closeButton);
closeButton.addEventListener(MouseEvent.CLICK, mouseClickHandler);
resizeHandler();
}
}
private function mouseClickHandler(event: MouseEvent): void {
closeAd();
}
private function closeAd(): void {
THIS["closeOtherAd"](adNum);
}
public function close(): void {
isClose = true;
if (load) {
THIS.removeChild(load);
load = null;
}
if (loadGif) {
THIS.removeChild(loadGif);
loadGif = null;
}
if (adMask) {
THIS.removeChild(adMask);
adMask = null;
}
if (closeButton) {
THIS.removeChild(closeButton);
closeButton = null;
}
if (timeOutVal) {
timeOutVal.stop();
timeOutVal = null;
}
}
private function addAdMask(): void {
if (!adMask) {
var spObj: Object = {
backgroundColor: 0xFF0000,
border: 0,
backgroundAlpha: 0, //背景透明度
width: adMetaData["width"],
height: adMetaData["height"]
};
adMask = element.newSprite(spObj);
adMask.addEventListener(MouseEvent.CLICK, adMaskClickHandler);
adMask.buttonMode = true;
}
THIS.addChild(adMask);
resizeHandler();
}
private function adMaskClickHandler(event: MouseEvent): void {
openAdLink();
}
//打开广告链接
public function openAdLink(): void {
if (adObj.hasOwnProperty("clickMonitor")) {
new requestController(STYLE["advertisement"]["method"], adObj["clickMonitor"], adObj);
}
script.openLink(adObj["link"], adObj["target"]);
}
private function resizeHandler(): void {
if (isClose) {
return;
}
stageW = STAGE.stageWidth;
stageH = STAGE.stageHeight;
var coor: Object = coorDinate(adObj);
//trace(coor["width"],coor["height"]);
if (load) {
load.x = coor["x"];
load.y = coor["y"];
}
if (loadGif) {
loadGif.x = coor["x"];
loadGif.y = coor["y"];
gif.changeWH(adMetaData["width"], adMetaData["height"]);
}
if (adMask) {
adMask.x = coor["x"];
adMask.y = coor["y"];
}
if (closeButton) {
coor = coorDinate(STYLE["advertisement"]["closeOtherButton"], adMask || load || loadGif);
closeButton.x = coor["x"] + (adMask || load || loadGif).x;
closeButton.y = coor["y"] + (adMask || load || loadGif).y;
}
}
private function coorDinate(obj: Object, refer: * = null): Object {
//script.traceObject(obj);
//根据坐标及参考对象参数计算位置
var nObj: Object = {
align: "left",
vAlign: "top",
offsetX: "0",
offsetY: "0"
};
nObj = script.mergeObject(nObj, obj);
var x: int = 0,
y: int = 0,
w: int = refer != null ? refer.width : stageW,
h: int = refer != null ? refer.height : stageH;
switch (nObj["align"]) {
case "left":
x = 0;
break;
case "center":
x = w * 0.5;
break;
default:
x = w;
break;
}
switch (nObj["vAlign"]) {
case "top":
y = 0;
break;
case "middle":
y = h * 0.5;
break;
default:
y = h;
break;
}
//trace(x,y);
x += nObj["offsetX"].toString().indexOf("%") > -1 ? w * Number(nObj["offsetX"].toString().replace("%", "")) * 0.01 : Number(nObj["offsetX"]);
y += nObj["offsetY"].toString().indexOf("%") > -1 ? h * Number(nObj["offsetY"].toString().replace("%", "")) * 0.01 : Number(nObj["offsetY"]);
//trace(x,y);
return {
x: x,
y: y
};
}
}
}