在页面加载之前将内容添加到正文中

时间:2018-10-25 19:27:52

标签: vue.js vuejs2

我的vue应用需要确定是桌面设备还是移动设备正在查看它。

没问题。

但是,当应用程序在加载一秒钟后看起来不成比例时,就会出现“打cup”现象,这是不可接受的。

我的Vue应用程序如何立即更改body标签,以便页面顺利加载?

谢谢

更新:

感谢A.Broderick的帮助-以下是我的解决方案

3 个答案:

答案 0 :(得分:0)

尝试将应用的初始样式设置为display: none;,然后根据条件将其加载到桌面还是移动设备上做出反应?这样,必须首先从初始空白页中选择一个。但是,如果加载需要花费几秒钟的时间,那么看来代码的结构可能存在一些问题,请注意将其发布吗?

答案 1 :(得分:0)

您是否正在使用Vue Router?如果是这样,您可以通过路由器功能来计算它是PC还是移动设备。您最有可能希望将计算结果放在路由器的“ beforeEach()”函数中,或者如果只是一两个页面,则可以将其放在各个页面的“ beforeRouteEnter()”函数中。

答案 2 :(得分:0)

感谢A.Broderick的帮助

这是对我有用的方法:

  1. HTML:

    <html>
      ....
    <style>
      .noDisplay {
        display: none;
      }
    </style>
      </head>
      <body class="noDisplay">
       ....
     </body>
    
  2. App.vue:

      <script>
      // 3rd party
      var MobileDetect = require('mobile-detect')
    
      // Shell
      import DesktopShell from './components/layout/desktop/d_shell.vue'
      import MobileShell from './components/layout/mobile/m_shell.vue'
    
      export default {
         name: 'app',
         data() {
         return {
         windowWidth: 0,
         windowHeight: 0,
         goMobile: this.IsMobile()
         }
    },
    components: {
      appDesktopShell: DesktopShell,
      appMobileShell: MobileShell
    },
    methods: {
      IsMobile: function () {
        if (navigator.userAgent.match(/Android/i)
          || navigator.userAgent.match(/webOS/i)
          || navigator.userAgent.match(/iPhone/i)
          || navigator.userAgent.match(/iPad/i)
          || navigator.userAgent.match(/iPod/i)
          || navigator.userAgent.match(/BlackBerry/i)
          || navigator.userAgent.match(/Windows Phone/i)
        ) {
          this.goMobile = true;
          document.body.className += ' ' + 'is-mobile';
          document.querySelector('body').classList.remove('noDisplay');
          return true;
        }
        else {
          this.goMobile = false;
          document.querySelector('body').classList.remove('noDisplay');
          return false;
        }
      },
    },
    mounted() {
      this.$nextTick(() => {
        window.addEventListener('load', () => {
          this.windowWidth = window.outerWidth
          this.windowHeight = window.outerHeight
        });
        window.addEventListener('resize', () => {
          this.windowWidth = window.outerWidth
          this.windowHeight = window.outerHeight
        });
      })
    },
    

    }