如何在Vue项目中实现骨架占位效果

前端 潘老师 3天前 7 ℃ (0) 扫码查看

Vue项目开为了提升用户体验,我们常常会用到一些小技巧,其中骨架占位效果就是一个不错的选择。它能在数据加载时,给用户展示一个大致的页面结构,避免页面长时间空白,让用户感觉交互更加流畅。下面,我就来详细讲讲如何在Vue项目里实现这个效果。

一、创建骨架占位组件

我们先创建一个名为Skeleton.vue的组件,它就是实现骨架占位效果的核心部分。代码如下:

<template>
  <div class="skeleton">
    <div class="skeleton-item" v-for="n in count" :key="n"></div>
  </div>
</template>

<script>
export default {
  props: {
    count: {
      type: Number,
      default: 3
    }
  }
};
</script>

<style scoped>
.skeleton-item {
  height: 20px;
  margin-bottom: 10px;
  background-color: #e0e0e0;
  border-radius: 4px;
  animation: pulse 1.5s infinite ease-in-out;
}

@keyframes pulse {
  0% {
    background-color: #e0e0e0;
  }
  50% {
    background-color: #f0f0f0;
  }
  100% {
    background-color: #e0e0e0;
  }
}
</style>

在这段代码里:

  • template部分定义了组件的结构,通过v - for指令循环渲染多个.skeleton - item元素,count属性控制循环的次数,默认是3次。每个.skeleton - item就是一个代表页面内容的占位元素。
  • script部分通过props接收一个count属性,它用于指定要渲染的占位元素数量。这里指定了count的类型是数字,默认值为3 。
  • style部分定义了.skeleton - item的样式,包括高度、下边距、背景颜色、边框圆角,还通过@keyframes定义了一个名为pulse的动画。这个动画让占位元素的背景颜色在#e0e0e0#f0f0f0之间交替变化,营造出一种加载的动态效果,无限循环且动画的时长是1.5秒,缓动函数为ease - in - out

二、在页面中使用骨架占位组件

创建好组件后,我们要在页面中使用它,让其发挥作用。下面是在页面中引入该组件的代码示例:

<template>
  <div>
    <skeleton v-if="isLoading" :count="5" />
    <div v-else>
      <!-- 页面内容 -->
    </div>
  </div>
</template>

<script>
import Skeleton from '~/components/Skeleton.vue';

export default {
  components: {
    Skeleton
  },
  data() {
    return {
      isLoading: true
    };
  },
  mounted() {
    this.fetchData();
  },
  methods: {
    async fetchData() {
      // 模拟数据加载
      setTimeout(() => {
        this.isLoading = false;
      }, 2000);
    }
  }
};
</script>

在这个页面代码中:

  • 首先通过import语句引入我们刚刚创建的Skeleton组件,并在components选项中注册,这样就可以在模板中使用<skeleton>标签了。
  • data函数返回一个对象,其中isLoading属性用于控制骨架占位组件的显示与隐藏。初始时,isLoadingtrue,表示数据正在加载,此时会显示骨架占位组件。
  • mounted钩子函数在组件挂载完成后执行,这里调用了fetchData方法。
  • fetchData方法使用setTimeout模拟数据加载过程,2秒后将isLoading设置为false,此时骨架占位组件会隐藏,页面就可以展示真正的内容了。在实际项目中,这里的fetchData方法应该是发起真实的数据请求,获取数据后再隐藏骨架占位组件。

通过以上两个步骤,我们就在Vue项目中成功实现了骨架占位效果。在数据加载时,页面会显示带有动态效果的占位元素,加载完成后,这些占位元素会被实际内容替换,提升了整个项目的用户体验。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/front/17767.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】