_couponItem.js 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. /**
  2. *
  3. * @authors Eric Hsiao
  4. *
  5. */
  6. var couponItem = function (_index, _status) {
  7. //private menbers
  8. var $container;
  9. var itemIndex;
  10. var status = {"id":1,"lp":1,"gp":10,"issoldout":false,"isredeemed":false,"isnomoney":false,"canuse":false,"video":''}
  11. //template
  12. var couponTemplate =
  13. `<div class="coupon__item">
  14. <div class="coupon__item__content">
  15. <div class="coupon__item__btn"></div>
  16. <div class="coupon__item__lp"></div>
  17. <div class="coupon__item__gp"></div>
  18. </div>
  19. <div class="coupon__item__overlayer"></div>
  20. <div class="coupon__item__hitArea"></div>
  21. </div>`;
  22. /***********************************/
  23. //private methods
  24. function init() {
  25. console.log('coupon__item__hitArea');
  26. // $container = _container;
  27. itemIndex = _index;
  28. $container = $(couponTemplate).appendTo($('.game__store__coupon'));
  29. status = $.extend(status, _status);
  30. updateCoupon();
  31. $container.find('.coupon__item__hitArea').click(function (e) {
  32. // e.preventDefault();
  33. console.log('click');
  34. doClick();
  35. });
  36. }
  37. function updateCoupon() {
  38. $container.find('.coupon__item__lp').text(status.lp);
  39. $container.find('.coupon__item__gp').text(status.gp);
  40. //////////////////////////////////////
  41. if(status.video != '' && !status.isredeemed && !status.issoldout){
  42. $container.addClass('coupon__item__video');
  43. }
  44. if (status.lock && !status.isredeemed && !status.issoldout) {
  45. $container.find('.coupon__item__btn').addClass('lock');
  46. } else {
  47. $container.find('.coupon__item__btn').removeClass('lock');
  48. }
  49. if (status.issoldout) {
  50. $container.addClass('sellout');
  51. } else {
  52. $container.removeClass('sellout');
  53. }
  54. if (status.isredeemed) {
  55. $container.find('.coupon__item__btn').addClass('used');
  56. } else {
  57. $container.find('.coupon__item__btn').removeClass('used');
  58. }
  59. }
  60. function doClick() {
  61. console.log('點選 ' + status.gp + '吉點 交換 LINE Point : ' + status.lp + '點');
  62. if (status.issoldout) {
  63. // alert('已換完');
  64. // $('.game__popout__content .content').hide();
  65. // $('.game__popout__submit').hide();
  66. // $('.content__no').show();
  67. $('.game__popout__content .content').hide();
  68. $('.game__popout__submit').hide();
  69. $('.game__popout__content .content__result').show();
  70. $('.game__popout__content .content__result__text').html('<p>獎項已兌換完畢</p>');
  71. main.showPopout();
  72. } else if (status.lock) {
  73. // alert('未解鎖');
  74. $('.video__popout').show();
  75. TweenMax.set('.video__popout', { autoAlpha: 0 });
  76. TweenMax.to('.video__popout', 0.5, { autoAlpha: 1 });
  77. // $('.video__content').html('<iframe width="640" height="360" src="https://www.youtube.com/embed/' + status.video + '" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>');
  78. console.log('VIDEO = ' + status.video);
  79. player.loadVideoById(status.video);
  80. player.stopVideo(0);
  81. videoCallback = function () {
  82. TweenMax.to('.video__popout', 0.5, { autoAlpha: 0 });
  83. status.lock = false;
  84. console.log('SET cookie');
  85. $.cookie('luckydraw.isVideoUnlock', true);
  86. console.log('luckydraw.isVideoUnlock = ' + $.cookie('luckydraw.isVideoUnlock'));
  87. updateCoupon();
  88. setTimeout(function () {
  89. doClick();
  90. },300);
  91. }
  92. } else if (status.isredeemed) {
  93. $('.game__popout__content .content').hide();
  94. $('.game__popout__submit').hide();
  95. $('.game__popout__content .content__result').show();
  96. $('.game__popout__content .content__result__text').html('<p>本週已兌換</p>');
  97. TweenMax.to('.game__popout', 0.5, { autoAlpha: 1 });
  98. main.showPopout();
  99. } else if (status.isnomoney) {
  100. $('.game__popout__content .content').hide();
  101. $('.game__popout__submit').hide();
  102. $('.game__popout__content .content__result').show();
  103. $('.game__popout__content .content__result__text').html('<p>很抱歉,兌換吉點餘額不足。</p>');
  104. TweenMax.to('.game__popout', 0.5, { autoAlpha: 1 });
  105. main.showPopout();
  106. } else {
  107. $('.game__popout__content .content').hide();
  108. $('.game__popout__submit').show();
  109. $('.game__popout__submit__text').text(status.gp);
  110. $('.game__popout .content__lp .lp').text(status.lp);
  111. $('.game__popout .content__lp').show();
  112. TweenMax.set('.game__popout__submit', { y: 50 });
  113. TweenMax.to('.game__popout__submit', 0.5, { y: 0, ease: Back.easeOut.config(1.7) });
  114. main.showPopout(function () {
  115. //使用Coupon
  116. main.useCoupon(status.id,-status.gp, function () {
  117. status.isredeemed = true;
  118. updateCoupon();
  119. });
  120. });
  121. }
  122. }
  123. //constructor
  124. {
  125. $(document).ready(function () {
  126. init();
  127. });
  128. }
  129. //public
  130. return {
  131. // videoComplete:function () {
  132. // console.log('videoComplete : ' + status.gp);
  133. // }
  134. };
  135. };
  136. var videoCallback;
  137. // Load the IFrame Player API code asynchronously.
  138. var tag = document.createElement('script');
  139. tag.src = "https://www.youtube.com/player_api";
  140. var firstScriptTag = document.getElementsByTagName('script')[0];
  141. firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
  142. // Replace the 'ytplayer' element with an <iframe> and
  143. // YouTube player after the API code downloads.
  144. var player;
  145. function onYouTubePlayerAPIReady() {
  146. console.log('Yiutube API Ready');
  147. player = new YT.Player('video__content', {
  148. height: '360',
  149. width: '640',
  150. videoId: 'H8EAsiZfqnc',
  151. playerVars: { 'autoplay': 0, 'controls': 0 },
  152. events: {
  153. 'onStateChange': onPlayerStateChange
  154. }
  155. });
  156. }
  157. function onPlayerStateChange(e) {
  158. console.log('onPlayerStateChange');
  159. if(e.data == 0){
  160. videoCallback();
  161. }
  162. }