• Animate动画


    一个有趣的,跨浏览器的 css3 动画库。

    Animate.css

    • 安装

    • npm install animate.css --save

    • main.js中引用。import animate from 'animate.css' Vue.use(animate)

    • 使用

      • 方式一:HTML标签中添加class。缺点:页面加载后就开始
      • 方式二:HTML标签中添加class,但是绑定vue变量,由变量状态控制动画的播放
      • 方式三:元素添加动画,跟普通关键帧动画@keyframes一样使用
      • 更多使用方法,参考官网

    方式一

    HTML标签中添加class,animate__animated加上动画效果class。例如要使用弹跳动画animate__bounce,正确的写法如下:

    <h1 class="animate__animated animate__bounce">bounce弹跳动画h1>
    
    • animate__delay-2s — 延迟2s
    • animate__duration-2s — 持续2s(默认1s)
    • 速度、重复次数等详细配置案例项见官网

    方式二

    HTML标签中添加class,但是绑定vue变量,由变量状态控制动画的播放。例如要使用水平抖动动画animate__shakeX,在点击元素时触发动画。

    1.元素中绑定class与vue变量(也是必须包含animate__animated)。点击事件触发函数shake,并将变量isShakeForm作为参数

    //当变量isShakeForm中的isActive为true时,应用水平抖动动画。
    <h1 :class="{'animate__animated animate__shakeX animate__duration-2s' : isShakeForm.isActive }" @click="shake(isShakeForm)">bounce弹跳动画h1>
    
    //三目运算符。应用场景:上边写法中的class要么都使用要么都不使用,不管是否应用动画class都需要应用某些样式class时,可以使用三目运算符这种写法。
    <h1 :class="[isShakeForm.isActive?'login-box animate__animated animate__shakeX animate__duration-2s':'login-box']" @click="shake(isShakeForm)">bounce弹跳动画h1>
    

    2.vue中定义变量

    isShakeBtn: {isActive:false}, //是否启用 登录按钮 摇晃动画
    isShakeForm:{isActive:false},//是否启用 form表单 摇晃动画
    

    3.编写函数shake

    shake(shakeEl) { //触发 动画
      shakeEl.isActive = !shakeEl.isActive;//应用动画class
      setTimeout(() => {
        shakeEl.isActive = !shakeEl.isActive;
      }, 2000);//动画持续时间设置为两秒,所以两秒后去掉动画class(也可以将动画持续时间作为参数传进来)
    }
    
    
    //除了通过点击事件触发,也可以再其他函数中调用。例如表单验证失败后,调用抖动动画:
    this.$refs.loginFormRef.validate(async valid => {
              if (!valid) { //表单预验证 不通过
                this.shake(this.isShakeBtn); //登录按钮 摇晃动画
                return;
              }
              ...
    }
    

    方式三

    元素添加动画,跟普通关键帧动画@keyframes一样使用。不需要包含animate__animated,且没有前缀animate__

    .el-avatar:hover {
      animation: rubberBand;
      animation-duration: 1s;
    }
    

    动画class

    获取动画class名。打开官网,右侧栏是动画列表,点击相应的动画名可以在中间看到动画效果,点击右侧复制按钮可复制动画class名(包含了前缀的)。

    速度

    动画速度修改(修改动画持续时间)

    //方式一:class中添加 animate__duration-2s
    <div class="forget animate__animated animate__slideInRight">
        ...
    </div>
    
    
    //方式二:css中修改
    .animate__animated.animate__slideInRight{//.animate__slideInRight 指定应用在右侧划入动画(不指定则全部动画都应用)
      --animate-duration: .3s;//300毫秒
    }
    

    案例

    页面切换,Animate动画的应用:

    1.准备

    在main.js文件中,定义

    • $goback()函数
    • $to()函数
    • vuex变量animate

    App.vue文件中,设置

    • watch,监听路由变化
    • 添加Animate动画结束监听器
    • 动画全局样式(过渡时间,或者说动画速度)

    main.js文件

    定义$goback()函数:

    $goback()函数接收一个参数,下一个页面的名称(vue-router中定义的name)

    //返回上一个页面
    Vue.prototype.$goback = function(name) { //页面路由名称示)
    	this.$router.push({
    		name: name,
    		params: {
    			animate: 'animate__animated animate__slideInLeft'
    		}
    	})
    }
    
    //应用示例:
    this.$goback('order')  //跳转到订单页面,带页面切换动画(返回上一级页面)
    

    扩展:

    //返回上一个页面
    Vue.prototype.$goback = function(name, params) { //页面路由名称、参数params(可有可无)
    	var myParams = {};
    	if (params) {
    		params.animate = 'animate__animated animate__slideInLeft';
    		myParams = params;
    	} else {
    		myParams.animate = 'animate__animated animate__slideInLeft';
    	}
    	this.$router.push({
    		name: name,
    		params: myParams//用于传递参数(会拼接在url后边)
    	})
    }
    

    定义$goto()函数:

    $goto()函数接收一个参数,与上边$goback()函数相同。

    //前往下一个页面
    Vue.prototype.$goto = function(name) { //页面路由名称
    	this.$router.push({
    		name: name,
    		params: {
    			animate: 'animate__animated animate__slideInRight'
    		}
    	})
    }
    
    //应用示例:
    this.$goto('order')  //跳转到订单页面,带页面切换动画(进入下一级页面)
    

    定义vuex变量animate:

    import Vue from 'vue'
    import vuex from 'vuex'
    Vue.use(vuex);
    
    
    //添加animate变量
    var store = new vuex.Store({ //store对象
    	state: {
    		animate: '' //页面切换的动画效果
    	}
    })
    
    
    new Vue({
    	el: '#app',
    	router,
    	store, //使用store
    	components: {
    		App
    	},
    	template: ''
    })
    

    App.vue文件

    App.vue文件中,设置

    • watch,监听路由变化
    • 添加Animate动画结束监听器
    • 动画全局样式(过渡时间,或者说动画速度)

    监听路由变化:

    //获取路由中携带的动画信息并更新到vuex的animate
    '$route': function(newVal, oldVal) {
    	//页面切换动画
    	var animate = this.$route.params.animate; //获取 路由中携带的动画信息
    	if (animate) {
    		this.$store.state.animate = animate; //更新vuex中的animate
    		this.$route.params.animate = ''; //重置 路由中携带的动画信息 为空
    	}
    } 
    

    添加动画监听器:

    //App.vue中的created中添加监听器
    //Animate动画结束后,清除vuex的animate动画信息
    document.addEventListener('animationend', () => {
    	//动画结束 监听器。清除切换动画
    	this.$store.state.animate = ''; //重置 vuex中的animate 为空
    })
    

    动画全局样式:

    //全局Animate动画样式
    //$goto的动画持续时间为0.4秒(打开/进入下一页,速度稍慢)
    .animate__animated.animate__slideInRight {
    	--animate-duration: .4s;
    }
    //$goback的动画持续时间为0.2秒(返回上一页,速度稍快)
    .animate__animated.animate__slideInLeft {
    	--animate-duration: .2s;
    }
    

    2.使用

    在要应用切换动画的页面,根元素使用v-bind绑定vuex中的animate(动画效果),跳转到该页面时(返回到此页、跳转到下一页,此页为下一页)使用上边定义的$goback()、$goto()函数,其它情况(不想应用切换动画、平级页面之间的跳转等)则使用this.$router.push()来跳转即可。

    //页面 根元素 绑定vuex中的animate(动画效果)
    <div :class="$store.state.animate"><div>
    
    //跳转到当前页面,要应用 页面切换动画 就使用$goback()、$goto()函数,否则使用this.$router.push()
    
  • 相关阅读:
    【计算机毕业设计】网上商城购物系统
    Haproxy-1.5.19版本的基础运用
    【毕业设计】信用卡欺诈检测系统 - python 大数据
    意大利储能公司【Energy Dome】完成1500万欧元融资
    Nginx请求处理时间过长问题解决
    配置测试ip、正式ip、本地ip
    7.动态变量与JSON处理
    vue部署宝塔nginx配置(获取用户ip地址、反代理访问api接口、websocket转发)
    bat 批示处理详解-2
    WPF 截图控件之绘制方框与椭圆(四) 「仿微信」
  • 原文地址:https://blog.csdn.net/weixin_44773109/article/details/127091878