<template>
<div
class="aird-digitalscroll"
:style="{height:fontSize+'px',lineHeight:fontSize+'px'}"
>
<p
v-for="(item,index) in computeNumber"
:key="index"
class="aird-digitalscroll__item"
:style="{width:(fontSize/2+5)+'px',fontSize:fontSize+'px'}"
>
<span
ref="numberDom"
:style="{color:color,letterSpacing:fontSize+'px'}"
>0123456789</span>
</p>
</div>
</template>
<script>
export default {
name: 'BusiDigitalScroll',
props: {
number: {
type: Number,
default: 0,
},
color: {
type: String,
default: '#000000',
},
fontSize: {
type: [String, Number],
default: 12,
},
},
data () {
return {
maxLen: 10, //最大长度
computeNumber: [], //数字补零后分割为数组,遍历
timeTicket: null,
};
},
watch: {
number () {
this.refresh();
},
},
mounted () {
this.refresh();
// this.increaseNumber();
},
destroyed () {
window.clearTimeout(this.timeTicket);
this.timeTicket = null;
},
methods: {
/**
* @description: 数字补零操作,返回数组
* @param {number} num 被操作数
* @param {number} n 总长度
* @return:
*/
prefixZero (num, n) {
return (Array(n).join('') + num).slice(-n).split('');
// return num.slice(-n).split("");
},
/**
* @description: 获取随机数
* @param {type}
* @return:
*/
getRandomNumber (min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
},
// 设置每一位数字的偏移
setNumberTransform () {
const numberItems = this.$refs.numberDom;
for (let index = 0; index < numberItems.length; index++) {
const elem = numberItems[index];
elem.style.transform = `translate(-50%,-${Number(
this.computeNumber[index]
) * 10}%`;
}
},
// 定时增长数字
increaseNumber () {
this.refresh();
this.timeTicket = setTimeout(this.increaseNumber, 1000);
},
// 定时刷新数据
refresh () {
this.computeNumber = this.prefixZero(this.number, this.maxLen);
this.$nextTick(() => this.setNumberTransform());
},
},
};
</script>
<style lang="scss" scoped>
.aird-digitalscroll {
display: flex;
justify-content: center;
line-height: 100%;
height: 100%;
p {
line-height: 100%;
// flex: 1;
width: 12px;
height: 100%;
text-align: center;
display: inline-block;
font-size: 20px;
position: relative;
writing-mode: vertical-lr;
text-orientation: upright;
overflow: hidden;
&:last-child {
margin-right: 0;
}
span {
position: absolute;
top: 0;
left: 50%;
transform: translate(-50%, -50%);
transition: transform 2s ease 1s;
letter-spacing: 10px;
font-family: DigifaceWide;
}
}
}
</style>
vue数字滚动组件
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 描述问题: 最近写一个项目,写了一个上拉加载的组件,当在A父组件引用该子组件后,发现从A组件跳转到其它.v...
- 组件源码:https://github.com/AntJavascript/widgetUI/tree/maste...