App.vue 768 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <template>
  2. <div id="app">
  3. <div class="viewport">
  4. <div class="screen" ref="screen">
  5. <router-view />
  6. </div>
  7. </div>
  8. </div>
  9. </template>
  10. <script>
  11. export default {
  12. name: 'App',
  13. mounted() {
  14. this.fitScreen()
  15. window.addEventListener('resize', this.fitScreen)
  16. },
  17. beforeDestroy() {
  18. window.removeEventListener('resize', this.fitScreen)
  19. },
  20. methods: {
  21. fitScreen() {
  22. const scr = this.$refs.screen
  23. if (!scr) return
  24. const sw = 1920, sh = 1080
  25. const vw = window.innerWidth, vh = window.innerHeight
  26. const sx = vw / sw, sy = vh / sh
  27. scr.style.transform = `translate(-50%, -50%) scale(${sx}, ${sy})`
  28. }
  29. }
  30. }
  31. </script>
  32. <style lang="scss">
  33. #app {
  34. width: 100%;
  35. height: 100%;
  36. }
  37. </style>