更优雅的微信小程序骨架屏实现详解


Posted in Javascript onAugust 07, 2019

一、演示

更优雅的微信小程序骨架屏实现详解

更优雅的微信小程序骨架屏实现详解

二、说明:

实现思路:需要默认数据,这样才能完美应对list,wx:if的情况,及flex宽度靠内容撑开的样式。

替换思路:和imageLoader加载器类似:先展示默认图片,拿到数据之后显示真实的图片

具体实现:

页面准备一份默认数据:defaultData

xml中:<skeleton watchData={{与卡槽笨蛋一样的对象}}><slot/></skeleton>

页面onload时,data=defaultData

此时:watchData第一次收到数据(第一次为onload时),靠默认数据,撑开卡槽容器,自身opacity:0;

此后,再收到数据就关闭骨架屏

优点:

1.好维护:页面没有额外的xml。也没有额外的css。只需要维护一份默认数据即可。

2.更优雅,更真实:多个请求,会看到分批次的替换。而不需要全请求成功才替换。

3.可以和imageLoader共处,而不会出现和美团等骨架屏没有之后,图片区域还出现短暂空白

4.可定制:

  • 可以共存:文字,图片/imageLoader,或其它的。低入侵
  • 骨架屏不是一个完整的,而是items,且可以有不同的样式或过渡
  • 可以完美支持触底加载时的骨架屏

注意事项:

1、custom-class:需要传与卡槽一样的[border-radius];可选[背景色],或者其它

2、custom-class:宽高不需要传,默认数据就是撑开宽高的

三、代码:

import {
 extendComponent
} from '../../common/component';
extendComponent({
 properties: {
  watchData: null,//观察对应的请求对象
  transition:{//过渡名称,对应该组件的name
   type:String,
   value:null
  }
 },
 observers: {
  "watchData":function(newVal){
   this.data.counter+=1;
   if(this.data.counter>=2){
    this.setData({success:true});
   }
  }
 },
 data: {
  counter:0,//第一次显示骨架屏,之后就显示真实节点。
  success:false //不可逆,只能false->true
 }
})
<!--components/skeleton/skeleton.wxml-->
<!-- 这里是真实渲染 -->
<view wx:if="{{success}}" >
  <slot />
</view>

<!-- 这里是骨架屏:有动画情况 -->
 <transition 
  wx:elif="{{transition}}"
  show="{{true}}"
  name="{{ transition }}"
  duration="{{800}}"
  custom-class="skeleton custom-class"
 >
  <view style="opacity:0;">
    <slot />
  </view>
</transition>

<!-- 这里是骨架屏:无动画情况 -->
<view wx:else class="skeleton custom-class">
  <view style="opacity:0;">
    <slot />
  </view>
</view>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用Javascript实现Sleep暂停功能代码
Sep 03 Javascript
九种js弹出对话框的方法总结
Mar 12 Javascript
使用apply方法实现javascript中的对象继承
Dec 16 Javascript
js 针对html DOM元素操作等经验累积
Mar 11 Javascript
基于AngularJS+HTML+Groovy实现登录功能
Feb 17 Javascript
jquery ztree实现模糊搜索功能
Feb 25 Javascript
ajax级联菜单实现方法实例分析
Nov 28 Javascript
微信小程序-横向滑动scroll-view隐藏滚动条
Apr 20 Javascript
Vue 进阶教程之v-model详解
May 06 Javascript
vue-router传递参数的几种方式实例详解
Nov 13 Javascript
vue 组件开发原理与实现方法详解
Nov 29 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
Jun 01 Javascript
vue 集成jTopo 处理方法
Aug 07 #Javascript
vue 集成 vis-network 实现网络拓扑图的方法
Aug 07 #Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
Aug 07 #Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
Aug 07 #Javascript
javascript for循环性能测试示例
Aug 07 #Javascript
弱类型语言javascript中 a,b 的运算实例小结
Aug 07 #Javascript
解决一个微信号同时支持多个环境网页授权问题
Aug 07 #Javascript
You might like
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
PHP删除HTMl标签的实现代码
2013/06/30 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
让Firefox支持event对象实现代码
2009/11/07 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
用jQuery模拟select下拉框的简单示例代码
2014/01/26 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
JavaScript中ES6字符串扩展方法
2016/08/26 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
angularjs实现上拉加载和下拉刷新数据功能
2017/06/12 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
使用RxJS更优雅地进行定时请求详析
2019/06/02 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
Python 的描述符 descriptor详解
2016/02/27 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
python 定义n个变量方法 (变量声明自动化)
2018/11/10 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
软件缺陷的分类都有哪些
2014/08/22 面试题
村官工作鉴定评语
2014/01/27 职场文书
人民教师的自我评价分享
2014/02/21 职场文书
教师自我鉴定范文
2014/03/20 职场文书
分享几个JavaScript运算符的使用技巧
2021/04/24 Javascript
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python
python引入其他文件夹下的py文件具体方法
2021/05/23 Python
一篇文章带你复习java知识点
2021/06/28 Java/Android