vue 动态组件动画-转场动画基础

简介: 这个先不用单文件组件来演示因为单文件组件 一般都是项目使用了,项目中一般都是路由动画

1.前言


这个先不用单文件组件来演示

因为单文件组件 一般都是项目使用了,项目中一般都是路由动画


2.动态组件动画


html


<div id="my-app">
        <label for="">男装</label>
        <input type="radio" value="com1" v-model="type">
        <label for="">女装</label>
        <input type="radio" value="com2" v-model="type">
        <hr>
        <transition name="yzs">
            <keep-alive>
                <component :is="type"></component>
            </keep-alive>
        </transition>
    </div>



3. js



var com1 = {
        template: `
        <div class="sub-root1">
            <h1>男装</h1>
            <p> 假装 你喜欢的男神风格的衣服</p>
        </div>
        `,
        mounted() {
            console.log("com1渲染完毕")
        },
        destroyed() {
            console.log("com1已被销毁")
        }
    };
    var com2 = {
        template: `
        <div class="sub-root2">
            <h1>女装</h1>
            <p>假装有很多 图片列表哈哈</p>
        </div>
        `,
        mounted() {
            console.log("com2渲染完毕")
        },
        destroyed() {
            console.log("com2已被销毁")
        }
    }
    var app = new Vue({
        el: "#my-app",
        components: {
            com1,
            com2
        },
        data: {
            type: "com1"
        }
    });



4. 样式



<style>
        .sub-root1{
            background-color: skyblue;
            height:500px;
            width: 100%;
        }
        .sub-root2{
            background-color: greenyellow;
            height:500px;
            width: 100%;
        }
        .yzs-enter-active,
        .yzs-leave-active {
             /* 为了保证组件切换动画时,两个组件重叠显示,在动画持续时间将做动画的组件根元素设置为绝对行为 */
            position: absolute;
            transition: all 2s;
        }
        .yzs-leave-to ,.yzs-enter{
            opacity: 0;
        }
        .yzs-enter-to,.yzs-leave {
            opacity: 1;
        }
    </style>



5. 转场动画-html


transition的name属性可以是固定值,

也可以动态绑定一个变量,这样就可以通过修改变量实现在不同场景下执行不同的动画


<div id="my-app">
        <nav>
            <label for="">组件1</label>
            <input type="radio" v-model="type" value="com1">
            <label for="">组件2</label>
            <input type="radio" v-model="type" value="com2">
        </nav>
        <transition :name="aniType">
            <keep-alive>
                <component :is="type"></component>
            </keep-alive>
        </transition>
    </div>



6.转场动画-js



Vue.component("com1",{
        template:`<div class="sub-root1">
            组件1
            <input>
        </div>`
    })
    Vue.component("com2",{
        template:`<div class="sub-root2">组件2</div>`
    })
    var app = new Vue({
        el:"#my-app",
        data:{
            type:"com1",
            aniType:"slide-left"
        },
        watch:{
            // 监听type的变化,判断是要切换到哪个组件,从而改变aniType的类型,执行不同的动画。
            type:function(v){
                if(v=="com2"){
                    this.aniType = "slide-left"
                }else{
                    this.aniType = "slide-right";
                }
            }
        }
    })



7. 转场动画-style



body{
            margin: 0;
        }
        nav{
            border: solid 1px black;
            height: 40px;
        }
        .sub-root1,.sub-root2{
            border: solid 1px red;
            height: 300px;
            width: 100%;
            box-sizing: border-box;
        }
        .sub-root1{
            background-color: skyblue;
        }
        .sub-root2{
            background-color: greenyellow;
        }
        /* 左侧离场,右侧入场 动画 */
        .slide-left-leave{
            transform: translate(0,0);
        }
        .slide-left-leave-active,.slide-left-enter-active{
            transition: all 0.7s;
            /* 为了保证组件切换动画时,两个组件重叠显示,在动画持续时间将做动画的组件根元素设置为绝对行为 */
            position: absolute;
        }
        .slide-left-leave-to{
            transform: translate(-100%,0);
        }
        .slide-left-enter{
            transform: translate(100%,0);
        }
        .slide-left-enter-to{
            transform: translate(0,0);
        }
        /* 右侧离场,左侧入场 动画 */
        .slide-right-leave{
            transform: translate(0,0);
        }
        .slide-right-leave-active,.slide-right-enter-active{
            transition: all 0.7s;
            position: absolute;
        }
        .slide-right-leave-to{
            transform: translate(100%,0);
        }
        .slide-right-enter{
            transform: translate(-100%,0);
        }
        .slide-right-enter-to{
            transform: translate(0,0);
        }
        body{
            overflow-x: hidden;
        }

抛砖引玉 更多奇思妙想的 动画等你玩 , 玩去吧


8.后记


代码比较多 ,注释 解释不多 .没有太多的逻辑

自己看 自己练,玩,自己体会




相关文章
|
6天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
51 1
|
2月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
147 64
|
17天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
41 8
|
2月前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
2月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
JavaScript
Vue的非父子组件之间传值
全局事件总线 一种组件间通信的方式,适用于任意组件间通信
|
缓存 JavaScript 前端开发
Vue Props、Slot、v-once、非父子组件间的传值....
Vue Props、Slot、v-once、非父子组件间的传值....
91 0
|
JavaScript
Vue中父子组件传值
先在⽗组件中给⼦组件的⾃定义属性绑定⼀个⽗组件的变量
|
JavaScript
vue 组件传值
vue 组件传值
91 0

热门文章

最新文章