necklace.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651
  1. <template>
  2. <div>
  3. <div class="tip">
  4. <img src="../assets/img/curtainJs.png" alt="" />
  5. </div>
  6. <div class="img">
  7. <div
  8. id="screan"
  9. v-drag="{
  10. go,
  11. setPan,
  12. getPan,
  13. setTou,
  14. getTou,
  15. setAi,
  16. getAi,
  17. setScrean,
  18. getScrean,
  19. setearphoneJack,
  20. getearphoneJack,
  21. setearphone,
  22. getearphone,
  23. }"
  24. >
  25. <img src="../assets/img/light/screan.png" alt="" />
  26. </div>
  27. <div
  28. id="ai"
  29. v-drag="{
  30. go,
  31. setPan,
  32. getPan,
  33. setTou,
  34. getTou,
  35. setAi,
  36. getAi,
  37. setScrean,
  38. getScrean,
  39. setearphoneJack,
  40. getearphoneJack,
  41. setearphone,
  42. getearphone,
  43. }"
  44. >
  45. <img src="../assets/img/ai.png" alt="" />
  46. </div>
  47. <div
  48. id="tou"
  49. v-drag="{
  50. go,
  51. setPan,
  52. getPan,
  53. setTou,
  54. getTou,
  55. setAi,
  56. getAi,
  57. setScrean,
  58. getScrean,
  59. setearphoneJack,
  60. getearphoneJack,
  61. setearphone,
  62. getearphone,
  63. }"
  64. >
  65. <img src="../assets/img/door/tou.png" alt="" />
  66. </div>
  67. <div
  68. id="necklace"
  69. v-drag="{
  70. go,
  71. setPan,
  72. getPan,
  73. setTou,
  74. getTou,
  75. setAi,
  76. getAi,
  77. setScrean,
  78. getScrean,
  79. setearphoneJack,
  80. getearphoneJack,
  81. setearphone,
  82. getearphone,
  83. }"
  84. >
  85. <img src="../assets/img/necklace/necklace.png" alt="" />
  86. </div>
  87. <div
  88. id="earphoneJack"
  89. v-drag="{
  90. go,
  91. setPan,
  92. getPan,
  93. setTou,
  94. getTou,
  95. setAi,
  96. getAi,
  97. setScrean,
  98. getScrean,
  99. setearphoneJack,
  100. getearphoneJack,
  101. setearphone,
  102. getearphone,
  103. }"
  104. >
  105. <img src="../assets/img/necklace/earphoneJack.png" alt="" />
  106. </div>
  107. <div
  108. id="earphone"
  109. v-drag="{
  110. go,
  111. setPan,
  112. getPan,
  113. setTou,
  114. getTou,
  115. setAi,
  116. getAi,
  117. setScrean,
  118. getScrean,
  119. setearphoneJack,
  120. getearphoneJack,
  121. setearphone,
  122. getearphone,
  123. }"
  124. >
  125. <img src="../assets/img/necklace/earphone.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. panThing: "",
  142. tou: "",
  143. ai: "",
  144. screan: "",
  145. earphoneJack: "",
  146. earphone: "",
  147. };
  148. },
  149. directives: {
  150. drag: {
  151. // 指令的定义
  152. inserted: function (el, binding) {
  153. // el.drag();
  154. console.log(el);
  155. //获取元素
  156. // var dv = document.getElementById("dv");
  157. let x = 0;
  158. let y = 0;
  159. let l = 0;
  160. let t = 0;
  161. let isDown = false;
  162. var _screan = document.getElementById("screan");
  163. var _ai = document.getElementById("ai");
  164. var _tou = document.getElementById("tou");
  165. var _necklace = document.getElementById("necklace");
  166. var _earphoneJack = document.getElementById("earphoneJack");
  167. var _earphone = document.getElementById("earphone");
  168. var musicC = document.getElementById("musicC");
  169. //鼠标按下事件
  170. el.onmousedown = function (e) {
  171. //获取x坐标和y坐标
  172. e.preventDefault();
  173. x = e.clientX;
  174. y = e.clientY;
  175. //获取左部和顶部的偏移量
  176. l = el.offsetLeft;
  177. t = el.offsetTop;
  178. //开关打开
  179. isDown = true;
  180. //设置样式
  181. el.style.cursor = "move";
  182. subiao(el);
  183. };
  184. function subiao(cdiv) {
  185. document.onmousemove = function (e) {
  186. if (isDown == false) {
  187. return;
  188. }
  189. //获取x和y
  190. var nx = e.clientX;
  191. var ny = e.clientY;
  192. //计算移动后的左偏移量和顶部的偏移量
  193. var nl = nx - (x - l);
  194. var nt = ny - (y - t);
  195. cdiv.style.left = nl + "px";
  196. cdiv.style.top = nt + "px";
  197. if (el.id == "screan") {
  198. binding.value.setPan("screan");
  199. moveP(nl, nt, "screan");
  200. }
  201. if (el.id == "ai") {
  202. binding.value.setPan("ai");
  203. moveP(nl, nt, "ai");
  204. }
  205. if (el.id == "tou") {
  206. binding.value.setPan("tou");
  207. moveP(nl, nt, "tou");
  208. }
  209. if (el.id == "necklace") {
  210. binding.value.setPan("necklace");
  211. moveP(nl, nt, "necklace");
  212. }
  213. if (el.id == "earphoneJack") {
  214. binding.value.setPan("earphoneJack");
  215. moveP(nl, nt, "earphoneJack");
  216. }
  217. if (el.id == "earphone") {
  218. binding.value.setPan("earphone");
  219. moveP(nl, nt, "earphone");
  220. }
  221. };
  222. }
  223. //鼠标抬起事件
  224. el.onmouseup = function (e) {
  225. //开关关闭
  226. isDown = false;
  227. el.style.cursor = "default";
  228. document.onmousemove = null;
  229. var nx = e.clientX;
  230. var ny = e.clientY;
  231. var nl = nx - (x - l);
  232. var nt = ny - (y - t);
  233. if (binding.value.getPan() == "screan") {
  234. st(nl, nt, "screan");
  235. }
  236. if (binding.value.getPan() == "ai") {
  237. st(nl, nt, "ai");
  238. }
  239. if (binding.value.getPan() == "tou") {
  240. st(nl, nt, "tou");
  241. }
  242. if (binding.value.getPan() == "necklace") {
  243. st(nl, nt, "necklace");
  244. }
  245. if (binding.value.getPan() == "earphoneJack") {
  246. st(nl, nt, "earphoneJack");
  247. }
  248. if (binding.value.getPan() == "earphone") {
  249. st(nl, nt, "earphone");
  250. }
  251. pan();
  252. };
  253. function pan() {
  254. var policeL = _necklace.offsetLeft;
  255. var policeT = _necklace.offsetTop;
  256. var btn = document.getElementsByClassName("button")[0];
  257. var right = document.getElementsByClassName("right")[0];
  258. if (
  259. binding.value.getTou() == 1 &&
  260. binding.value.getAi() == 1 &&
  261. binding.value.getScrean() == 1 &&
  262. binding.value.getearphoneJack() == 1 &&
  263. binding.value.getearphone() == 1
  264. ) {
  265. btn.className = "button dark";
  266. btn.onclick = function () {
  267. binding.value.go();
  268. };
  269. right.style.display = "block";
  270. right.style.left = policeL - 43 + "px";
  271. right.style.top = policeT + 107 + "px";
  272. } else {
  273. btn.className = "button";
  274. btn.onclick = null;
  275. right.style.display = "none";
  276. }
  277. }
  278. function st(nl, nt, type) {
  279. var screanL = _screan.offsetLeft;
  280. var screanT = _screan.offsetTop;
  281. var aiL = _ai.offsetLeft;
  282. var aiT = _ai.offsetTop;
  283. var touL = _tou.offsetLeft;
  284. var touT = _tou.offsetTop;
  285. var necklaceL = _necklace.offsetLeft;
  286. var necklaceT = _necklace.offsetTop;
  287. var earphoneJackL = _earphoneJack.offsetLeft;
  288. var earphoneJackT = _earphoneJack.offsetTop;
  289. var earphoneL = _earphone.offsetLeft;
  290. var earphoneT = _earphone.offsetTop;
  291. var firstL = aiL - touL;
  292. var firstT = aiT - touT;
  293. var secondL = necklaceL - aiL;
  294. var secondT = necklaceT - aiT;
  295. var thirdthL = necklaceL - screanL;
  296. var thirdthT = necklaceT - screanT;
  297. var fourthL = screanL - earphoneJackL;
  298. var fourthT = screanT - earphoneJackT;
  299. var fivethL = earphoneJackL - earphoneL;
  300. var fivethT = earphoneJackT - earphoneT;
  301. if (
  302. -77 < firstL &&
  303. firstL < -10 &&
  304. 15 < firstT &&
  305. firstT < 100 &&
  306. type == "tou"
  307. ) {
  308. _tou.style.left = aiL + 40 + "px";
  309. _tou.style.top = aiT - 73 + "px";
  310. binding.value.setTou(1);
  311. } else if (type == "tou") {
  312. binding.value.setTou(0);
  313. }
  314. if (
  315. -188 < secondL &&
  316. secondL < 35 &&
  317. -113 < secondT &&
  318. secondT < 90 &&
  319. type == "ai" &&
  320. binding.value.getTou() == 1
  321. ) {
  322. _ai.style.left = necklaceL + 74 + "px";
  323. _ai.style.top = necklaceT + 11 + "px";
  324. if (binding.value.getTou() == 1) {
  325. _tou.style.left = necklaceL + 74 + 40 + "px";
  326. _tou.style.top = necklaceT + 11 - 73 + "px";
  327. }
  328. binding.value.setAi(1);
  329. } else if (type == "ai") {
  330. binding.value.setAi(0);
  331. }
  332. if (
  333. -180 < thirdthL &&
  334. thirdthL < 32 &&
  335. -108 < thirdthT &&
  336. thirdthT < 86 &&
  337. type == "screan"
  338. ) {
  339. _screan.style.left = necklaceL + 74 + "px";
  340. _screan.style.top = necklaceT + 12 + "px";
  341. binding.value.setScrean(1);
  342. } else if (type == "screan") {
  343. binding.value.setScrean(0);
  344. }
  345. if (
  346. -128 < fourthL &&
  347. fourthL < -102 &&
  348. -96 < fourthT &&
  349. fourthT < -28 &&
  350. binding.value.getTou() == 1 &&
  351. binding.value.getAi() == 1 &&
  352. binding.value.getScrean() == 1 &&
  353. type == "earphoneJack"
  354. ) {
  355. _earphoneJack.style.left = screanL + 115 + "px";
  356. _earphoneJack.style.top = screanT + 68 + "px";
  357. binding.value.setearphoneJack(1);
  358. } else if (type == "earphoneJack") {
  359. binding.value.setearphoneJack(0);
  360. }
  361. if (
  362. -10 < fivethL &&
  363. fivethL < 10 &&
  364. -56 < fivethT &&
  365. fivethT < 84 &&
  366. binding.value.getTou() == 1 &&
  367. binding.value.getAi() == 1 &&
  368. binding.value.getScrean() == 1 &&
  369. binding.value.getearphoneJack() == 1 &&
  370. type == "earphone"
  371. ) {
  372. _earphone.style.left = earphoneJackL + 0 + "px";
  373. _earphone.style.top = earphoneJackT + 38 + "px";
  374. binding.value.setearphone(1);
  375. } else if (type == "earphone") {
  376. binding.value.setearphone(0);
  377. }
  378. }
  379. function playMusic() {
  380. musicC.play();
  381. }
  382. function moveP(nl, nt, type) {
  383. if (binding.value.getTou() == 1 && type == "ai") {
  384. _tou.style.left = nl + 40 + "px";
  385. _tou.style.top = nt - 73 + "px";
  386. }
  387. if (
  388. binding.value.getTou() == 1 &&
  389. binding.value.getAi() == 1 &&
  390. type == "necklace"
  391. ) {
  392. _ai.style.left = nl + 74 + "px";
  393. _ai.style.top = nt + 11 + "px";
  394. _tou.style.left = nl + 114 + "px";
  395. _tou.style.top = nt - 62 + "px";
  396. }
  397. if (binding.value.getScrean() == 1 && type == "necklace") {
  398. _screan.style.left = nl + 74 + "px";
  399. _screan.style.top = nt + 12 + "px";
  400. }
  401. if (
  402. binding.value.getTou() == 1 &&
  403. binding.value.getAi() == 1 &&
  404. binding.value.getScrean() == 1 &&
  405. type == "necklace"
  406. ) {
  407. _screan.style.left = nl + 74 + "px";
  408. _screan.style.top = nt + 12 + "px";
  409. _ai.style.left = nl + 74 + "px";
  410. _ai.style.top = nt + 11 + "px";
  411. _tou.style.left = nl + 114 + "px";
  412. _tou.style.top = nt - 62 + "px";
  413. }
  414. if (
  415. binding.value.getTou() == 1 &&
  416. binding.value.getAi() == 1 &&
  417. binding.value.getScrean() == 1 &&
  418. binding.value.getearphoneJack() == 1 &&
  419. type == "necklace"
  420. ) {
  421. _screan.style.left = nl + 74 + "px";
  422. _screan.style.top = nt + 12 + "px";
  423. _ai.style.left = nl + 74 + "px";
  424. _ai.style.top = nt + 11 + "px";
  425. _tou.style.left = nl + 114 + "px";
  426. _tou.style.top = nt - 62 + "px";
  427. _earphoneJack.style.left = nl + 189 + "px";
  428. _earphoneJack.style.top = nt + 80 + "px";
  429. }
  430. if (
  431. binding.value.getTou() == 1 &&
  432. binding.value.getAi() == 1 &&
  433. binding.value.getScrean() == 1 &&
  434. binding.value.getearphoneJack() == 1 &&
  435. binding.value.getearphone() == 1 &&
  436. type == "necklace"
  437. ) {
  438. _screan.style.left = nl + 74 + "px";
  439. _screan.style.top = nt + 12 + "px";
  440. _ai.style.left = nl + 74 + "px";
  441. _ai.style.top = nt + 11 + "px";
  442. _tou.style.left = nl + 114 + "px";
  443. _tou.style.top = nt - 62 + "px";
  444. _earphoneJack.style.left = nl + 189 + "px";
  445. _earphoneJack.style.top = nt + 80 + "px";
  446. _earphone.style.left = nl + 189 + "px";
  447. _earphone.style.top = nt + 118 + "px";
  448. }
  449. }
  450. },
  451. },
  452. },
  453. methods: {
  454. go() {
  455. this.$router.push("/blockly");
  456. },
  457. setPan(value) {
  458. this.panThing = value;
  459. },
  460. getPan() {
  461. return this.panThing;
  462. },
  463. setTou(value) {
  464. this.tou = value;
  465. },
  466. getTou() {
  467. return this.tou;
  468. },
  469. setAi(value) {
  470. this.ai = value;
  471. },
  472. getAi() {
  473. return this.ai;
  474. },
  475. setScrean(value) {
  476. this.screan = value;
  477. },
  478. getScrean() {
  479. return this.screan;
  480. },
  481. setearphoneJack(value) {
  482. this.earphoneJack = value;
  483. },
  484. getearphoneJack() {
  485. return this.earphoneJack;
  486. },
  487. setearphone(value) {
  488. this.earphone = value;
  489. },
  490. getearphone() {
  491. return this.earphone;
  492. },
  493. },
  494. };
  495. </script>
  496. <style scoped>
  497. html,
  498. body {
  499. margin: 0;
  500. padding: 0;
  501. width: 100%;
  502. }
  503. .tip {
  504. margin: 25px 0 30px 20px;
  505. }
  506. #screan > img,
  507. #ai > img,
  508. #tou > img,
  509. #necklace > img,
  510. #earphoneJack > img,
  511. #earphone > img,
  512. .right > img {
  513. width: 100%;
  514. height: 100%;
  515. user-select: none;
  516. }
  517. .img {
  518. display: flex;
  519. flex-direction: row;
  520. justify-content: flex-end;
  521. margin: auto;
  522. width: 70%;
  523. /* position: relative; */
  524. }
  525. #screan {
  526. width: 150px;
  527. position: absolute;
  528. left: 12%;
  529. top: 50%;
  530. transform: translateY(-50%);
  531. z-index: 4;
  532. }
  533. #ai {
  534. width: 150px;
  535. position: absolute;
  536. top: 50%;
  537. left: 25%;
  538. transform: translateY(-50%);
  539. z-index: 3;
  540. }
  541. #tou {
  542. width: 70px;
  543. position: absolute;
  544. top: 50%;
  545. left: 38%;
  546. transform: translateY(-50%);
  547. z-index: 2;
  548. }
  549. #necklace {
  550. width: 300px;
  551. position: absolute;
  552. top: 50%;
  553. left: 47%;
  554. transform: translateY(-50%);
  555. z-index: 1;
  556. }
  557. #earphoneJack {
  558. width: 30px;
  559. position: absolute;
  560. top: 60%;
  561. left: 66%;
  562. transform: translateY(-50%);
  563. z-index: 2;
  564. }
  565. #earphone {
  566. width: 350px;
  567. position: absolute;
  568. top: 50%;
  569. left: 71%;
  570. transform: translateY(-50%);
  571. z-index: 2;
  572. }
  573. .button {
  574. color: #fff;
  575. background: #8ca1de;
  576. width: 550px;
  577. height: 55px;
  578. font-size: 20px;
  579. text-align: center;
  580. line-height: 55px;
  581. position: absolute;
  582. bottom: 10%;
  583. left: 50%;
  584. transform: translateX(-50%);
  585. user-select: none;
  586. }
  587. .right {
  588. width: 40px;
  589. position: absolute;
  590. left: 55%;
  591. top: 70%;
  592. display: none;
  593. }
  594. .dark {
  595. background: #5b79d0;
  596. cursor: pointer;
  597. }
  598. </style>