vue 디지털 스크롤 효과 구현
<template>
<div class="num-block">
<div class="num-block_show">
<div class="num-block_numbers" :class="{'ellipsis': !isNum(item)}" v-for="(item, key) in numbers" :key="key">
<!-- <ul class="num-block_ul" :style="ulStyles(noNumbers(item, key))" v-if="isNum(item)"> -->
<ul class="num-block_ul" :style="ulStyles(item, key)" v-if="isNum(item)">
<!-- <li v-for="(opt, index) in noNumbers(item, key)" :key="index">
{{ opt }}
</li> -->
<li>0</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
</ul>
<div class="num-block_ellipsis" v-else>,</div>
</div>
</div>
<!-- <div style="position:absolute;top:250px;left:0">
{{ this.numbers }}
</div> -->
</div>
</template>
<script>
export default {
name: "ws-num-block",
props: ['data'],
data() {
return {
currentData: '10',
lastData: '10'
}
},
computed: {
numbers() {
let data = this.data;
if(!data) {
return
}
data = this.dealData(data);
return data;
}
},
watch: {
data(val){
let lastData = this.currentData;
this.currentData = this.dealData(val);
this.lastData = lastData;
}
},
methods: {
noNumbers(item, key) {
let lastData = this.lastData;
let lastItem = this.lastData[key];
let result = [];
lastItem = lastItem ? lastItem : '0';
if(lastItem != item) {
if(lastItem == ',' || item == ',') {
result.push(item);
return result;
}else {
let meal = 0;
if(Number(item) < Number(lastItem)) {
meal = Number(item) + 10 - Number(lastItem);
}else {
meal = Number(item) - Number(lastItem);
}
for(let i=0;i<meal+1;i++) {
if(Number(lastItem) > 9) {
lastItem = 0;
}
result.push(lastItem.toString());
lastItem++;
}
return result;
}
}else {
result.push(item);
return result;
}
},
// ulStyles(arr) {
ulStyles(item, key) {
// if(!arr) {
// return
// }
let top = 0;
// let currentTop = -26 * Number(arr.length-1);
let currentTop = -30 * Number(item);
top = currentTop + 'px';
// top = 0;
return {
'position': 'absolute',
'left': 0,
'top': top,
'width': '12px',
'list-style': 'none',
'padding': '0',
'margin': '0',
'transition': '1s'
}
},
isNum(val) {
return val == ',' ? false : true
},
dealData(val) {
let vals = val.toString().split('').reverse();
let dealData = [];
for(let i=0;i<vals.length;i++) {
if( i > 0 && i%3 == 0 ) {
dealData.push(',');
}
dealData.push(vals[i]);
}
dealData = dealData.reverse().join('');
return dealData;
}
}
};
</script>
<style lang="sass">
.num-block
width: 100%
height: auto
&_show
display: flex
justify-content: center
height: 30px
overflow: hidden
&_numbers
position: relative
width: 14px
&_numbers.ellipsis
width: 6px
&_ul>li
height: 30px
line-height: 30px
&_ellipsis
position: absolute
left: 0
top: 0
width: 6px
</style>
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fastapi websocket 및 vue 3(Composition API)1부: FastAPI virtualenv 만들기(선택 사항) FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오. 생성main.py 파일 및 실행 - 브라우저에서 이 링크 열기http://127.0.0.1:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.