袁磊老师的课,VUE(五)

  • 一、watch
    当每次监听到值发生改变时,执行函数
    适用于,当数据发生变化时,执行异步操作或较大开销操作的情况

写法:

watch:{
	name:{
	
		handler(newName, oldName){},
		deep:true,
		immediate:true
}
}

练习:电脑瓦特了,没写什么备注…

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <input v-model="firstName">
        <input v-model="lastName">
        <input v-model="city.state">
        <h2>watch全名{{fullName}}</h2>
        <h2>计算属性全名{{qm}}</h2>
    </div>
    <script src="vue.js"></script>
    <script>
        var vm = new Vue({
            el: "#app",
            data: {
                firstName: "Mical",
                lastName: "Jordan",
                fullName: "",
                city: {
                    state: "cal",
                    name: "los"
                }
            },
            watch: {
                firstName: function (val) {
                    this.fullName = val + " " + this.lastName;
                },
                lastName(val) {
                    this.fullName = this.firstName + " " + val;
                },
                city: {
                    handler(newv, oldv) {
                        // alert(newv);
                        this.firstName = "Zhou";
                    },
                    deep: true, //深度监听
                    immediate: true, //立即执行
                },
            },
            //与computed的区别: watch经常做一些内部具有复杂的操作
            computed: {
                qm: function () {
                    return this.firstName + " " + this.lastName;
                }
            },
        });


        var uw = vm.$watch("firstName", function (newv, oldv) {
            //非深度监听,不能监听city
            console.log(newv, oldv);
        });
        uw;
    </script>
</body>

</html>
  • 二、VUE过渡动画
  1. 与原来的动画的区别:不该变任何的东西,知识单纯的视觉上的改变
  2. 对于VUE的动画只有两种,一种是进入的动画,一种是消失的动画
  3. 写法:
<transition name="fade">
<p v--if = "show">hello</p>
</transition>
  1. css的样式是要自己写的: fade-enter 等等

使用一个没有名字的,则v-是这些类名的默认前缀。如果你使用了,<transition name = "my-transition">那么v-enter会替换为my-transition-enter

  1. 自定义过渡的类名优先级高于普通的类名
  2. 过度动画钩子函数:例如:(进入)before-enter/enter/after-enter/enter-cancelled (离开)before-leave/leave/after-leave/leave-cancelled 用钩子函数是为了用已有的资源,在现实当中,有很多的js动画库,想要用其他的库,就要把其他库的内容写在钩子函数中。

练习1

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue动画</title>
</head>
<style>
    /* 为什么写tr-enter呢?因为tr对应下面的transition名字 */
    .tr-enter {
        opacity: 0;
        /* 初始的时候,最保险的操作opacity设置为0 */
    }

    .tr-enter-to {
        opacity: 1;
        font-size: 100px;
        /* 如果在这个里面加上这种改变css效果的代码,是不会在动画结束后也保持这个大小的 */
    }

    /* 上面两个,第一个tr-enter是第一帧,第二个tr-enter-to是最后一帧 */
    .tr-enter-active {
        transition: all 3s;
    }

    /* 第三方库的动画效果 */
    .lc {
        opacity: 1;
    }

    .ltc {
        opacity: 0;
    }

    .lac {
        transition: all 3s ease;
    }

    /* 离开 */
</style>

<body>
    <div id="app">
        <button @click="seen=true">显示</button>
        <button @click="seen=false">隐藏</button>
        <!-- 下面的leave-class是为了展示第三方库的动画效果 !!!!!!!!!!且一定要在transition这个标签上!!!!!1-->
        <transition name="tr" leave-class="lc" leave-to-class="ltc" leave-active-class="lac">
            <!-- transition不给name也可以,但是尽量要给 -->
            <!-- transition用在两个场景中,第一个是出现,第二个是消失的时候,有v-if和v-show的时候才会用到 -->
            <div v-show="seen">vue过渡动画</div>
        </transition>
    </div>

    <script src="vue.js"></script>
    <script>
        var vm = new Vue({
            el: "#app",
            data: {
                seen: true
            }
        })
    </script>
</body>

</html>

在这里插入图片描述
注意看下面的这个动画,在后面的3秒,字体是会变回原来的大小的,所以证明了vue过渡动画,是不会真的改变css的效果的,只做视觉冲击!
在这里插入图片描述

练习2
用animate.css也能实现动画哟!

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>用animate.css实现动画</title>
</head>
<style>
    /* 进入的初始状态 */
    .ltc .tr-enter {
        opacity: 0;
    }
/* 进入的终止状态 */
    .lc, .tr-enter-to{
        opacity: 1;
    }
</style>

<body>
    <div id="app">
        <button @click="seen=true">显示</button>
        <button @click="seen=false">隐藏</button>
        <!-- 下面的active-class中一定记得写animated!!!! -->
        <transition name="tr" leave-class="lc" leave-to-class="ltc" leave-active-class="animated bounceOut"
            enter-active-class="animated bounceIn">
            <div v-show="seen">vue过渡动画</div>
        </transition>
    </div>

    <script src="vue.js"></script>
    <script>
        var vm = new Vue({
            el: "#app",
            data: {
                seen: true
            }
        })
    </script>
</body>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值