更优雅的微信小程序骨架屏实现详解
一、演示
二、说明:
实现思路:需要默认数据,这样才能完美应对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>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
微信小程序 高德地图路线规划实现过程详解
前言 最近项目中做到相关网约车小程序.需要使用到地图中的路线规划,对3种地图进行了分析.这里稍微做一下总结: 百度地图 百度坐标 (BD-09) 腾讯地图 火星坐标(GCJ-02) 高德地图 火星坐标(GCJ-02) 微信小程序中使用的是腾讯地图作为底图.因此如果使用百度地图时,需要注意坐标的转换.此类坐标的转换函数在网上都有,这里不做过多解释 准备工作: 1.在做小程序 ---- 路线规划之前,需要准备小程序APPID 以及相应使用地图的KEY值. 2.微信小程序API 之 位置 API wx
-
微信小程序引入Vant组件库过程解析
前期准备 Vant Weapp组件库: https://youzan.github.io/vant-weapp/#/intro 1.先在微信开发者工具中打开项目的终端: 然后初始化一个package.json文件:输入命令:npm init 然后一路回车默认的即可: npm init 项目就回产生一个package.json文件: { "name": "miniprogram", "version": "1.0.0", &qu
-
微信小程序中悬浮窗功能的实现代码
问题场景 所谓悬浮窗就是图中微信图标的按钮,采用fixed定位,可拖动和点击. 这算是一个比较常见的实现场景了. 为什么要用cover-view做悬浮窗?原生组件出来背锅了~ 最初我做悬浮窗用的不是cover-view,而是view. 这是简化的代码结构: index.wxml: <view class="move-view" style=" top:{{top}}px;left:{{left}}px;" bindtap="goToHome"
-
微信小程序如何引用外部js,外部样式,公共页面模板
小程序引用外部js //封装的函数 function GetUserInfo2018() { console.log("获取用户信息8888") } function count(str) { console.log(str) } //转化成小程序模板语言 这一步非常重要 不然无法正确调用 module.exports = { GetUserInfo2018: GetUserInfo2018, count: count }; /*其它页面调用 var common = require(
-
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
导入执行后 VM292:1 thirdScriptError sdk uncaught third Error module "miniprogram_npm/vant-weapp/mixins/transition" is not defined Error: module "miniprogram_npm/vant-weapp/mixins/transition" is not defined at require (http://127.0.0.
-
微信小程序组件传值图示过程详解
A是父组件,B是子组件 父传子 <!-- 父组件A wxml --> <view> <componentB paramAtoB='{{paramAtoB}}'></componentB> </view> //父组件Ajson (里面不能有注释) { "navigationBarTitleText": "父子传值", "usingComponents": { "component
-
微信小程序3种位置API的使用方法详解
获取位置 获取当前的地理位置.速度.当用户离开小程序后,此接口无法调用:当用户点击"显示在聊天顶部"时,此接口可继续调用. wx.getLocation(object) <view class="container"> <button bindtap='getLocation'>获取位置</button> <view wx:if="{{latitude !=''}}"> <view>纬度
-
更优雅的微信小程序骨架屏实现详解
一.演示 二.说明: 实现思路:需要默认数据,这样才能完美应对list,wx:if的情况,及flex宽度靠内容撑开的样式. 替换思路:和imageLoader加载器类似:先展示默认图片,拿到数据之后显示真实的图片 具体实现: 页面准备一份默认数据:defaultData xml中:<skeleton watchData={{与卡槽笨蛋一样的对象}}><slot/></skeleton> 页面onload时,data=defaultData 此时:watchData第一次
-
微信小程序骨架屏的实现示例
目录 什么是骨架屏 小程序中骨架屏的生成方式 引入方法 显示与隐藏 为了优化用户体验,骨架屏一直是开发者比较喜欢的表现方式,也就是首屏占位的一种表现方式,不会让浏览者因为长时间的等待而焦躁.小程序中骨架屏的实现还是比较简单的,但是没用过的同学难免会误入歧途,今天就分享一下小程序中骨架屏的实现. 什么是骨架屏 骨架屏是页面的一个空白版本,通常会在页面完全渲染之前,通过一些灰色的区块大致勾勒出轮廓,待数据加载完成后,再替换成真实的内容.通常在小程序中,我们需要手工维护骨架屏的代码,当业务变更时,同样
-
微信小程序骨架屏的应用与实现步骤详细记录
目录 什么是骨架屏 小程序骨架屏的实现 1. 生成页面骨架 2. 骨架屏的应用 3. 使用注意 4. 思考后的封装 总结 什么是骨架屏 骨架屏是作为一种首次渲染加载优化的一种方法 我们打开一个应用后,应用会通过ajax来请求数据,而在这段空缺的时间,没有数据,内容缺失,这对于用户的感觉很不好,所以我们需要在这个时间段内通过骨架屏来填充这个空缺. 如上图所示,一个是没有内容,一个是骨架屏的填充,所以在加载的这一秒内给用户以骨架屏形式的填充是很有必要的. 小程序骨架屏的实现 1. 生成页面骨架 微信
-
微信小程序中input标签详解及简单实例
微信小程序中input标签详解及简单实例 使用input标签,我们都会,在微信小程序中使用,必定也是可以一下子就会的,但是却有些常用的属性无法按照习惯去使用: 我就用我最常用的来做例子: 一个一个来解读: 首先,我是定义了他的id,这是我们最常用的,所以就配了一个id,毕竟不操作他,又为什么设成输入框呢, 第二,设置他的样式, 第三,设置他的输入类别,以上都是很简单的 第四.使用正则l:哎限定输入为纯数字.这点可能有点不理解,这是对他的keyup事件监听,将不是纯数字的list无视掉.注意,是对
-
微信小程序Redux绑定实例详解
微信小程序Redux绑定实例详解 安装 clone或者下载代码库到本地: git clone https://github.com/charleyw/wechat-weapp-redux 将dist/wechat-weapp-redux.js(或者拷贝minify的也可以)文件直接拷贝到小程序的工程中,例如(下面假设我们把第三方包都安装在libs目录下): cd wechat-weapp-redux cp -r dist/wechat-weapp-redux.js <小程序根目录>/libs
-
微信小程序 Buffer缓冲区的详解
微信小程序 Buffer缓冲区的详解 JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区. 在 node.js 中,Buffer 类是随 Node 内核一起发布的核心库.Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动
-
微信小程序 MD5的方法详解及实例代码
微信小程序 MD5的方法详解 生成的文件可以放在 utils文件中哦!!! /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. * Version 1.1 Copyright (C) Paul Johnston 1999 - 2002. * Code also contributed by Greg Holt
-
微信小程序组件 marquee实例详解
微信小程序组件 marquee实例详解 1. marquee标签 html是有marquee标签的,可以实现跑马灯效果,但小程序没有,所以要实现.这里考虑使用css3的animation实现. html的marquee是这样使用的. <marquee direction="left" behavior="scroll" scrollamount="1" scrolldelay="0" loop="-1"
-
微信小程序 地图map实例详解
微信小程序 地图map实例详解 wxml: class="button" bindtap="getlocation" style="margin-top:30px" markers="{{markers}}">定位 longitude="{{longitude}}" latitude="{{latitude}}" markers="{{markers}}" co
-
微信小程序日历组件calendar详解及实例
微信小程序日历组件calendar详解及实例 模版使用: src="../cal/calendar.wxml"> is="calendar" data="{{selected_value,days,month,years,lunar_years,lunar_month,lunar_days,selectDateType,l unar_selected_value}}"> JS代码使用: var Calendar = require('
随机推荐
- 如何成为一名黑客全系列说明第1/2页
- IOS实现输入验证码、密码按位分割(二)
- python安装cx_Oracle模块常见问题与解决方法
- ajaxControlToolkit中CascadingDropDown的用法说明
- iOS开发使用XML解析网络数据
- 基于PHP输出缓存(output_buffering)的深入理解
- 禁止JS运行的代码
- linux shell 脚本实现tcp/upd协议通讯(重定向应用)
- SQL语句查询数据库中重复记录的个数
- Mysql 自动增加设定基值的语句
- js学习总结之DOM2兼容处理顺序问题的解决方法
- jquery 中的each()跳出循环的语句
- jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
- IE:免去脱机浏览中的麻烦
- Linux X Window应用问答(上)
- IIS安全设置图文教程
- 详解Java中的时区类TimeZone的用法
- C#实现发送手机验证码功能
- C语言实现txt数据读入内存/CPU缓存实例详解
- 再谈反向链接,又学了东西