Vue加载区域数据时的Loading效果

7 篇文章 0 订阅

切换筛选条件和切换后端分页时经常会有一段时间的请求数据时间,哪怕时间再短也是一段时间,这样会造成用户的体验感很差,因此用css3简单做了个加载效果。

具体的代码长这亚子,主要是用了css3  animation属性

animation: zoomL 1.4s ease-in-out infinite alternate; 这里ease-in-out是先慢后快,infinite是无限,alternate是交替

其他两个.loading节点animation-delay: -1s是让他们延迟执行,可以根据自己的需要更改

使用的话就注册为全局组件然后在页面调用就可

这里我通过props传值控制显示隐藏的,供参考

<template>
  <div class="loading-wrapper">
    <div class="loading-content clearfix">
      <div class="loading" style="animation-delay: -1s"></div>
      <div class="loading" style="animation-delay: -0.1s"></div>
      <div class="loading"></div>
    </div>
  </div>
</template>
<script>
export default {
  
}
</script>
<style lang="scss" scoped>
.loading-wrapper {
  width: 100%;
  position: relative;
  height: 50px;
  .loading-content {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    .loading {
      float: left;
      width: 15px;
      margin-right: 12px;
      height: 15px;
      background: #f62700;
      border-radius: 100%;
      animation: zoomL 1.4s ease-in-out infinite alternate;
    }
  }
}
@keyframes zoomL {
  0%{
    opacity: 0.5;
    transform: scale(2);
  }
  100%{
    opacity: 1;
    transform: scale(1);
  }
}
</style>
<template>
  <div>
    <ul class="row">
      <li v-for="item in list" :key="item.id" class="mv-item">
        <div class="cover">
          <span class="play"><i class="iconfont icon-ziyuan">{{item.playCount|handlePlayCount}}</i></span>
          <div class="icon-wrapper">
            <i class="iconfont icon-ziyuan play-button" @click="play(item.id)"></i>
          </div>
          <p class="d-flex j-sb bt-info">
            <span>{{item.artistName}}</span>
            <span>{{item.duration|formatTransitionTime}}</span>
          </p>
        </div>
        <h2 class="my-1">{{item.name}}</h2>
      </li>
    </ul>
    <loading-plus v-if="beforeReady"></loading-plus>
  </div>
</template>
<script>
export default {
  props:{
    list:{
      type:Array,
      default:()=>[]
    },
    beforeReady:{
      type:Boolean,
      default:false
    }
  },
  methods: {
  },
}
</script>
<style lang="scss" scoped>
  
</style>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js 中的延加载(lazy loading)或延迟加载弹出框通常用于优化用户体验,特别是对于那些在用户滚动到页面底部或其他特定位置才会显示的内容。这样可以减少初始页面加载间,提高首屏渲染速度。 在 Vue 中实现这样的功能,你可以使用以下方法: 1. **动态组件**:你可以创建一个懒加载组件,当满足条件(如用户滚动到底部或点击按钮)才实例化它。例如,使用 `v-if` 和 `v-show` 组件条件: ```html <template> <div> <button @click="showModal">Load Modal</button> <transition-group v-if="showModal"> <lazy-component :is-loaded="modalLoaded" /> </transition-group> </div> </template> <script> export default { data() { return { showModal: false, modalLoaded: false, }; }, methods: { closeModal() { this.modalLoaded = false; this.showModal = false; }, handleLoad() { // 这里处理实际的加载操作,如从 API 获取数据 // 假设 `loadModal` 是异步操作 this.loadModal().then(() => { this.modalLoaded = true; }); }, }, }; </script> ``` 2. **Intersection Observer API**:利用浏览器的 Intersection Observer API 可以监听元素是否进入视口,当元素达到预设条件触发加载Vue 提供了 vue-observe-visibility 插件来简化使用。 ```html <template> <div> <button @click="showModal">Load Modal</button> <lazy-modal :is-visible="isVisible" /> </div> </template> <script> import LazyModal from 'vue-observe-visibility'; export default { components: { LazyModal, }, data() { return { showModal: false, }; }, mounted() { this.$observeVisibility('.lazy-modal', { rootMargin: '0px', threshold: 0.5, // 视图覆盖度,0.5 表示一半进入可视区域 }).then((data) => { this.isVisible = data.isIntersecting; }); }, methods: { handleLoad() { this.loadModal(); }, }, }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值