shop.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595
  1. <template>
  2. <div>
  3. <div class="tip">
  4. <img src="../assets/img/shop/tips.png" alt="" />
  5. </div>
  6. <div class="img">
  7. <div
  8. id="screan"
  9. v-drag="{
  10. go,
  11. setPan,
  12. getPan,
  13. setJ1,
  14. getJ1,
  15. setJ2,
  16. getJ2,
  17. setA,
  18. getA,
  19. setP,
  20. getP,
  21. setT,
  22. getT,
  23. }"
  24. >
  25. <img src="../assets/img/light/screan.png" alt="" />
  26. </div>
  27. <div
  28. id="tou"
  29. v-drag="{
  30. go,
  31. setPan,
  32. getPan,
  33. setJ1,
  34. getJ1,
  35. setJ2,
  36. getJ2,
  37. setA,
  38. getA,
  39. setP,
  40. getP,
  41. setT,
  42. getT,
  43. }"
  44. >
  45. <img src="../assets/img/tou1.png" alt="" />
  46. </div>
  47. <div
  48. id="ai"
  49. v-drag="{
  50. go,
  51. setPan,
  52. getPan,
  53. setJ1,
  54. getJ1,
  55. setJ2,
  56. getJ2,
  57. setA,
  58. getA,
  59. setP,
  60. getP,
  61. setT,
  62. getT,
  63. }"
  64. >
  65. <img src="../assets/img/ai.png" alt="" />
  66. </div>
  67. <div
  68. id="jjj1"
  69. v-drag="{
  70. go,
  71. setPan,
  72. getPan,
  73. setJ1,
  74. getJ1,
  75. setJ2,
  76. getJ2,
  77. setA,
  78. getA,
  79. setP,
  80. getP,
  81. setT,
  82. getT,
  83. }"
  84. >
  85. <img src="../assets/img/shop/j21.png" alt="" />
  86. </div>
  87. <div
  88. id="jjj2"
  89. v-drag="{
  90. go,
  91. setPan,
  92. getPan,
  93. setJ1,
  94. getJ1,
  95. setJ2,
  96. getJ2,
  97. setA,
  98. getA,
  99. setP,
  100. getP,
  101. setT,
  102. getT,
  103. }"
  104. >
  105. <img src="../assets/img/shop/j22.png" alt="" />
  106. </div>
  107. <div
  108. id="police"
  109. v-drag="{
  110. go,
  111. setPan,
  112. getPan,
  113. setJ1,
  114. getJ1,
  115. setJ2,
  116. getJ2,
  117. setA,
  118. getA,
  119. setP,
  120. getP,
  121. setT,
  122. getT,
  123. }"
  124. >
  125. <img src="../assets/img/shop/j1.png" alt="" />
  126. </div>
  127. </div>
  128. <div class="right"><img src="../assets/img/right.png" alt="" /></div>
  129. <div class="button">进入CocoBlockly编程平台</div>
  130. <video
  131. id="musicC"
  132. :src="require('../assets/music/click.mp3')"
  133. v-show="false"
  134. ></video>
  135. </div>
  136. </template>
  137. <script>
  138. export default {
  139. data() {
  140. return {
  141. that: this,
  142. panThing: "",
  143. jjj1: "",
  144. jjj2: "",
  145. aaa: "",
  146. ppp: "",
  147. ttt: "",
  148. };
  149. },
  150. directives: {
  151. drag: {
  152. // 指令的定义
  153. inserted: function (el, binding) {
  154. // el.drag();
  155. console.log(el);
  156. //获取元素
  157. // var dv = document.getElementById("dv");
  158. let x = 0;
  159. let y = 0;
  160. let l = 0;
  161. let t = 0;
  162. let isDown = false;
  163. var dv = document.getElementById("screan");
  164. var dv1 = document.getElementById("tou");
  165. var dv2 = document.getElementById("ai");
  166. var dvj1 = document.getElementById("jjj1");
  167. var dvj2 = document.getElementById("jjj2");
  168. var dv3 = document.getElementById("police");
  169. var musicC = document.getElementById("musicC");
  170. //鼠标按下事件
  171. el.onmousedown = function (e) {
  172. //获取x坐标和y坐标
  173. e.preventDefault();
  174. x = e.clientX;
  175. y = e.clientY;
  176. //获取左部和顶部的偏移量
  177. l = el.offsetLeft;
  178. t = el.offsetTop;
  179. //开关打开
  180. isDown = true;
  181. //设置样式
  182. el.style.cursor = "move";
  183. subiao(el);
  184. };
  185. function subiao(cdiv) {
  186. document.onmousemove = function (e) {
  187. if (isDown == false) {
  188. return;
  189. }
  190. //获取x和y
  191. var nx = e.clientX;
  192. var ny = e.clientY;
  193. //计算移动后的左偏移量和顶部的偏移量
  194. var nl = nx - (x - l);
  195. var nt = ny - (y - t);
  196. cdiv.style.left = nl + "px";
  197. cdiv.style.top = nt + "px";
  198. if (el.id == "screan") {
  199. binding.value.setPan("screan");
  200. moveP(nl, nt, 1);
  201. }
  202. if (el.id == "tou") {
  203. binding.value.setPan("tou");
  204. moveP(nl, nt, 2);
  205. }
  206. if (el.id == "ai") {
  207. binding.value.setPan("ai");
  208. moveP(nl, nt, 4);
  209. }
  210. if (el.id == "jjj1") {
  211. binding.value.setPan("jjj1");
  212. moveP(nl, nt, 5);
  213. }
  214. if (el.id == "jjj2") {
  215. binding.value.setPan("jjj2");
  216. moveP(nl, nt, 6);
  217. }
  218. if (el.id == "police") {
  219. binding.value.setPan("police");
  220. moveP(nl, nt, 3);
  221. }
  222. };
  223. }
  224. //鼠标抬起事件
  225. el.onmouseup = function (e) {
  226. //开关关闭
  227. isDown = false;
  228. el.style.cursor = "default";
  229. document.onmousemove = null;
  230. var nx = e.clientX;
  231. var ny = e.clientY;
  232. var nl = nx - (x - l);
  233. var nt = ny - (y - t);
  234. if (binding.value.getPan() == "screan") {
  235. st(nl, nt, 1);
  236. }
  237. if (binding.value.getPan() == "tou") {
  238. st(nl, nt, 2);
  239. }
  240. if (binding.value.getPan() == "ai") {
  241. st(nl, nt, 4);
  242. }
  243. if (binding.value.getPan() == "jjj1") {
  244. st(nl, nt, 5);
  245. }
  246. if (binding.value.getPan() == "jjj2") {
  247. st(nl, nt, 6);
  248. }
  249. if (binding.value.getPan() == "police") {
  250. st(nl, nt, 3);
  251. }
  252. pan();
  253. };
  254. function pan() {
  255. var pinL = dv.offsetLeft;
  256. var pinT = dv.offsetTop;
  257. var touL = dv1.offsetLeft;
  258. var touT = dv1.offsetTop;
  259. var aiL = dv2.offsetLeft;
  260. var aiT = dv2.offsetTop;
  261. var j1L = dvj1.offsetLeft;
  262. var j1T = dvj1.offsetTop;
  263. var j2L = dvj2.offsetLeft;
  264. var j2T = dvj2.offsetTop;
  265. var policeL = dv3.offsetLeft;
  266. var policeT = dv3.offsetTop;
  267. var btn = document.getElementsByClassName("button")[0];
  268. var right = document.getElementsByClassName("right")[0];
  269. if (
  270. binding.value.getJ1() == 1 &&
  271. binding.value.getJ2() == 1 &&
  272. binding.value.getA() == 1 &&
  273. binding.value.getP() == 1 &&
  274. binding.value.getT() == 1
  275. ) {
  276. btn.className = "button dark";
  277. btn.onclick = function () {
  278. binding.value.go();
  279. };
  280. right.style.display = "block";
  281. right.style.left = policeL + 335 + "px";
  282. right.style.top = policeT + 65 + "px";
  283. } else {
  284. btn.className = "button";
  285. btn.onclick = null;
  286. right.style.display = "none";
  287. }
  288. }
  289. function st(nl, nt, type) {
  290. var pinL = dv.offsetLeft;
  291. var pinT = dv.offsetTop;
  292. var touL = dv1.offsetLeft;
  293. var touT = dv1.offsetTop;
  294. var aiL = dv2.offsetLeft;
  295. var aiT = dv2.offsetTop;
  296. var j1L = dvj1.offsetLeft;
  297. var j1T = dvj1.offsetTop;
  298. var j2L = dvj2.offsetLeft;
  299. var j2T = dvj2.offsetTop;
  300. var policeL = dv3.offsetLeft;
  301. var policeT = dv3.offsetTop;
  302. var jp1L = j1L - policeL;
  303. var jp1T = j1T - policeT;
  304. var jp2L = j2L - policeL;
  305. var jp2T = j2T - policeT;
  306. var apL = aiL - policeL;
  307. var apT = aiT - policeT;
  308. var ppL = pinL - policeL;
  309. var ppT = pinT - policeT;
  310. var tpL = touL - pinL;
  311. var tpT = touT - pinT;
  312. if (-10 < jp1L && jp1L < 30 && 60 < jp1T && jp1T < 100 && type == 5) {
  313. dvj1.style.left = policeL + 11 + "px";
  314. dvj1.style.top = policeT + 79 + "px";
  315. binding.value.setJ1(1); //设置第一个j2可以跟着j1一起动
  316. playMusic();
  317. } else if (type == 5) {
  318. binding.value.setJ1(0);
  319. }
  320. if (
  321. 250 < jp2L &&
  322. jp2L < 290 &&
  323. 60 < jp2T &&
  324. jp2T < 100 &&
  325. type == 6
  326. ) {
  327. dvj2.style.left = policeL + 271 + "px";
  328. dvj2.style.top = policeT + 80 + "px";
  329. binding.value.setJ2(1); //设置第二个j2可以跟着j1一起动
  330. playMusic();
  331. } else if (type == 6) {
  332. binding.value.setJ2(0);
  333. }
  334. if (69 < apL && apL < 100 && -10 < apT && apT < 30 && type == 4) {
  335. dv2.style.left = policeL + 89 + "px";
  336. dv2.style.top = policeT + 10 + "px";
  337. binding.value.setA(1); //设置ai可以跟着j1一起动
  338. playMusic();
  339. } else if (type == 4) {
  340. binding.value.setA(0);
  341. }
  342. if (67 < ppL && ppL < 100 && -10 < ppT && ppT < 30 && type == 1) {
  343. dv.style.left = policeL + 87 + "px";
  344. dv.style.top = policeT + 9 + "px";
  345. binding.value.setP(1); //设置第屏幕可以跟着j1一起动
  346. if (binding.value.getT() == 1) {
  347. dv1.style.left = policeL + 87 + 40 + "px";
  348. dv1.style.top = policeT + 9 - 70 + "px";
  349. }
  350. playMusic();
  351. } else if (type == 1) {
  352. binding.value.setP(0);
  353. }
  354. if (20 < tpL && tpL < 60 && -90 < tpT && tpT < -50 && type == 2) {
  355. dv1.style.left = pinL + 40 + "px";
  356. dv1.style.top = pinT - 70 + "px";
  357. binding.value.setT(1); //设置摄像头可以跟着屏幕一起动
  358. playMusic();
  359. } else if (type == 2) {
  360. binding.value.setT(0);
  361. }
  362. }
  363. function playMusic() {
  364. musicC.play();
  365. }
  366. function moveP(nl, nt, type) {
  367. if (binding.value.getJ1() == 1 && type == 3) {
  368. dvj1.style.left = nl + 11 + "px";
  369. dvj1.style.top = nt + 79 + "px";
  370. }
  371. if (binding.value.getJ2() == 1 && type == 3) {
  372. dvj2.style.left = nl + 271 + "px";
  373. dvj2.style.top = nt + 80 + "px";
  374. }
  375. if (binding.value.getA() == 1 && type == 3) {
  376. dv2.style.left = nl + 89 + "px";
  377. dv2.style.top = nt + 10 + "px";
  378. }
  379. if (binding.value.getP() == 1 && type == 3) {
  380. dv.style.left = nl + 87 + "px";
  381. dv.style.top = nt + 9 + "px";
  382. if (binding.value.getT() == 1) {
  383. dv1.style.left = nl + 87 + 40 + "px";
  384. dv1.style.top = nt + 9 - 70 + "px";
  385. }
  386. }
  387. if (binding.value.getT() == 1 && type == 1) {
  388. dv1.style.left = nl + 40 + "px";
  389. dv1.style.top = nt - 70 + "px";
  390. }
  391. }
  392. },
  393. },
  394. },
  395. methods: {
  396. go() {
  397. this.$router.push("/blockly");
  398. },
  399. setPan(value) {
  400. this.panThing = value;
  401. },
  402. getPan() {
  403. return this.panThing;
  404. },
  405. setJ1(value) {
  406. this.jjj1 = value;
  407. },
  408. getJ1() {
  409. return this.jjj1;
  410. },
  411. setJ2(value) {
  412. this.jjj2 = value;
  413. },
  414. getJ2() {
  415. return this.jjj2;
  416. },
  417. setA(value) {
  418. this.aaa = value;
  419. },
  420. getA() {
  421. return this.aaa;
  422. },
  423. setP(value) {
  424. this.ppp = value;
  425. },
  426. getP() {
  427. return this.ppp;
  428. },
  429. setT(value) {
  430. this.ttt = value;
  431. },
  432. getT() {
  433. return this.ttt;
  434. },
  435. },
  436. };
  437. </script>
  438. <style scoped>
  439. html,
  440. body {
  441. margin: 0;
  442. padding: 0;
  443. width: 100%;
  444. }
  445. .tip {
  446. margin: 25px 0 30px 20px;
  447. width: 419px;
  448. }
  449. .tip > img,
  450. #screan > img,
  451. #tou > img,
  452. #ai > img,
  453. #police > img,
  454. .right > img,
  455. #jjj1 > img,
  456. #jjj2 > img {
  457. width: 100%;
  458. height: 100%;
  459. user-select: none;
  460. }
  461. .img {
  462. display: flex;
  463. flex-direction: row;
  464. justify-content: flex-end;
  465. margin: auto;
  466. width: 70%;
  467. /* position: relative; */
  468. }
  469. #screan {
  470. width: 130px;
  471. position: absolute;
  472. left: 10%;
  473. top: 50%;
  474. transform: translateY(-50%);
  475. z-index: 5;
  476. }
  477. #ai {
  478. width: 130px;
  479. position: absolute;
  480. top: 50%;
  481. left: 25%;
  482. transform: translateY(-50%);
  483. z-index: 3;
  484. }
  485. #tou {
  486. width: 50px;
  487. position: absolute;
  488. top: 50%;
  489. left: 40%;
  490. transform: translateY(-50%);
  491. z-index: 4;
  492. }
  493. #jjj1 {
  494. width: 45px;
  495. position: absolute;
  496. left: 50%;
  497. top: 50%;
  498. transform: translateY(-50%);
  499. z-index: 5;
  500. }
  501. #jjj2 {
  502. width: 45px;
  503. position: absolute;
  504. left: 58%;
  505. top: 50%;
  506. transform: translateY(-50%);
  507. z-index: 5;
  508. }
  509. #police {
  510. width: 315px;
  511. position: absolute;
  512. left: 70%;
  513. top: 50%;
  514. transform: translateY(-50%);
  515. z-index: 2;
  516. }
  517. .button {
  518. color: #fff;
  519. background: #8ca1de;
  520. width: 550px;
  521. height: 55px;
  522. font-size: 20px;
  523. text-align: center;
  524. line-height: 55px;
  525. position: absolute;
  526. bottom: 10%;
  527. left: 50%;
  528. transform: translateX(-50%);
  529. user-select: none;
  530. }
  531. .right {
  532. width: 40px;
  533. position: absolute;
  534. left: 55%;
  535. top: 70%;
  536. display: none;
  537. }
  538. .dark {
  539. background: #5b79d0;
  540. cursor: pointer;
  541. }
  542. </style>