Vue transition组件简单实现数字滚动

目录
  • 实现效果
    • Scrip
  • 布局
  • 动画
  • 逻辑控制
  • 总结

实现效果

Scrip

<template>
  <button @click="addCount">点我滚动数字</button>
  <div class="roll-container">
    <transition name="roll">
      <div class="roll-number" :key="count">{{ count }}</div>
    </transition>
  </div>
</template>
<script>
import { defineComponent, ref } from 'vue';
export default defineComponent({
  setup() {
    const count = ref(0);
    let click_time = Date.now();
    function addCount() {
      if (Date.now() - click_time < 300) return;
      click_time = Date.now();
      count.value += 1;
    }
    return {
      count,
      addCount,
    };
  },
});
</script>
<style>
.roll-container {
  position: relative;
  text-align: center;
  font-size: 120px;
  line-height: 1em;
  color: #fff;
  height: 1em;
  min-width: 1em;
  max-width: 3em;
  background: #000000;
  overflow: hidden;
}
.roll-number {
  /* position: absolute; */
  /* top: 0; */
  width: 100%;
}
.roll-enter-active,
.roll-leave-active {
  transition: all .3s;
  position: absolute;
  top: 0;
}
.roll-leave-to {
  top: -1em;
}
.roll-enter-active {
  top: 1em;
}
.roll-enter-to {
  top: 0;
}
</style>
      

使用vuetransition组件,来实现一个数字滚动效果,其实不仅可以是数字滚动,还可以是文字、段落滚动,代码片段使用了定位做的,还可以使用transform,只是一种思路,不限制方案。

布局

没有别人写的东西炫酷,我都不知道怎么写内容了,布局没啥好讲的,我这里会有一个容器包裹内部滚动的数字,主要是用于隐藏内部滚动的数字超出的部分,代码如下:

  <div class="roll-container">
    <transition name="roll">
      <div class="roll-number" :key="count">{{ count }}</div>
    </transition>
  </div>

样式如下:

.roll-container {
  position: relative;
  text-align: center;
  font-size: 120px;
  line-height: 1em;
  color: #fff;
  height: 1em;
  min-width: 1em;
  max-width: 3em;
  background: #000000;
  overflow: hidden;
}
.roll-number {
  width: 100%;
}

这里的细节就是transition组件是用于元素显隐状态切换使用的,一般用于v-ifv-show,还有transition-group也是一样的,不过transition-group是用于多个元素上的,可以作用在列表上,对于列表的数据新增、删除可以触发过渡效果。

而我这里使用keykey发生改变可以强制元素的更新,可以完整的触发组件的生命周期,就达到了元素销毁和创建的整个过程,也可以触发过渡,key的作用老生常谈了,可以网上去查查资料,用得好可以有很多巧妙的作用。

动画

动画是使用vuetransition组件的css class过渡方式,官网上的文档过渡的生命周期描述的很清楚,我就不搬运了,vue transiton组件

过渡css代码:

/*
动画激活时给予初始状态,这个基础状态用于定义后续过渡动作的起点
这里统一定义了组件创建和组件销毁的两个起点,主要是赋予 transition 使其有一个过渡
*/
.roll-enter-active,
.roll-leave-active {
  transition: all .3s;
  position: absolute;
  top: 0;
}
/*
组件销毁,过渡的终点
最开始的起点是原位,离开的时候滚到上面去
*/
.roll-leave-to {
  top: -1em;
}
/*
组件创建,过渡的起点
创建的时候是重下往上进入,所以元素最开始是在下面
*/
.roll-enter-active {
  top: 1em;
}
/*
过渡的时候回到起点,达到重下往上滚动
*/
.roll-enter-to {
  top: 0;
}

代码就这么一丢丢,只要理解了过渡的生命周期,就可以控制各种效果,我这里这个应该是入门级代码,这里的细节就是需要定义一个过渡的起点,因为使用的是定位,如果不设置起点是没有过渡效果的,如果是用变换(transform)可以不用设置起点,为什么这个就和css相关了,不在这次的谈论范围之内。

逻辑控制

逻辑控制主要是要动画执行完成之后才能再次修改变量,否则就会有重叠,闪动等,造成动画不连贯,我这里动画执行时间是300毫秒,所以也就是300毫秒只能修改一次状态。

    const count = ref(0);
    // 缓存第一次状态修改的时间
    let click_time = Date.now();
    function addCount() {
      // 300ms 只能执行一次
      if (Date.now() - click_time < 300) return;
      // 重置状态修改的时间
      click_time = Date.now();
      count.value += 1;
    }

这个就是一个很简单的逻辑控制,这里是通过点击来修改的,这里也可以通过定时器去处理。

总结

以前要做一个数字滚动需要弄一个插件,插件代码也多,通过js进行控制处理,一般都是把0-9的数字放一排,然后滚动,滚动完成把头部的数字放到尾部,而使用transition组件只要这么一丢丢代码就可以完成相同的功能,如果在加上vue3新出的css变量绑定,还可以做到过渡动画执行时间的动态控制。

以上就是Vue transition组件简单实现数字滚动的详细内容,更多关于Vue transition数字滚动的资料请关注我们其它相关文章!

(0)

相关推荐

  • Vue中transition单个节点过渡与transition-group列表过渡全过程

    目录 transition单个节点过渡与transition-group列表过渡 transition的过渡作用和transition-group transition单个节点过渡与transition-group列表过渡 transition:只能满足单个节点的过渡效果,在多个节点的渲染上显得力不从心 为了更好适用于更多的场景,vue 提供 <transition-ground>来多个元素的过渡 首先创建了一个简单的应用,通过button  来实现动态的加减,使用了啊你,实际效果可运行一下代

  • vue使用transition组件动画效果的实例代码

    transition文档地址 定义一个背景弹出层实现淡入淡出效果 <template> <div> <button @click="show = !show"> Toggle </button> <transition name="fadeBg"> <div class="bg" v-if="show">hello</div> </tra

  • 详解vue过度效果与动画transition使用示例

    目录 transition钩子函数 自定义过渡类名 transition-group使用 小结 先看一个示例 代码如下 <template> <div align="center" style="margin-top: 100px;"> <button @click="show= !show" >测试</button> <transition> <div v-if="sh

  • vue中transition组件在项目中运用小结

    ​vue中的transtion是一个动画过渡封装组件,常见的情景时用transition标签包裹的DOM含有动画效果.transition组件的动画效果过渡设置基于css的transition属性设置.下面给大家介绍下vue中transition组件在项目中运用. 单个弹入弹出运用 注意: name的名字为多少,则下面的样式class开头就要为多少 通过v-if来配合执行动画效果 <template> <div> <button v-on:click="show =

  • 详解vue中使用transition和animation的实例代码

    以前写页面注重在功能上,对于transition和animation是只闻其声,不见其人,对于页面动画效果心理一直痒痒的.最近做活动页面,要求页面比较酷炫,终于有机会认真了解了. transition:英文过渡的意思,作用是过渡效果:animation:英文活泼.生气.激励,动画片就是animation film,作用是动画效果. transition在w3school的实例: //将鼠标悬停在一个 div 元素上,逐步改变表格的宽度从 100px 到 300px: div { width:10

  • Vue transition实现点赞动画效果的示例

    目录 效果一览 爱心效果 数字滚动动画 点赞动画 效果一览 爱心效果 材料:爱心图标两个,没有我这种 icon 组件的用 png 图片代替 <transition :name=" isLike ? 'zoom' : '' " mode="out-in"> <!-- 爱心图标 --> <icon data="@icon/like.svg" color="#FF0000" v-if="isL

  • Vue transition组件简单实现数字滚动

    目录 实现效果 Scrip 布局 动画 逻辑控制 总结 实现效果 Scrip <template> <button @click="addCount">点我滚动数字</button> <div class="roll-container"> <transition name="roll"> <div class="roll-number" :key="

  • Vue.js实现大屏数字滚动翻转效果

    大屏数字滚动翻转效果来源于最近工作中element后台管理页面一张大屏的UI图,该UI图上有一个模块需要有数字往上翻动的效果,以下是最终实现的效果: 整体思路: 在实现此效果之前,我们先来捋一下思路,用思维导图来设计一下我们的实现步骤,如下: 你可以审查元素,下载数字背景图片,复制图片地址,或者使用其他背景图片.背景颜色 有了以上的设计流程,我们先来简单实现一下: // CSS代码 <style> .box-item { position: relative; display: inline-

  • Vue组件实现数字滚动抽奖效果

    本文实例为大家分享了Vue组件实现数字滚动抽奖效果的具体代码,供大家参考,具体内容如下 可调整数字滚动速度,可指定开奖延迟时间,可指定开奖数字,按个人需求自行改动(录了个效果供参考,临时找的录屏,表介意)不一一精简了 组件代码 <template>     <div class="info-span04" style="color: #333333;">         中奖号码:         <div style="ve

  • vue 实现数字滚动增加效果的实例代码

    项目中需要做数字滚动增加的效果,一开始很懵,研究了一下原理,发现很简单,贴出来分享一下 ^_^ 数字滚动组件: <template> <div class="number-grow-warp"> <span ref="numberGrow" :data-time="time" class="number-grow" :data-value="value">0</sp

  • vue Keep-alive组件缓存的简单使用代码

    目录 Props: 用法: 一.基本用法 二.结合Router使用 总结 Props: include - 字符串或正则表达式.只有名称匹配的组件会被缓存. exclude - 字符串或正则表达式.任何名称匹配的组件都不会被缓存. max - 数字.最多可以缓存多少组件实例. 用法: keep-alive包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们.和 <transition> 相似,<keep-alive> 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在

  • vue递归组件实战之简单树形控件实例代码

    1.递归组件-简单树形控件预览及问题 在编写树形组件时遇到的问题: 组件如何才能递归调用? 递归组件点击事件如何传递? 2.树形控件基本结构及样式 <template> <ul class="vue-tree"> <li class="tree-item"> <div class="tree-content"><!--节点内容--> <div class="expand-

  • vue实现数字滚动效果

    本文实例为大家分享了vue实现数字滚动的具体代码,供大家参考,具体内容如下 <template> <div class="num-block"> <div class="num-block_show"> <div class="num-block_numbers" :class="{'ellipsis': !isNum(item)}" v-for="(item, key) i

  • Vue 实现一个简单的鼠标拖拽滚动效果插件

    最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了. github 地址:github.com/qq449245884- 最近在做一个新的项目,有个需要是这样的: 简单描述一下,就是鼠标拖动页面,整个页面会随着的鼠标的拖拽而移动,如果页面有内容,里面的内容也需要跟着拖动的外层整体移到. 一开始没啥思路,所以就发了个朋友圈,得到的答案挺多的,主要还是用拖拽之类的,但这个拖拽只是单个元素的拖动,我想要的整个视图的拖动. 这里线索又断了.

  • vue 递归组件的简单使用示例

    前言 递归 相信很多同学已经不陌生了,算法中我们经常用递归来解决问题.比如经典的:从一个全为数字的数组中找出其中相加能等于目标数的组合.思路也不难,循环数组取值,不断递归相加,直到满足目标数条件.递归虽然能解决大部分,但弊处在于,很容易写出死循环的代码,导致爆栈.下面以我实际业务场景讲讲递归在vue组件中的应用. 在vue中使用 完成一个完整的递归,我个人认为最重要的有两点: 确定好进入递归的条件; 确定好跳出递归的条件; 其中最重要的就是确定 什么时候跳出递归.递归组件实际上非常简单,就是 A

随机推荐