vuex写一个loading动画的显示与隐藏控制

4 篇文章 0 订阅

首先是store目录,目录结构如下:

index.js

// 组装模块并导出 store 的地方
import Vue from 'vue'
import Vuex from 'vuex'

import loading from './modules/loading'
Vue.use(Vuex)

export default new Vuex.Store({
  modules: {
    loading,
  },
  strict: process.env.NODE_ENV !== 'production' // 严格模式
})

loading.js

const SHOWLOADING = 'SHOWLOADING'
const HIDELOADING = 'HIDELOADING'

const state = {
  showLoading: false
}

const getters = {
  showLoading(state) {
    return state.showLoading
  }
}

const actions = {
  showloader: ({ commit }) => {
    commit(SHOWLOADING)
  },
  hideloader: ({ commit }) => {
    commit(HIDELOADING)
  }
}

const mutations = {
  [SHOWLOADING](state) {
    state.showLoading = true
  },
  [HIDELOADING](state) {
    state.showLoading = false
  }
}
export default {
  state,
  mutations,
  actions,
  getters
}

因为一般loading动画或者升级提示弹窗的显示与隐藏大多是全局使用的,所以在App.vue中控制:

App.vue--showLoading是布尔值,为了方便看文本,没有加v-show="showLoading",你们可以加在自己定义的组件中

<template>
  <div id="app">
    <!-- <ul>
      <li>{{date1|dataServer}}</li>
    </ul> -->
    <router-link to="a">wedefde</router-link>
    <div>加载中{{showLoading}}</div>
    <router-view></router-view>
  </div>
</template>

<script>
import {mapGetters,mapActions} from 'vuex';
export default {
  name: 'app',
  data() {
    return {
      date1: '2019-01-01 00:01'
    }
  },
  computed:{
    ...mapGetters(['showLoading'])
  }
}
</script>
<style lang="stylus">
</style>

当前编写的页面组件,为了方便,使用了延迟函数,实际情况请按逻辑使用:

<template lang="">
  <div>
    我是a页面-ui的子路由
  </div>
</template>
<script>
import {mapGetters,mapActions} from 'vuex';
export default {
  name: 'aa',
  mounted() {
    this.showloader();
    setTimeout(() => {
      this.hideloader()
    }, 1200);
  },
  methods:{
    ...mapActions(['showloader','hideloader'])
  }
}
</script>
<style lang="">
  
</style>

 

以上是vuex方法,虽然实现了想要的效果; 但是对于全局使用的,而且逻辑非常简单的,可以使用$bus(即window.$bus = new Vue();//注册全局事件对象,可以在main.js写明;然后使用它的$emit方法发送事件,在App.vue使用$on方法接收事件,通过不同的事件判断控制显示与隐藏的变量

$bus.$on('showLoad',()=>{

this.show=true;

})

$bus.$on('hideLoad',()=>{

this.show=false;

})

然后在需要的页面使用--为了方便,使用了延迟函数,实际情况请按逻辑来

$bus.$emit('showLoad');

setTimeout(() => {

$bus.$emit('hideLoad');

}, 2200);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的WPF Loading动画的代码: ```xaml <Window x:Class="LoadingAnimationWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="LoadingAnimationWindow" Height="150" Width="350"> <Grid> <Ellipse x:Name="Ellipse1" Width="30" Height="30" Fill="LightBlue"> <Ellipse.RenderTransform> <TranslateTransform X="0" Y="0"/> </Ellipse.RenderTransform> <Ellipse.Triggers> <EventTrigger RoutedEvent="Loaded"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="(Ellipse.RenderTransform).(TranslateTransform.X)" From="0" To="200" Duration="0:0:1" RepeatBehavior="Forever"/> </Storyboard> </BeginStoryboard> </EventTrigger> </Ellipse.Triggers> </Ellipse> <Ellipse x:Name="Ellipse2" Width="30" Height="30" Fill="LightBlue"> <Ellipse.RenderTransform> <TranslateTransform X="0" Y="0"/> </Ellipse.RenderTransform> <Ellipse.Triggers> <EventTrigger RoutedEvent="Loaded"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="(Ellipse.RenderTransform).(TranslateTransform.X)" From="0" To="-200" Duration="0:0:1" RepeatBehavior="Forever"/> </Storyboard> </BeginStoryboard> </EventTrigger> </Ellipse.Triggers> </Ellipse> </Grid> </Window> ``` 这个Loading动画使用了两个椭圆(Ellipse)来表示动画,每个椭圆都有一个 `TranslateTransform` 作为其渲染变换(Render Transform),并在其 `Loaded` 事件中启动一个 `Storyboard`,使用 `DoubleAnimation` 来改变 `TranslateTransform` 的 X 坐标值,从而实现椭圆的移动。两个椭圆的移动方向相反,从而形成动画效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值