Day12——nextTick和动画

this.$nextTick

<input type="text"  ref="inputTitle">
 //编辑
        handleEdit(todo) {
            // 1-2在todos中增加一个isEdit属性,值为布尔值;当值为true,显示表单
            // 注意:将isEdit值设为true,需要满足响应式
            this.$set(todo,"isEdit",true)
            // 需要实现点击编辑时出现表单的同时自动获取焦点
            // 1.使用this.$refs.inputTitle.focus()不能达到目的,
            // 原因是:会把这两行代码执行完后解析模板,这样又会失去焦点。
            //2.使用定时器可以实现:
            // setTimeout(() => {
            //     this.$refs.inputTitle.focus()
            // });
            // 这种方法是利用了异步事件,原理是等执行完同步事件再去执行异步事件。
            // 3.使用API:$nextTick实现(比较推荐)
            this.$nextTick(function(){
                this.$refs.inputTitle.focus()
            })
            // 语法:this.$nextTick(回调函数)
            // 原理:当在它上边的代码执行完毕去解析完模板之后再回来执行this.$nextTick里的函数。
            // 场景:当已改变数据后,基于新的DOM进行某些操作时,在$nextTick回调函数中执行。
        },

实现一个元素过渡

动画效果

<template>
  <div class="demo">
    <button @click="isShow=!isShow">点击按钮显示或隐藏动画</button>
    <transition>    <!-- 在vue中一般将要做动画效果的部分用transition标签包起来-->
        <h2 v-show="isShow">{{msg}}</h2>
    </transition>
    <!-- <transition name="demo" appear>可以在标签内加入这些内容,若加了name,则需要给下边的进场和离场动画变为.demo-enter-active和.demo-leave-active,如果加appear,表示打开页面就有动画进场-->
  </div>
</template>

<script>
    export default {
        name:"SchoolInfo",
        data(){
            return {
                msg:"你好啊",
                isShow:true
            }
        }
    }
</script>

<style>
        /* 为h2增加动画效果 */
        @keyframes move{  /* move表示动画名字 */
            from{
                transform: translateX(-100%);
            }
            to{
                transform: translateX(0px);
            }
        }
        /* 为动画设置样式 */
        /* 进场动画 v-enter-active*/
        .v-enter-active{
                animation: move 0.5s linear forwards;  
                /* linear表示匀速 */
        }
        /* 离场动画 v-leave-active*/
        .v-leave-active{
                animation: move 0.5s linear reverse;
        }

            .demo h2{
                background-color: orange;
            }
            h2 {
                height: 100px;
                width: 100%;
                margin-top: 25px;
                text-align: center;
                line-height: 100px;
                font-size: 50px;
            }
</style>

用过渡实现

前边部分和动画实现一样,style标签里的内容有区别。

<style>
/* 用过渡同样实现效果 */
        /* 进入的起点、离开的终点 */
        .demo-enter,.demo-leave-to{
            transform:translateX(-100%);
        }
        /* 进入的终点、离开的起点 */
        .demo-enter-to,.demo-leave{
            transform:translateX(0);
        }
        /* 进入、离开界面过程中的效果样式 */
        .demo-enter-active,.demo-leave-active{
            transition: 0.5s linear;
        }
</style>

实现多个元素过渡

<button @click="isShow=!isShow">点击按钮显示或隐藏动画</button>
    <transition-group name="demo" appear>    <!-- 当要实现多个元素动画效果,必须加上group,且一定要加上key值-->
        <h2 v-show="isShow" key="1">{{msg}}</h2>
        <h1 v-show="isShow" key="2">hello</h1>
        <!-- 当然,也可以通过修改v-show的值来呈现出两个不同是显示的效果 -->
    </transition-group>
   

引入一个第三方库实现动画、过渡效果

Animate.css库

<div class="box">
    <button @click="isShow=!isShow">点击按钮显示或隐藏动画</button>
    <!-- 根据npm中animate.css教程,把name修改如下方所示: -->
    <!-- 并且配置两个新的配置项,然后在官网找到想要的效果复制-->
    <transition-group 
    appear
    name="animate__animated animate__bounce"
    enter-active-class="animate__backInDown"
    leave-active-class="animate__backOutDown"
    >    
    <!-- 当要实现多个元素动画效果,必须加上group-->
        <h2 v-show="!isShow" key="1">{{msg}}</h2>
        <h1 v-show="isShow" key="2">hello</h1>
        <!-- 当然,也可以通过修改v-show的值来呈现出两个不同是显示的效果 -->
    </transition-group>
    <!-- <transition name="demo" appear>可以在标签内加入这些内容,若加了name,则需要给下边的进场和离场动画变为.demo-enter-active和.demo-leave-active,如果加appear,表示打开页面就有动画进场-->
  </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值