先看效果图

一、前置条件

首先了解两个css字符排版的样式

1. writing-mode

设置文本行是水平还是垂直布局

  • horizontal-tb:默认值,表示水平排版,从上到下
  • vertical-lr:表示垂直排版,从左到右
  • vertical-rl:表示垂直排版,从右到左

2. text-orientation

设定行中字符的方向,仅影响纵向模式(当 writing-mode 的值不是horizontal-tb)下的文本。此属性在控制使用竖排文字的语言的显示上很有作用,也可以用来构建垂直的表格头

  • mixed:默认值,顺时针旋转水平书写的字符 90°,将垂直书写的文字自然布局
  • upright:将水平书写的字符自然布局(直排),包括垂直书写的文字
  • sideways:所有字符被布局为与水平方式一样,但是整行文本被顺时针旋转 90°

二、滚动原理

为了效果明显,我们给父元素添加边框作为可视区域,纵向的数字通过transform在Y轴位移达到滚动效果

    <template><div class="number"><span>0123456879</span></div></template><style scoped>.number {width: 20px;height: 20px;border: 1px solid #333;}.number span {writing-mode: vertical-rl;text-orientation: upright;transform: translateY(0%);}</style>

如下图所示


我们接着把边框去掉,换成overflow: hidden


假如现在有一个6位数字123456,我们想要它从000000滚动到目标数字123456

代码部分:

<template><div style="margin-left: 300px;margin-top: 300px;display: flex;align-items: center;"><div v-for="(item, index) in numberList" :key="index" style="display: flex;"><div class="number"><span ref="numberItem" :data-number="item" :data-index="index">0123456879</span></div></div><a-button style="margin-left: 30px;" @click="setNumberTransform">滚动</a-button></div>
</template><script>
export default {computed: {numberList() {return String(this.value).split("");}},data() {return {value: 123456};},methods: {// 设置每一位数字的偏移setNumberTransform() {let numberItems = this.$refs.numberItem;let obj = {}Array.from(numberItems).forEach(c => {let key = c.dataset.indexlet value = c.dataset.numberlet init = 0obj[key] = setInterval(() => {if (init < value * 10) {init++c.style.transform = `translateY(-${init}%)`;} else {clearInterval(obj[key])obj[key] = null}}, 10);  // 控制滚动速率});}},
};
</script><style scoped lang="less">
.number {width: 20px;height: 20px;border: 1px solid #ccc;> span {writing-mode: vertical-rl;text-orientation: upright;transform: translateY(0%);}
}
</style>

效果如下:

我们接着把边框去掉,换成overflow: hidden,效果如下:

三、封装数字滚动组件

创建scroll-number.vue数字滚动组件

<template><div style="display: flex;"><div v-for="(item, index) in numberList" :key="index" style="display: flex;"><span v-if="isNaN(item)">{{item}}</span><div class="number" v-else><spanclass="number-item"ref="numberItem":data-number="item":data-index="index">0123456879</span></div></div></div>
</template><script>
export default {props: {value: {type: [String, Number],default: 0}},watch: {value(newVal) {if (newVal) {this.$nextTick(() => {this.setNumberTransform();});}}},computed: {numberList() {return String(this.value).split("");}},data() {return {};},methods: {// 设置每一位数字的偏移setNumberTransform() {let numberItems = this.$refs.numberItem;let obj = {};Array.from(numberItems).forEach(c => {let key = c.dataset.index;let value = c.dataset.number;let init = 0;obj[key] = setInterval(() => {if (init < value * 10) {init += 1;c.style.transform = `translateY(-${init}%)`;} else {clearInterval(obj[key]);obj[key] = null;}}, 10);});}},mounted() {this.setNumberTransform();}
};
</script><style scoped lang="less">
.number {width: 20px;height: 20px;overflow: hidden;> span {writing-mode: vertical-rl;text-orientation: upright;transform: translateY(0%);}
}
</style>

使用改组件

 <scroll-number :value="'412,789,123,41.00'"></scroll-number>

效果如下图

css 数字滚动效果相关推荐

  1. html数字自动滚动代码怎么写,你可能需要这样的大屏数字滚动效果

    大屏数字滚动效果来源于最近工作中一张大屏的UI图,该UI图上有一个模块需要有数字往上翻动的效果,以下是最终实现的效果: 思路 在实现此效果之前,我们先来捋一下思路,用思维导图来设计一下我们的实现步骤, ...

  2. 初级开发者福音:手把手教你实现数字滚动效果~

    文章目录 一.前言 二.背景知识 三.实现方案 Step 1:分析需求 Step 2:实现单个数字的滚动效果 Step 3:组件接口设计 Step 4:完善组件 一.前言 前端数字滚动显示的场景很多, ...

  3. vue数字滚动效果组件

    数字滚动变化效果组件 效果 预览 体验地址 用途 大屏展示,数字滚动效果 实现 使用js控制元素移动. 关键代码如下: //修改 chang(oldVal,newVal,id){if(oldVal & ...

  4. js、jQuery实现数字滚动效果

    一.效果(监听页面滚动使得超过屏幕的数字每次出现都有数字滚动效果) 二.代码 在滚动数字的标签上加上类名counter <div class="about_right flex5&qu ...

  5. CSS3简单实现,数字滚动效果

    之前项目要做一个数字滚动效果. 因为需要一直滚动且过一段时间就要滚动,网上早的不太满足,而且为0也滚动,用css+jq写了一下. 首先每一个数字拆成单个数字. 我这边9个数字,根据自己需要添加. /* ...

  6. 【网站】数字滚动效果的实现方法

    代码如下: HTML部分: <div class="box Counter"><ul class="clearfix"><li&g ...

  7. vue实现数字滚动效果

    vue实现数字滚动效果 npm 下载 vue-count-to https://npmmirror.com/package/vue-count-to

  8. html 点击后上下滚动效果,css 上下滚动效果

    .scroll{ overflow:hidden; width:100%; } .scrollout{ height:250px; width:100%; overflow:hidden; curso ...

  9. jQuery数字滚动效果

    jQuery数字滚动效果## 引入jQuery <script src="js/jquery.min.js"></script> body <div ...

最新文章

  1. HDU 1429 胜利大逃亡(续)
  2. 小米5x_小米刷机大全(附教程)
  3. Python print函数用法,print 格式化输出
  4. python表达式_python表达式是什么
  5. 工作流调度系统介绍,常见工作流调度系统对比,azkaban与Oozie对比,Azkaban介绍与特性(来自学习笔记)
  6. Centos下 自动化配置SSH免密码登陆
  7. 获取treeview中当前鼠标所指的节点treenode 。
  8. [转载]struts+hibernate遇到的错误总结
  9. 使用bash编写Linux shell脚本--复合命令
  10. dataframe在最下面新增一行
  11. SQLite数据库操作类
  12. C# 调用并执行SQL脚本文件
  13. 一个帅气的车牌输入插件
  14. Linux系统centos下如何通过命令查看CPU内存存储等硬件信息?
  15. MOSES统计机器翻译系统实现过程
  16. CSS 第007篇 字体font
  17. winform窗体控件
  18. 按键控制步进电机转速(led闪烁)学习心得
  19. 小米手环4无需密钥获取心率(JAVA,安卓)
  20. 嵌入式软件详细设计怎么写?

热门文章

  1. XGBoost学习(四):实战-python3
  2. 浅谈代理服务器工作的原理
  3. 2019-1-18 笔记作业
  4. 网易2020校招笔试-c++开发工程师
  5. matlab中的length函数
  6. MatLab length 函数
  7. 如何获取每月第一个/最后一个交易日
  8. “纳米光学先驱”师生档详解光计算,全球首款商用光子芯片即将问世-1
  9. 获取美元人民币以及USDT人民币汇率-Python版
  10. 第二章:2.3 卷积定义(卷积积分与卷积和)