使用Vue的transition组件写一个数字滚动竟然如此简单

2023-11-10

使用vue的transition组件,来实现一个数字滚动效果,其实不仅可以是数字滚动,还可以是文字、段落滚动,代码片段使用了定位做的,还可以使用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-if、v-show,还有transition-group也是一样的,不过transition-group是用于多个元素上的,可以作用在列表上,对于列表的数据新增、删除可以触发过渡效果。
而我这里使用key,key发生改变可以强制元素的更新,可以完整的触发组件的生命周期,就达到了元素销毁和创建的整个过程,也可以触发过渡,key的作用老生常谈了,可以网上去查查资料,用得好可以有很多巧妙的作用。

动画

动画是使用vue的transition组件的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变量绑定,还可以做到过渡动画执行时间的动态控制。

完整附件:http://github.crmeb.net/u/defu

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Vue的transition组件写一个数字滚动竟然如此简单 的相关文章

随机推荐

  • PRML一书中关于贝叶斯曲线拟合结论的推导细节

    PRML一书中关于贝叶斯曲线拟合结论的推导细节 我们令训练数据集为 X T X T X T 对于一个新的点 x
  • GitBook使用教程

    各大站长平时除了写博客外 可以使用 gitbook 将一系列的博客专栏整理成电子书出版 这样既方便各大网友阅读 还可以带来新的离线阅读功能 在以前我们只能靠出版社 或者编写 word 文档 来实现 然而有了 gitbook 之后 一切都变得
  • Python 炫技操作:条件语句的六种写法(Python就是这么炫酷)

    有的人说 Python 入门容易 但是精通难的语言 这点我非常赞同 Python 语言里有许多 而且是越来越多 的高级特性 是 Python 发烧友们非常喜欢的 在这些人的眼里 能够写出那些一般开发者看不懂的高级特性 就是高手 就是大神 但
  • 1.两数之和

    两数之和 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组中找出 和为目标值 target 的那 两个 整数 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素在答案里不能重复出现 你可
  • 网络—安全—防火墙

    网络 安全 防火墙 是什么 表面概念 防火墙 一种高级访问控制设备 置于不同网络安全域之间 它通过相关的安全策略来控制 允许 拒绝 监视 记录 进出网络的访问行为 是什么 设备结构和运行原理 设备结构 Netfilter是由Rusty Ru
  • [Vue3 博物馆管理系统] 使用Vue3、Element-plus的Layout 布局构建组图文章

    系列文章目录 第一章 定制上中下 顶部菜单 底部区域 中间主区域显示 三层结构首页 第二章 使用Vue3 Element plus菜单组件构建菜单 第三章 使用Vue3 Element plus走马灯组件构建轮播图 第四章 使用Vue3 E
  • 使用python程序进行手势识别

    python代码 从视频读取帧保存为图片 import cv2 import numpy as np cap cv2 VideoCapture C Users lenovo Videos 1 mp4 读取文件 cap cv2 VideoCa
  • QGraphicsScene管理QGraphicsItem(单击/选择/移动/缩放/删除)

    文章目录 前言 简述 操作细节 示例 效果 源码 疑问自解自答 那么正方形旋转参照的是哪个点那 前言 本文参考博文https blog csdn net liang19890820 article details 53504323 简述 在
  • 初级运维(九)

    1 静态资源和动态资源的区别 优缺点如何 答 静态资源 URL固定 后缀名诸如 html和 jpg和 gif 它是服务端存在的一种文件 浏览器进行解析 不与数据库交互 有利于网站推广 SEO 维护麻烦 动态资源 有数据库支持 内容丰富 后缀
  • Linux操作系统 第八章

    实验1 磁盘引导 开启虚拟机 mbr 主引导记录 0磁道1扇区446 作用 记录grub2引导文件的位置 dd if dev zero of dev vda bs 446 count 1 清空系统 dev sda上的mbr数据 fdisk
  • android app 跳转到微信

    公司做了个微信投票活动 必须下载安装我们的app才能参加 所以当新客户投票时就会下载安装我们的 然后在注册完成后客户信息同步到微信接口上 然后就有一个回到微信的跳转 主要代码如下 try catch 捕捉到ActivityNotFoundE
  • 【论文笔记04】Model-driven approach for the design of multi-chainsmart contracts—用于设计多链智能合约的模型驱动方法

    A Bari i E Zhu and F Mallet Model driven approach for the design of Multi Chain Smart Contracts 2021 3rd Conference on B
  • g++十个最常用参数

    g 重要参数 1 g 产生调试信息 可以调试程序 2 O n 优化源代码 O0 不作优化 O1 默认 O2 指令调整 O3 循环展开 处理特性优化 编译速度会变慢 3 l指定库文件 L指定库文件路径 要链接哪些库 库直接紧接着比如 lglo
  • 36 openEuler搭建repo服务器-部署远端repo源

    文章目录 36 openEuler搭建repo服务器 部署远端repo源 36 1 nginx安装与配置 36 2 启动nginx服务 36 3 repo源部署 36 openEuler搭建repo服务器 部署远端repo源 安装openE
  • uniapp的分页方法skip方法调用报错 “offsetmust be integer“

    开发中使用官方分页查询列表数据报错 官方写法 一直报错 后面通过官网的文档找到skip方法介绍才知道问题 skip的参数必须是一个正整数 发现改成整数后可以调用成功 希望能给大家一点帮助 发现uniapp的云开发使用调试还是很麻烦 经常调用
  • 使用QT进行WIFI无线传输数据

    好久没有更新博客了 今天简单写下关于WiFi无线通信进行数据传输的相关内容 基于TCP IP协议的通信 代码在文章末尾 具体实现如下 1 首先win R 进入命令行 输入ipconfig查看WiFi网卡的IP地址 2 使用WiFi网址对网关
  • Python 字典 keys() 方法

    描述 Python 字典 keys 方法以列表形式 并非直接的列表 若要返回列表值还需调用list函数 返回字典中的所有的键 语法 keys 方法语法 D keys 参数 无 返回值 以列表形式返回字典中的所有的键 实例 以下实例展示了 k
  • hadoop3.1.1:启动hadoop进程提示ssh 22端口不能连接

    分析 由于在生产环境下 ssh的端口被修改成220 不是使用的默认端口 但是hadoop在启动相应进程的时候 使用的ssh默认端口 解决 1 命令行 临时 这种方式会导致关闭当前终端 该值失效 export HADOOP SSH OPTS
  • java ddd开发_Java开发架构篇《初识领域驱动设计DDD落地》

    作者 小傅哥 博客 https bugstack cn gt 沉淀 分享 成长 让自己和他人都能有所收获 一 前言 gt DDD Domain Driven Design 领域驱动设计 是由Eric Evans最先提出 目的是对软件所涉及到
  • 使用Vue的transition组件写一个数字滚动竟然如此简单

    使用vue的transition组件 来实现一个数字滚动效果 其实不仅可以是数字滚动 还可以是文字 段落滚动 代码片段使用了定位做的 还可以使用transform 只是一种思路 不限制方案 布局 没有别人写的东西炫酷 我都不知道怎么写内容了