使用vue制作动画效果

1:使用v-enter,v-enter-to,v-enter-active,v-leave,v-leave-to,v-leave-active进行类名绑定,transition会直接找到这几个类名。

2:给组件起名字比如one-enter,one-enter-to,one-enter-active,然后依据‘1’进行绑定。

3:使用自己已经写好的类名进行绑定,名称自己取。(直接写在transition属性中)

.a{
	opacity: 0;
 }
 .b{
     opacity: 1;
     margin-left: 500px;
 }
 .c{
     transition: all 3s;
 }
<div id="app">
    <button @click="toggle">我是按钮</button>
    <transition appear
                enter-class="a"
                enter-active-class="c"
                enter-to-class="b">
        <div class="box" v-show="isShow"></div>
    </transition>
</div>

4:通过Vue提供的JS钩子来实现过渡动画

各种钩子函数:
v-on:before-enter=“beforeEnter” 进入动画之前
v-on:enter=“enter” 进入动画执行过程中
v-on:after-enter=“afterEnter” 进入动画完成之后
v-on:enter-cancelled=“enterCancelled” 进入动画被取消

v-on:before-leave=“beforeLeave” 离开动画之前
v-on:leave=“leave” 离开动画执行过程中
v-on:after-leave=“afterLeave” 离开动画完成之后
v-on:leave-cancelled=“leaveCancelled” 离开动画被取消

<div id="app">
    <button @click="toggle">我是按钮</button>
    <!--
    注意点: 虽然我们是通过JS钩子函数来实现过渡动画
            但是默认Vue还是回去查找类名, 所以为了不让Vue去查找类名
            可以给transition添加v-bind:css="false"
    -->
    <transition appear
                v-bind:css="false"
                v-on:before-enter="beforeEnter"
                v-on:enter="enter"
                v-on:after-enter="afterEnter">
        <div class="box" v-show="isShow"></div>
    </transition>
</div>
<script>
    // 这里就是MVVM中的View Model
    let vue = new Vue({
        el: '#app',
        // 这里就是MVVM中的Model
        data: {
            isShow: true
        },
        // 专门用于存储监听事件回调函数
        methods: {
            toggle(){
                this.isShow = !this.isShow;
            },
            beforeEnter(el){
                // 进入动画开始之前
                console.log("beforeEnter");
                el.style.opacity = "0";
            },
            enter(el, done){
                // 进入动画执行过程中
                console.log("enter");
                /*
                注意点: 如果是通过JS钩子来实现过渡动画
                        那么必须在动画执行过程中的回调函数中写上
                        el.offsetWidth / el.offsetHeight
                * */
                // el.offsetWidth;
                el.offsetHeight;
                el.style.transition = "all 3s";
                /*
                注意点: 动画执行完毕之后一定要调用done回调函数
                        否则后续的afterEnter钩子函数不会被执行
                * */
                // done();
                /*
                注意点: 如果想让元素一进来就有动画, 那么最好延迟以下再调用done方法
                * */
                setTimeout(function () {
                    done();
                }, 0);
            },
            afterEnter(el){
                // 进入动画执行完毕之后
                console.log("afterEnter");
                el.style.opacity = "1";
                el.style.marginLeft = "500px";
            }
        },
        // 专门用于定义计算属性的
        computed: {
        }
    });
制作一个简单的Vue.js贪吃蛇游戏,需要遵循以下几个步骤: 1. **项目初始化**: 使用Vue CLI创建一个新的项目,安装必要的依赖,如`vue`, `vue-router`, 和一些用于动画效果的库(如`vue-motion` 或者 `@animatejs/core`)。 ```sh npm install -g @vue/cli vue create snake-game cd snake-game ``` 2. **组件设计**: - 创建一个基础的`Snake.vue`组件,包含蛇的身体部分、食物元素以及得分显示等。 - 使用`v-for`遍历蛇的身体节点,并添加事件监听,处理蛇移动的方向改变。 ```html <template> <div class="snake"> <div v-for="(bodyPart, index) in body" :key="index"> <div class="snake-part" :style="{ left: bodyPart.x + 'px', top: bodyPart.y + 'px' }" @click="changeDirection(index)"> <!-- 根据蛇头位置动态绘制身体 --> </div> </div> <div class="food" :style="{ left: food.x + 'px', top: food.y + 'px' }"></div> </div> </template> <script> export default { data() { return { body: [{ x: 0, y: 0 }, { x: 10, y: 0 }], direction: { x: 1, y: 0 }, food: { x: Math.floor(Math.random() * 400), y: Math.floor(Math.random() * 400) } }; }, methods: { changeDirection(index) { // 更改蛇移动方向,避免头部撞墙或自身 } } }; </script> ``` 3. **路由设置**: 设置一个路由,将`Snake.vue`作为主视图展示。 ```javascript // router/index.js import Vue from 'vue'; import Router from 'vue-router'; import Snake from '@/components/Snake.vue'; Vue.use(Router); const routes = [ { path: '/', component: Snake, } ]; export default new Router({ routes, }); ``` 4. **碰撞检测**: 添加逻辑来检查蛇是否碰到了边界、自身的尾巴或者食物。如果遇到这些情况,分别处理更新状态、增加长度和生成新食物。 5. **Vue实例化并运行**: 在`main.js`文件中创建Vue实例并配置路由。 ```javascript new Vue({ el: '#app', router, }); ``` 6. **CSS样式**: 编写一些基本的CSS来布局和美化游戏界面。 完成以上步骤后,你应该就有了一个基础的Vue.js贪吃蛇游戏。为了使游戏更完整,还可以考虑添加键盘控制、循环模式和难度级别等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值