一直以来,无论是web还是iOS、android的应用中,为了提升应用的加载等待这段时间的用户感知体验,各种奇门遁甲之术层出不穷。其中,菊花图以及由它衍生各种加载动画是一个非常大的流派,如下图所示:

由它衍生而出的各种加载动画也是遍地开花:

在很多的应用的交互中,这种菊花的加载的设计已然要一统江湖了。

不过,现在对于加载的设计体验有了比菊花加载体验更棒的方法,即本文要讲的Skeleton Screen Loading,中文一般叫做骨架屏。骨架屏听起来总觉得怪怪的,本文还是沿用英文的叫法Skeleton Screen Loading

所谓Skeleton Screen Loading即表示在页面完全渲染完成之前,用户会看到一个样式简单,描绘了当前页面的大致框架,感知到页面正在逐步加载,加载完成后,最终骨架屏中各个占位部分将被真实的数据替换。

一图胜千言,来看看微信阅读的客户端,它就使用了Skeleton Screen Loading来提升它的加载体验,可以下载它的客户端实际感受下:

现在好多web和客户端都已经放弃了以前的那种菊花的加载体验,转而使用Skeleton Screen Loading,比如Facebook、medium以及slack等。国内的饿了么、掘金等也都使用Skeleton Screen Loading来提升它们的加载体验。

下面这段话,是iOS中关于加载体验的交互设计标准的一个说明:

Don’t make people wait for content to load before seeing the screen they’re expecting. Show the screen immediately, and use placeholder text, graphics, or animations to identify where content isn’t available yet. Replace these placeholder elements as the content loads. — Apple iOS Human Interface Guidelines

使用Skeleton Screen Loading也充分遵循了iOS人机交互设计指南。本文就来讲讲如何使用vue来实现Skeleton Screen Loading。

VUE实现思路

在本文中,我们将会使用vue组件 (Component) 功能来实现一个Skeleton Screen Loading,如下图所示:

具体vue组件 (Component) 功能这里就不详讲了,可以去官方的文档看看详细的信息。

这里推荐一个模拟开发数据的开源服务jsonplaceholder,类似经常使用的图片占位服务一样,它提供了在web开发中一些常见数据类型的api服务,比如文章、评论、用户系统等,都提供了对应的接口,在开发调试阶段还是非常方便的。

比如我们做的这个例子要用到用户系统,直接使用这个用户数据接口就行了。

首先,主要的工作是实现Skeleton Screen Loading加载动画,先使用常规的html和css来实现这个动画。

动画效果如下所示:

先定义好html结构:

 <div class="timeline-item"><div class="animated-background"><div class="background-masker header-top"></div><div class="background-masker header-left"></div><div class="background-masker header-right"></div><div class="background-masker header-bottom"></div><div class="background-masker subheader-left"></div><div class="background-masker subheader-right"></div><div class="background-masker subheader-bottom"></div></div>
</div>

下面来说说实现动画的主要思路:

要实现这样的效果,需要使用一点点小技巧。先在图层animated-background定义一个大的渐变背景,然后在不需要显示背景图的位置,定义几个占位的结构填充为白色就可以实现上图所示的UI展现形式。最后使用background-position来移动背景图片的位置,就可以实现图中的动画效果。

详细的代码可以去这里查看,demo。

主要的效果实现了,下面就可以正式开工来定义我们的Skeleton Screen Loading组件。

Vue.component('user-item', {props: ['email', 'name'],template: `<div><h2 v-text="name"></h2><p v-text="email"></p></div>`
})Vue.component('loading-item', {template: `<div class="animated-background"><div class="background-masker header-top"></div><div class="background-masker header-left"></div><div class="background-masker header-right"></div><div class="background-masker header-bottom"></div><div class="background-masker subheader-left"></div><div class="background-masker subheader-right"></div><div class="background-masker subheader-bottom"></div></div>`
})

上面定义了两个组件,一个是用来显示用户信息数据的组件user-item;一个在加载完之前来显示Skeleton Screen Loading效果的loading-item组件。

定义好组件后,然后在主文件定义好对应的结构来注册使用组件:

<div id="app"><div v-for="user in users" class="items" v-if="loading"><user-item :name="user.name" :email="user.email"></user-item></div><div v-for="load in loades" v-if="!loading"><loading-item></loading-item></div>
</div>

根据上面定义好的组件,上面的代码表示,当数据加载完后,显示用户数据。当还没有加载完用户数据,则显示预先定义好的加载组件即loading-item。

var app = new Vue({el: '#app',data: {users: [],loading: false,loades: 10},methods: {getUserDetails: function() {fetch(`https://jsonplaceholder.typicode.com/users`).then(result => result.json()).then(result => {this.users = resultthis.loading = true});}},created: function() {setTimeout(() => {this.getUserDetails()}, 1000);}
});

一个简单优雅的Skeleton Screen Loading就完成了。

通过上面简单的实例,可以明显感受到当使用Skeleton Screen Loading来代替传统的菊花图在体验上更加好一些。

使用Skeleton Screen Loading,可以利用一些视觉元素来将内容的轮廓更快显示在屏幕上,让用户在等待加载的过程中对将要加载的内容有一个更加清晰的预期,特别是在弱网络的场景下,Skeleton Screen Loading的体验无疑是更好的,用起来吧。

对于Skeleton Screen Loading,你有什么样的看法呢?欢迎在评论区留言一起分享你的看法。

认识Skeleton Screen【屏幕加载骨架】相关推荐

  1. 简单给element-plus的Skeleton做个Vue3组件——预加载骨架屏图像组件

    简单给element-plus的Skeleton做个Vue3组件--预加载骨架屏图像组件

  2. IOS欢迎界面Launch Screen动态加载广告

    IOS欢迎界面Launch Screen动态加载广告,ioslaunch 当我们打开一款应用程序的时候,首先映入眼帘的往往并不是程序的主界面,而是经过精心设计的欢迎界面,这个界面通常会停留几秒钟,然后 ...

  3. Linux screen如何加载用户配置

    大名鼎鼎的screen的一大堆优点,不在这里一一赘述. 问题: 在使用screen的时候,相信不少同学碰到过这样的问题:使用screen启动一个新窗口之后,之前shell配置文件(比如:~/.bash ...

  4. 手机端滚动屏幕加载更多

    别忘了引用jquery类库 <strong> $(window).scroll(function () {var scrollTop = $(this).scrollTop();var s ...

  5. Android中骨架屏(Skeleton Screen)使用

    Android中骨架屏(Skeleton Screen)使用 1.什么是骨架屏 页面在没有完全渲染完成之前,用户会看到一个占位的样式,用以描绘了当前页面的大致框架,加载完成后,最终骨架屏中各个占位部分 ...

  6. vue加载组件骨架屏el-skeleton使用

    做项目遇到的问题:在两个兄弟组件中,点击其中一个组件的一个元素,如button,会触发其兄弟组件的刷新, 我的做法:在watch中监测某字段,更改了之后直接在watch中发送后端请求,如下: 但是每次 ...

  7. 如何为Microsoft Office安装和使用加载项

    Microsoft Office allows you to add more functionality through add-ins. Many modern add-ins also work ...

  8. div 重新加载_使用React的HOC来完成模块的异步加载

    原文地址​medium.com 在单页面应用的时代,你可以使用React来完成几乎所有的Web应用甚至大型的Web引用.你甚至可以使用React开发一个Facebook. 当前正如你所知,Webpac ...

  9. Android 11.0 Settings源码分析 - 主界面加载

    Android 11.0 Settings源码分析 - 主界面加载 本篇主要记录AndroidR Settings源码主界面加载流程,方便后续工作调试其流程. Settings代码路径: packag ...

最新文章

  1. 基于AFNetworking的多张图片上传
  2. Leetcode 199.二叉树的右视图 (每日一题 20210628 同类型题)
  3. SAP PP常用表(重要)
  4. c语言while可以改为when,控制流:if、when、for、while
  5. file does not start with RIFF id(python)
  6. 智能集群理论优化控制_探索群体智能的奥妙——ROB-MAS多智能体协作
  7. 我使用的Chrome插件列表
  8. Java 抽象类和接口的区别
  9. 华为折叠手机是鸿蒙系统吗,华为发布新一代折叠屏手机 将首批升级鸿蒙系统...
  10. 2022年信息安全工程师上午真题及答案解析
  11. win10如何显示和隐藏文件夹
  12. c语言写拼图游戏算法,[原创]拼图游戏移动算法,简单易懂
  13. layui下载图片到本地
  14. SpringCloud_JZZ_MBY
  15. sklearn 纠偏
  16. qt creator插入代码块快速注释snippets代码片段的功能
  17. ss服务器多端口配置及密码设置^_^
  18. kotlin 回调函数、let、also、run 、with、apply 使用总结
  19. Python中用于判断两个集合的交集是否为空集isdisjoint()方法
  20. H5网页语音实时播报功能的实现

热门文章

  1. 一条一条来,MySQL变量、流程控制与游标,完整详细可收藏
  2. double取值范围 java_Java中float/double取值范围与精度
  3. 信号与系统 chapter11 LTI系统的响应
  4. 云桌面 瘦终端_云桌面选择云终端还是瘦客户机?
  5. sqoop 导入到hive字段全是null_Sqoop 一点通
  6. Android(2)-----Fragment //(第七周后的知识)
  7. nginx 直接在配置文章中设置日志分割
  8. A - Beautiful Matrix
  9. oracle客户端中文乱码问题的解决
  10. [ACM训练] ACM中巧用文件的输入输出来改写acm程序的输入输出 + ACM中八大输入输出格式...