微信小程序-生成骨架屏

微信小程序-生成骨架屏

概述

骨架屏是页面的一个空白版本,通常会在页面完全渲染之前,通过一些灰色的区块大致勾勒出轮廓,待数据加载完成后,再替换成真实的内容。微信小程序提供了自动生成骨架屏代码的能力。

步骤

第一步:

点击微信小程序开发工具的右下角:

在这里插入图片描述

会生成2个骨架屏相关的文件:

在这里插入图片描述

第二步:

将这2个文件放在指定目录下,接着引用骨架屏并使用:

wxml:

<import src="./skeleton/index.skeleton.wxml" />

wxss:

@import "./skeleton/index.skeleton.wxss";

引用模版:

<template is="skeleton"   />

控制显示:

<template is="skeleton" wx:if="{{isLoading}}" />
<block wx:else>
  <button bindtap="toList">列表渲染</button>
</block>  
Page({ 
  data: {   
    isLoading: false,
  },  
  showSkeleton() {
    let that = this
    this.setData({
      isLoading: true,
    })
    setTimeout(function () {
      that.setData({
        isLoading: false,
      })
    }, 2000)
  },  
})
### 微信小程序骨架不渲染的原因分析 在微信小程序中遇到骨架无法正常渲染的情况,可能由多种因素引起。通常情况下,这与页面加载逻辑、数据获取时机以及组件生命周期有关。 #### 数据请求失败影响骨架显示 当接口请求出现问题时,可能导致骨架未能按照预期进行渲染[^2]。这种情况下的解决方案之一是在发起网络请求之前就初始化并展示骨架,在确保数据成功返回后再隐藏骨架转而呈现真实内容。为了增强用户体验,还可以设置超时时长来应对长时间无响应的服务端调用: ```javascript // 定义全局变量用于存储定时器ID let timeoutId; Page({ onLoad() { // 显示骨架样式 this.setData({ showSkeleton: true }); // 启动计时器模拟延迟操作 timeoutId = setTimeout(() => { console.log('Request timed out'); this.setData({ showSkeleton: false }); }, 5000); // 设置最大等待时间为5秒 weapp.request('/api/data') .then(response => { clearTimeout(timeoutId); const data = response.data; // 更新视图状态为已加载完毕 this.setData({ items: data, showSkeleton: false }); }) .catch(error => { clearTimeout(timeoutId); // 错误处理机制 console.error(`Error fetching data ${error}`); this.setData({ showSkeleton: false }); }); } }); ``` #### 组件生命周期管理不当造成的问题 另一个常见原因是由于对`onLoad()`等生命周期函数的理解不足而导致的错误配置。如果骨架的状态切换发生在不合适的时间点,则可能会错过最佳渲染窗口期。因此建议仔细审查相关代码片段中的事件触发顺序,并调整至合理位置以保证流畅过渡[^1]。 #### 使用条件编译优化性能表现 对于某些复杂场景而言,通过引入条件编译语句能够有效提升整体效率。例如只在开发环境启用详细的日志记录功能;而在生产环境中关闭不必要的调试选项从而加快执行速度。此外,利用分包加载技术也能显著改善初次启动体验,间接促进骨架快速显现出来[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值