Vue页面骨架屏注入方法

  

作为与用户联系最为密切的前端开发者,用户体验是最值得关注的问题。关于页加载面状态的展示,主流的主要有加载图和进度条两种。除此之外,越来越多的应用采用了“骨架屏”的方式去展示未加载内容,给予了用户焕然一新的体验。随着温泉在前端界的逐渐流行,首屏加载的问题也在困扰着开发者们。那么有没有一个办法,也能让温泉用上骨架屏呢?这就是这篇文章将要探讨的问题。

  

文章相关代码已经同步到Github,欢迎查阅~

  

  

简单来说,骨架屏就是在页面内容未加载完成的时候,先使用一些图形进行占位,待内容加载完成之后再把它替换掉。

  

 Vue页面骨架屏注入方法”>,</p>
  <p>这个技术在一些以内容为主的应用和网页应用较多,接下来我们以一个简单的Vue工程为例,一起探索如何在基于Vue的SPA项目中实现骨架屏。</p>
  <p> </p>
  <p>为了简单起见,我们使用vue-cli搭配webpack-simple这个模板来新建项目:<br/>
  </p>
  <p> <代码> vue init webpack-simple vue-skeleton </代码> </p>
  <p>这时我们便获得了一个最基本的Vue项目:<br/>
  </p>
  
  <pre类=   ├──package.json   ├──src   │├──App.vue   │├──资产   │└──main.js   ├──index . html   └──webpack.conf.js   
     

安装完了依赖以后,便可以通过<代码> npm运行dev>         & lt; !DOCTYPE html>   & lt; html lang=癳n”比;   & lt; head>   & lt;元charset=皍tf - 8”比;   & lt; title> vue-skeleton   & lt;/head>   & lt; body>   & lt; div id="应用"祝辞& lt;/div>   & lt;脚本src=" https://www.yisu.com/dist/build.js "祝辞& lt;/script>   & lt;/body>   & lt;/html>      

可以看到,DOM里
  

  

面有且仅有一个div #应用,当js被执行完成之后,此div #应用会被整个替换掉,因此,我们可以来做一下实验,在此div里面添加一些内容:

        & lt; div id=坝τ谩北?   & lt; p>你好skeleton

  & lt; p>你好skeleton

  & lt; p>你好skeleton

  & lt;/div>      

打开chrome的开发者工具,在网络里面找到节气门功能,调节网速为“慢3 g”,刷新页面,就能看到页面先是展示了三句“你好骨架”,待js加载完了才会替换为原本要展示的内容。

  

 Vue页面骨架屏注入方法”>,</p>
  <p>现在,我们对于如何在Vue页面实现骨架屏,已经有了一个很清晰的思路,在div#应用内直接插入骨架屏相关内容即可。</p>
  <p> </p>
  <p>显然,手动在div#应用里面写入骨架屏内容是不科学的,我们需要一个扩展性强且自动化的易维护方案。既然是在Vue项目里,我们当然希望所谓的骨架屏也是一个.vue文件,它能够在构建时由工具自动注入到div#应用里面。</p>
  <p>首先,我们在/src目录下新建一个骨架。vue文件,其内容如下:</p>
  
  <pre类=   & lt; template>   & lt; div class="框架页面”比;   & lt; div类=" skeleton-nav "祝辞& lt;/div>   & lt; div类=" skeleton-swiper "祝辞& lt;/div>   & lt; ul类=皊keleton-tabs”比;   8 & lt;李v=拔摇眂lass=皊keleton-tabs-item”祝辞& lt; span> & lt;/span> & lt;/li>   & lt;/ul>   & lt; div类=" skeleton-banner "祝辞& lt;/div>   & lt; div)=6“我”class=皊keleton-productions”祝辞& lt;/div>   & lt;/div>   & lt;/template>   & lt; style>   .skeleton {   位置:相对;   高度:100%;   溢出:隐藏;   填充:15 px;   box-sizing: border-box;   背景:# fff;   }   .skeleton-nav {   高度:45 px;   背景:# eee;   margin-bottom: 15 px;   }   .skeleton-swiper {   身高:160 px;   背景:# eee;   margin-bottom: 15 px;   }   .skeleton-tabs {   list-style:没有;   填充:0;   保证金:0 -15 px;   显示:flex;   flex-wrap:包装;   }   .skeleton-tabs-item {   宽度:25%;   高度:55 px;   box-sizing: border-box;   text-align:中心;   margin-bottom: 15 px;   }   .skeleton-tabs-item跨度{   显示:inline-block;   宽度:55 px;   高度:55 px;   border - radius: 55 px;   背景:# eee;   }   .skeleton-banner {   高度:60 px;   背景:# eee;   margin-bottom: 15 px;   }   .skeleton-productions {   高度:20 px;   margin-bottom: 15 px;   背景:# eee;   }   & lt;/style>

Vue页面骨架屏注入方法