前端中骨架屏的三种运用方式介绍

 更新时间:2025年05月21日 08:34:19   作者:拉不动的猪  
这篇文章主要为大家详细介绍了前端中骨架屏的三种运用方式,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下

一、骨架屏的三大运用方式及案例

1.静态HTML/CSS方案

<!-- 电商商品详情页案例 -->
<div class="skeleton-container">
  <div class="skeleton-header"></div>
  <div class="skeleton-gallery">
    <div class="skeleton-image"></div>
    <div class="skeleton-thumbnails">
      <div class="skeleton-thumb"></div>
      <div class="skeleton-thumb"></div>
    </div>
  </div>
  <div class="skeleton-content">
    <div class="skeleton-line" style="width:80%"></div>
    <div class="skeleton-line" style="width:60%"></div>
  </div>
</div>

<style>
.skeleton-image {
  background: linear-gradient(90deg,#f2f2f2 25%,#e6e6e6 50%,#f2f2f2 75%);
  animation: shimmer 1.5s infinite;
  height: 300px;
}
@keyframes shimmer {
  to { background-position-x: -200%; }
}
</style>

关键点:通过CSS动画模拟加载效果,需精确匹配真实DOM结构

2.组件化方案(Vue/React)

// Vue动态骨架屏组件
<template>
  <div v-if="loading" class="skeleton-wrapper">
    <SkeletonItem v-for="i in 5" :key="i" 
      :width="i===1 ? '80%' : '100%'" 
      :height="i===1 ? '24px' : '16px'"/>
  </div>
  <div v-else>
    <ActualContent :data="contentData"/>
  </div>
</template>

<script>
export default {
  components: {
    SkeletonItem: {
      props: ['width','height'],
      template: `<div class="skeleton-item" :style="{width, height}"/>`
    }
  }
}
</script>

优势:可复用组件,动态控制显示状态

3.自动化生成方案

// 使用vue-skeleton-webpack-plugin
const SkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin');

module.exports = {
  configureWebpack: {
    plugins: [
      new SkeletonWebpackPlugin({
        webpackConfig: {
          entry: './src/skeleton.js'
        },
        minimize: true,
        quiet: true
      })
    ]
  }
}

特点:通过路由匹配自动生成对应骨架屏

二、关键实现要点

1.视觉一致性原则

  • 占位元素需与真实内容布局1:1对应
  • 使用与UI风格协调的渐变色系
  • 动画持续时间控制在1-1.5秒

2.性能优化策略

  • 骨架屏代码应控制在5KB以内
  • 避免使用图片资源,纯CSS实现
  • 与PWA的预缓存策略结合使用

3.状态管理规范

// 鸿蒙APP中的状态管理案例
Page({
  data: {
    loading: true,
    error: false,
    empty: false
  },
  onLoad() {
    fetchData().then(res => {
      this.setData({ 
        loading: false,
        list: res.data || []
      });
    }).catch(() => {
      this.setData({ error: true });
    });
  }
})

最佳实践:需处理加载失败/数据为空等边界情况

到此这篇关于前端中骨架屏的三种运用方式介绍的文章就介绍到这了,更多相关前端骨架屏运用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java遇到微信小程序

    java遇到微信小程序 "支付验证签名失败" 问题解决

    这篇文章主要介绍了java遇到微信小程序 "支付验证签名失败" 问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 使用 JS 判断用户是否处于活跃状态的案例详解

    使用 JS 判断用户是否处于活跃状态的案例详解

    这篇文章主要介绍了如何使用 JS 判断用户是否处于活跃状态,案例演示了如何获取用户活跃状态,时间阈值定为5秒,超出该阈值没有操作表示非活跃,否则属于正在活跃中,需要的朋友可以参考下
    2024-05-05
  • 微信小程序实现验证码倒计时效果

    微信小程序实现验证码倒计时效果

    这篇文章主要介绍了微信小程序实现验证码倒计时效果,手机登录、填手机号获取验证码,倒计时后重新获取效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • layui table 参数设置方法

    layui table 参数设置方法

    今天小编就为大家分享一篇layui table 参数设置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • 一文带你详细拆解JavaScript中Promise的原理和真实应用

    一文带你详细拆解JavaScript中Promise的原理和真实应用

    本文从中文语义出发,逐层深入到 .then 源码、resolve 与 then 的联动机制、await 的编译真相,最后用一道面试实战题把所有知识串起来,读完之后,Promise 对你来说不再是一个需要记忆的 API,而是一个可以用直觉推导的思维模型
    2026-03-03
  • 微信小程序从注册账号到上架(图文详解)

    微信小程序从注册账号到上架(图文详解)

    这篇文章主要介绍了微信小程序从注册账号到上架详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • javascript开发实现贪吃蛇游戏

    javascript开发实现贪吃蛇游戏

    这篇文章主要为大家详细介绍了javascript开发实现贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • 完美实现js选项卡切换效果(二)

    完美实现js选项卡切换效果(二)

    这篇文章主要为大家详细介绍如何完美实现js选项卡切换效果,通过设置定时器实现延时0.5s切换选项卡,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • JS实现匀加速与匀减速运动的方法示例

    JS实现匀加速与匀减速运动的方法示例

    这篇文章主要介绍了JS实现匀加速与匀减速运动的方法,涉及javascript结合时间函数与数学运算动态操作页面元素样式的相关实现技巧,需要的朋友可以参考下
    2017-09-09
  • javascript 面向对象function详解及实例代码

    javascript 面向对象function详解及实例代码

    这篇文章主要介绍了javascript 面向对象function详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02

最新评论