参考文章

使用

  1. // 引入
  2. usingComponents: {
  3. "skeleton": "/components/skeleton/skeleton"
  4. }
  5. <!--引入骨架屏模版 -->
  6. <skeleton wx:if="{{showSkeleton}}" selector="skeleton" loading="{{loading}}"></skeleton>
  7. <!-- 跟节点添加 skeleton -->
  8. <view class="container index skeleton" id="Index">
  9. <!--需要用到骨架屏的节点 S-->
  10. <image src="../../common/imgs/icon-golden.png" class="nav-icon skeleton-rect"></image>
  11. <view class="skeleton-rect">首页导航</view>
  12. <!--需要用到骨架屏的节点 E-->
  13. </view>
  1. onLoad() {
  2. this.showSkeleton = false; // 骨架屏显示隐藏
  3. }

showSkeleton用来控制骨架屏的隐藏和显示;

skeleton.jpg

原理

获取到DOM节点和样式,覆盖样式,生成灰色块盖在原有文本、图片等节点上面。

相关Api

  1. wx.createSelectorQuery().selectAll(`.${this.data.selector} >>> .${this.data.selector}-rect`).boundingClientRect().exec(function(res){
  2. that.setData({
  3. skeletonRectLists: res[0]
  4. })
  5. });
  • wx.createSelectorQuery().selectAll 选择匹配选择器 selector 的所有节点
  • boundingClientRect 节点的布局位置的查询请求。相对于显示区域,以像素为单位。其功能类似于 DOM 的 getBoundingClientRect
  • exec 执行所有的请求。请求结果按请求次序构成数组,在callback的第一个参数中返回。
  1. <view wx:for="{{skeletonRectLists}}" wx:key="{{index}}" style="border-radius: 10rpx;width: {{item.width}}px; height: {{item.height}}px;position: absolute; left: {{item.left}}px; top: {{item.top}}px">
  2. </view>