BannerLoop.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. export class BannerLoop{
  2. /**
  3. * banner创建函数
  4. */
  5. private __bannerCreateHandler:Function;
  6. /**
  7. * banner销毁函数
  8. */
  9. private __bannerDestroyHandler:Function;
  10. /**
  11. * bannerID列表
  12. */
  13. private __bannerIDs:string[];
  14. /**
  15. * banner实例
  16. */
  17. private __bannerMap:any;
  18. /**
  19. * 当前显示的Banner
  20. */
  21. private __currentBanner:string;
  22. /**
  23. * 最大显示次数
  24. */
  25. private __maxShowCount:number;
  26. constructor(){
  27. }
  28. init(maxShowCount:number,bannerIDs:string[],bannerCreateHandler:Function,bannerDestroyHanler:Function):void{
  29. this.__maxShowCount=maxShowCount;
  30. this.__bannerIDs=bannerIDs;
  31. this.__bannerCreateHandler=bannerCreateHandler;
  32. this.__bannerDestroyHandler=bannerDestroyHanler;
  33. this.__bannerMap={};
  34. if(this.__bannerIDs.length==0){
  35. return;
  36. }
  37. this.__bannerIDs.forEach(id => {
  38. let banner:any=this.__bannerCreateHandler(id);
  39. let bannerProxy:BannerProxy=new BannerProxy(id,banner);
  40. this.__bannerMap[id]=bannerProxy;
  41. });
  42. }
  43. showBanner():void{
  44. if(this.__currentBanner!=undefined){
  45. this.hideBanner();
  46. }
  47. if(this.__currentBanner==undefined){
  48. this.__currentBanner=this.__bannerIDs[0];
  49. }else{
  50. let index:number=this.__bannerIDs.indexOf(this.__currentBanner);
  51. if(index<this.__bannerIDs.length-1){
  52. this.__currentBanner=this.__bannerIDs[index+1];
  53. }else{
  54. this.__currentBanner=this.__bannerIDs[0];
  55. }
  56. }
  57. let proxy:BannerProxy=this.__bannerMap[this.__currentBanner];
  58. if(!proxy){
  59. let banner:any=this.__bannerCreateHandler(this.__currentBanner);
  60. proxy=new BannerProxy(this.__currentBanner,banner);
  61. this.__bannerMap[this.__currentBanner]=proxy;
  62. }
  63. proxy.show();
  64. }
  65. hideBanner():void{
  66. let proxy:BannerProxy=this.__bannerMap[this.__currentBanner];
  67. if(!proxy){
  68. return;
  69. }
  70. proxy.hide();
  71. if(proxy.showIndex>this.__maxShowCount){
  72. delete this.__bannerMap[proxy.id];
  73. this.__bannerDestroyHandler(proxy.banner);
  74. proxy.destroy();
  75. }
  76. }
  77. }
  78. class BannerProxy
  79. {
  80. banner:any;
  81. id:string;
  82. showIndex:number;
  83. maxCount:number;
  84. private __isShowing:boolean;
  85. private __loaded:boolean;
  86. constructor(id:string,banner:any){
  87. this.id=id;
  88. this.banner=banner;
  89. this.showIndex=0;
  90. //加载回调
  91. this.banner.onLoad(()=>{
  92. console.log("banner加载完成:");
  93. this.__loaded=true;
  94. if(this.__isShowing){
  95. this.banner.show();
  96. }
  97. })
  98. }
  99. show():void{
  100. this.__isShowing=true;
  101. this.showIndex++;
  102. if(this.__loaded){
  103. this.banner.show();
  104. }
  105. }
  106. hide():void{
  107. this.__isShowing=false;
  108. if(this.__loaded){
  109. this.banner.hide();
  110. }
  111. }
  112. destroy():void{
  113. this.banner=null;
  114. this.id=null;
  115. this.showIndex=0;
  116. }
  117. }