ClickMapPage.vue 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <template>
  2. <div ref="page" class="map-page">
  3. <div class="content" v-html="mapHtml"></div>
  4. </div>
  5. </template>
  6. <script>
  7. //-----------------------------------------------------------------------------
  8. import vueComponent from '../../vueComponent.js';
  9. import {sleep} from '../../../share/utils';
  10. import {clickMap, clickMapText} from '../share/clickMap';
  11. class ClickMapPage {
  12. fontSize = '200%';
  13. created() {
  14. }
  15. get mapHtml() {
  16. let result = '<div style="flex: 1; display: flex;">';
  17. let px = 0;
  18. for (const x in clickMap) {
  19. let div = `<div style="display: flex; flex-direction: column; width: ${x - px}%;">`;
  20. let py = 0;
  21. for (const y in clickMap[x]) {
  22. const text = clickMapText[clickMap[x][y]].split(' ');
  23. let divText = '';
  24. for (const t of text)
  25. divText += `<span>${t}</span>`;
  26. div += `<div style="display: flex; flex-direction: column; justify-content: center; align-items: center; ` +
  27. `height: ${y - py}%; border: 1px solid white; font-size: ${this.fontSize}; line-height: 100%;">${divText}</div>`;
  28. py = y;
  29. }
  30. div += '</div>';
  31. px = x;
  32. result += div;
  33. }
  34. result += '</div>';
  35. return result;
  36. }
  37. async slowDisappear() {
  38. const page = this.$refs.page;
  39. page.style.animation = 'click-map-disappear 5s ease-in 1';
  40. await sleep(5000);
  41. }
  42. }
  43. export default vueComponent(ClickMapPage);
  44. //-----------------------------------------------------------------------------
  45. </script>
  46. <style scoped>
  47. .map-page {
  48. position: absolute;
  49. width: 100%;
  50. height: 100%;
  51. z-index: 19;
  52. background-color: rgba(0, 0, 0, 0.9);
  53. color: white;
  54. display: flex;
  55. }
  56. .content {
  57. flex: 1;
  58. display: flex;
  59. }
  60. </style>
  61. <style>
  62. @keyframes click-map-disappear {
  63. 0% { opacity: 0.9; }
  64. 100% { opacity: 0; }
  65. }
  66. </style>