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


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 相关文章推荐
window.onbeforeunload方法在IE下无法正常工作的解决办法
Jan 23 Javascript
jQuery each()小议
Mar 18 Javascript
打开新窗口关闭当前页面不弹出关闭提示js代码
Mar 18 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
Aug 21 Javascript
基于jquery的手风琴图片展示效果实现方法
Dec 16 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
Sep 16 Javascript
javascript 小数乘法结果错误的处理方法
Jul 28 Javascript
JavaScript获取当前时间向前推三个月的方法示例
Feb 04 Javascript
vue路由嵌套的SPA实现步骤
Nov 06 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
Nov 12 Javascript
小程序双头slider选择器的实现示例
Mar 31 Javascript
详解JavaScript中new操作符的解析和实现
Sep 04 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
php4的session功能评述(二)
2006/10/09 PHP
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
php后退一页表单内容保存实现方法
2012/06/17 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
laravel中短信发送验证码的实现方法
2018/04/25 PHP
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
xml文档转换工具,附图表例子(hta)
2010/11/17 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
Javascript操作URL函数修改版
2013/11/07 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
Javascript window对象详解
2014/11/12 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
vue.js实现的经典计算器/科学计算器功能示例
2018/07/11 Javascript
vue-cli3 从搭建到优化的详细步骤
2019/01/20 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
python批量同步web服务器代码核心程序
2014/09/01 Python
跟老齐学Python之dict()的操作方法
2014/09/24 Python
理解python中生成器用法
2017/12/20 Python
Windows下python3.7安装教程
2018/07/31 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
wxPython实现列表增删改查功能
2019/11/19 Python
致跳远、跳高运动员广播稿
2014/01/09 职场文书
机关作风建设心得体会
2014/10/22 职场文书
机关保密工作承诺书
2015/05/04 职场文书
红与黑读书笔记
2015/06/29 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python