ClickMapPage.vue 2.0 KB

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