main.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. document.body.addEventListener('touchmove', bodyScroll, { passive: false });
  2. function bodyScroll(event) {
  3. event.preventDefault();
  4. }
  5. var canvas = document.getElementById("canvas");
  6. var stage = new createjs.Stage(canvas);
  7. function init() {
  8. var comp = AdobeAn.getComposition("5529E26743974F469545223C44E61D22");
  9. var lib = comp.getLibrary();
  10. var loader = new createjs.LoadQueue(false);
  11. loader.addEventListener("fileload", function(evt) { handleFileLoad(evt, comp) });
  12. loader.addEventListener("complete", function(evt) { handleComplete(evt, comp) });
  13. loader.addEventListener("progress", loadProgressHandler);
  14. var lib = comp.getLibrary();
  15. loader.loadManifest(lib.properties.manifest);
  16. createjs.MotionGuidePlugin.install();
  17. createjs.Touch.enable(stage);
  18. }
  19. function handleFileLoad(evt, comp) {
  20. var loadingimages = comp.getImages();
  21. if (evt && (evt.item.type == "image")) {
  22. loadingimages[evt.item.id] = evt.result;
  23. }
  24. }
  25. function loadProgressHandler(event) {
  26. var num = Math.floor(event.progress * 100);
  27. $("#loadingTxt").text(num);
  28. $("#loadingBar").css("width", num + '%');
  29. }
  30. function handleComplete(evt, comp) {
  31. //This function is always called, irrespective of the content. You can use the variable "stage" after it is created in token create_stage.
  32. var lib = comp.getLibrary();
  33. var ss = comp.getSpriteSheet();
  34. var queue = evt.target;
  35. var ssMetadata = lib.ssMetadata;
  36. for (i = 0; i < ssMetadata.length; i++) {
  37. ss[ssMetadata[i].name] = new createjs.SpriteSheet({ "images": [queue.getResult(ssMetadata[i].name)], "frames": ssMetadata[i].frames })
  38. }
  39. var exportRoot = new lib.assets();
  40. $(".loading").fadeOut();
  41. $(".select-dish-box .item").on("click", function() {
  42. $(this).addClass("active").siblings().removeClass("active");
  43. $(".select-dish-box .confirm").show();
  44. })
  45. $(".select-dish-box .confirm").on("click", function() {
  46. if (!$(".select-dish-box .item").hasClass("active")) {
  47. alert("请选择你要做的菜")
  48. return false;
  49. }
  50. $(".select-dish-box").hide();
  51. $(".game-box").show();
  52. })
  53. function ballAnim(dom) {
  54. var anim = new TimelineMax({ repeat: -1 });
  55. anim.to(dom, 0.15, { rotation: "-=15", ease: Power0.easeIn });
  56. anim.to(dom, 0.3, { rotation: "+=30", ease: Power0.easeIn });
  57. anim.to(dom, 0.3, { rotation: "-=30", ease: Power0.easeIn });
  58. anim.to(dom, 0.3, { rotation: "+=30", ease: Power0.easeIn });
  59. anim.to(dom, 0.15, { rotation: "-=15", ease: Power0.easeIn });
  60. return anim;
  61. }
  62. function materialAnim(dom, x, y, callback) {
  63. var anim = new TimelineMax({ onComplete: callback });
  64. anim.to(dom, 0.5, { x: "+=" + x, y: "+=" + y, ease: Power0.easeIn })
  65. anim.to(dom, 0.3, { rotation: "-=25", ease: Power0.easeIn });
  66. anim.to(dom, 0.3, { rotation: "+=25", ease: Power0.easeIn });
  67. anim.to(dom, 0.3, { rotation: "-=25", ease: Power0.easeIn });
  68. anim.to(dom, 0.3, { rotation: "+=25", ease: Power0.easeIn });
  69. return anim;
  70. }
  71. function bowlAnim(callback) {
  72. var anim = new TimelineMax({ onComplete: callback, delay: 1 });
  73. anim.to(exportRoot.plate, 0.5, { y: "-=370", ease: Power0.easeIn })
  74. anim.to(exportRoot.bowl, 0.5, { alpha: 1, ease: Power0.easeIn });
  75. return anim;
  76. }
  77. function proAnim(callback) {
  78. var anim = new TimelineMax({ onComplete: callback, delay: 0.5 });
  79. anim.to(exportRoot.pro, 0.6, { rotation: "-=25", ease: Power0.easeIn })
  80. anim.to(exportRoot.pro, 1, {})
  81. anim.to(exportRoot.pro, 0.3, { alpha: 0, ease: Power0.easeIn })
  82. anim.to(exportRoot.pro, 1, {})
  83. return anim;
  84. }
  85. function btnAnim(dom){
  86. var anim = new TimelineMax({ repeat:-1 });
  87. anim.to(dom, 0.3, { scale: "+=0.1", ease: Power0.easeIn })
  88. anim.to(dom, 0.3, { scale: "-=0.1", ease: Power0.easeIn })
  89. return anim;
  90. }
  91. function fadeInAnim(dom){
  92. var anim = new TimelineMax({ });
  93. anim.to(dom, 0.4, { alpha: 1, ease: Power0.easeIn })
  94. return anim;
  95. }
  96. // 红烧肉的位置
  97. var hsr_iconArr = [{
  98. x: exportRoot.plate.x + exportRoot.plate.hsr_icon1.x,
  99. y: exportRoot.plate.y + exportRoot.plate.hsr_icon1.y,
  100. width: 202,
  101. height: 129,
  102. isClear: false
  103. },
  104. {
  105. x: exportRoot.plate.x + exportRoot.plate.hsr_icon2.x,
  106. y: exportRoot.plate.y + exportRoot.plate.hsr_icon2.y,
  107. width: 86,
  108. height: 75,
  109. isClear: false
  110. },
  111. {
  112. x: exportRoot.plate.x + exportRoot.plate.hsr_icon3.x,
  113. y: exportRoot.plate.y + exportRoot.plate.hsr_icon3.y,
  114. width: 371,
  115. height: 144,
  116. isClear: false
  117. },
  118. {
  119. x: exportRoot.plate.x + exportRoot.plate.hsr_icon4.x,
  120. y: exportRoot.plate.y + exportRoot.plate.hsr_icon4.y,
  121. width: 103,
  122. height: 118,
  123. isClear: false
  124. }
  125. ];
  126. // 画线
  127. var lineArr = [];
  128. var lineTimr = null;
  129. var lineShape = new createjs.Shape();
  130. function drawLine() {
  131. var value = 40;
  132. lineTimr = setInterval(function() {
  133. lineShape.graphics.clear();
  134. lineShape.graphics.setStrokeStyle(8).beginStroke("#787878");
  135. if (lineArr.length) {
  136. lineShape.graphics.moveTo(lineArr[0].x, lineArr[0].y);
  137. }
  138. for (var i = 0; i < lineArr.length; i++) {
  139. var x = lineArr[i].x;
  140. var y = lineArr[i].y;
  141. lineShape.graphics.lineTo(x, y);
  142. for (var p = 0; p < hsr_iconArr.length; p++) {
  143. if (x-hsr_iconArr[p].width/3 > hsr_iconArr[p].x && x < (hsr_iconArr[p].x + hsr_iconArr[p].width)) {
  144. if (y-hsr_iconArr[p].height/3 > hsr_iconArr[p].y && y < (hsr_iconArr[p].y + hsr_iconArr[p].height)) {
  145. if (hsr_iconArr[p].isClear == false) {
  146. exportRoot.plate['hsr_icon' + (p + 1)].gotoAndStop(1);
  147. hsr_iconArr[p].isClear = true;
  148. playbowlAnim();
  149. }
  150. }
  151. }
  152. }
  153. }
  154. lineArr.splice(0, 1);
  155. }, 30)
  156. }
  157. // 画线事件
  158. drawLine();
  159. exportRoot.addEventListener("mousedown", function(event) {
  160. lineArr = [];
  161. var obj = {
  162. x: event.stageX,
  163. y: event.stageY,
  164. };
  165. lineArr.push(obj);
  166. })
  167. exportRoot.addEventListener("pressmove", function(event) {
  168. if (lineArr.length >= 15) {
  169. lineArr.splice(0, 1);
  170. }
  171. var obj = {
  172. x: event.stageX,
  173. y: event.stageY,
  174. };
  175. lineArr.push(obj);
  176. })
  177. exportRoot.addEventListener("pressup", function(event) {
  178. })
  179. // 移动菜品
  180. function dishMove(dom) {
  181. var startX = 0;
  182. var startY = 0;
  183. var domFirst = $.extend(true, {}, dom);
  184. dom.addEventListener("mousedown", function(event) {
  185. startX = event.stageX;
  186. startY = event.stageY;
  187. })
  188. dom.addEventListener("pressmove", function(event) {
  189. dom.x -= (startX - event.stageX);
  190. dom.y -= (startY - event.stageY);
  191. startX = event.stageX;
  192. startY = event.stageY;
  193. })
  194. dom.addEventListener("pressup", function(event) {
  195. if (dom.x + exportRoot.plate.x > 80 && dom.y + exportRoot.plate.y > 518) {
  196. dom.x = 190 - exportRoot.plate.x;
  197. dom.y = 630 - exportRoot.plate.y;
  198. dom.removeAllEventListeners();
  199. if (exportRoot.plate.hsr_icon1.y == exportRoot.plate.hsr_icon2.y && exportRoot.plate.hsr_icon1.y == exportRoot.plate.hsr_icon3.y && exportRoot.plate.hsr_icon1.y == exportRoot.plate.hsr_icon4.y) {
  200. exportRoot.btn1.alpha = 1;
  201. isAllInplate();
  202. }
  203. } else {
  204. dom.x = domFirst.x;
  205. dom.y = domFirst.y;
  206. }
  207. })
  208. }
  209. // 菜全部到盘子里
  210. function isAllInplate() {
  211. exportRoot.btn1.addEventListener("mousedown", function() {
  212. exportRoot.btn1.removeAllEventListeners();
  213. exportRoot.btn1.alpha = 0;
  214. exportRoot.plate.alpha = 0;
  215. exportRoot.bowl.alpha = 0;
  216. exportRoot.pot.alpha = 1;
  217. exportRoot.pro.alpha = 1;
  218. proAnim(function() {
  219. exportRoot.pot.hsr.stop();
  220. fadeInAnim(exportRoot.pot.hsr);
  221. exportRoot.btn2.alpha = 1;
  222. btnAnim(exportRoot.btn2);
  223. });
  224. })
  225. exportRoot.btn2.addEventListener("mousedown", function() {
  226. exportRoot.btn2.removeAllEventListeners();
  227. exportRoot.btn2.alpha = 0;
  228. fadeInAnim(exportRoot.blackboard);
  229. exportRoot.ball1.alpha = 1;
  230. ballAnim(exportRoot.ball1);
  231. })
  232. exportRoot.blackboard.material1.addEventListener("mousedown", function() {
  233. exportRoot.blackboard.material1.removeAllEventListeners();
  234. materialAnim(exportRoot.blackboard.material1, 300, 180, function() {
  235. exportRoot.blackboard.material1.x -=300;
  236. exportRoot.blackboard.material1.y -=180;
  237. $(".shake-mode").show();
  238. shakeInit();
  239. });
  240. })
  241. exportRoot.blackboard.material2.addEventListener("mousedown", function() {
  242. exportRoot.blackboard.material2.removeAllEventListeners();
  243. materialAnim(exportRoot.blackboard.material2, 120, 180, function() {
  244. exportRoot.blackboard.material2.x -=120;
  245. exportRoot.blackboard.material2.y -=180;
  246. $(".shake-mode").show();
  247. shakeInit();
  248. });
  249. })
  250. exportRoot.blackboard.material3.addEventListener("mousedown", function() {
  251. exportRoot.blackboard.material3.removeAllEventListeners();
  252. materialAnim(exportRoot.blackboard.material3, -30, 180, function() {
  253. exportRoot.blackboard.material3.x -=30;
  254. exportRoot.blackboard.material3.y -=180;
  255. $(".shake-mode").show();
  256. shakeInit();
  257. });
  258. })
  259. }
  260. // 菜切完盘子上移动
  261. function playbowlAnim() {
  262. for (var i = 0; i < hsr_iconArr.length; i++) {
  263. if (hsr_iconArr[i].isClear == false) {
  264. return false;
  265. }
  266. }
  267. stage.removeChild(lineShape);
  268. clearInterval(lineTimr);
  269. exportRoot.removeAllEventListeners();
  270. bowlAnim(function() {
  271. dishMove(exportRoot.plate.hsr_icon1);
  272. dishMove(exportRoot.plate.hsr_icon2);
  273. dishMove(exportRoot.plate.hsr_icon3);
  274. dishMove(exportRoot.plate.hsr_icon4);
  275. });
  276. }
  277. function shakeInit() {
  278. if (window.DeviceMotionEvent) {
  279. window.addEventListener('devicemotion', deviceMotionHandler, false);
  280. } else {
  281. alert('您的手机不支持摇一摇功能!');
  282. }
  283. setTimeout(function(){
  284. window.removeEventListener('devicemotion', deviceMotionHandler, false);
  285. $(".shake-mode").hide();
  286. exportRoot.pot.hsr.play();
  287. exportRoot.btn3.alpha = 1;
  288. },3000)
  289. //获取加速度信息
  290. //通过监听上一步获取到的x, y, z 值在一定时间范围内的变化率,进行设备是否有进行晃动的判断。
  291. //而为了防止正常移动的误判,需要给该变化率设置一个合适的临界值。
  292. var SHAKE_THRESHOLD = 8000; //阈值越大,触发摇晃事件时手机摇晃的程度越剧烈
  293. var last_update = 0;
  294. var x, y, z, last_x = 0,
  295. last_y = 0,
  296. last_z = 0;
  297. function deviceMotionHandler(eventData) {
  298. var acceleration = eventData.accelerationIncludingGravity;
  299. var curTime = new Date().getTime();
  300. if ((curTime - last_update) > 10) {
  301. var diffTime = curTime - last_update;
  302. last_update = curTime;
  303. x = acceleration.x;
  304. y = acceleration.y;
  305. z = acceleration.z;
  306. var speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000;
  307. if (speed > SHAKE_THRESHOLD) {
  308. //dosomething
  309. $("#fire").addClass("anim-time");
  310. }else{
  311. $("#fire").removeClass("anim-time");
  312. }
  313. last_x = x;
  314. last_y = y;
  315. last_z = z;
  316. }
  317. }
  318. }
  319. //Registers the "tick" event listener.
  320. function fnStartAnimation() {
  321. stage.addChild(exportRoot, lineShape);
  322. createjs.Ticker.timingMode = createjs.Ticker.RAF_SYNCHED;
  323. createjs.Ticker.addEventListener("tick", stage);
  324. }
  325. fnStartAnimation();
  326. stageBreakHandler();
  327. }
  328. // 自适应
  329. var stageWidth, stageHeight, stageScale;
  330. function stageBreakHandler(event) {
  331. if (stageWidth != $(".warp").width() || stageHeight != $(".warp").height()) {
  332. stageWidth = $(".warp").width();
  333. stageHeight = $(".warp").height();
  334. stageScale = stageWidth / 640;
  335. canvas.style.width = 640 * stageScale + 'px';
  336. canvas.style.height = 1040 * stageScale + 'px';
  337. }
  338. }