LouisLam
4 years ago
4 changed files with 115 additions and 75 deletions
@ -0,0 +1,110 @@ |
|||
<template> |
|||
<div class="wrap" :style="wrapStyle"> |
|||
<div class="hp-bar-big" :style="barStyle"> |
|||
<div class="beat" :style="beatStyle" v-for="beat in beatList"></div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
|
|||
|
|||
export default { |
|||
data() { |
|||
return { |
|||
beatList: [ |
|||
1,2,3,4,5 |
|||
], |
|||
beatWidth: 10, |
|||
beatHeight: 30, |
|||
hoverScale: 1.5, |
|||
beatMargin: 4, |
|||
move: false, |
|||
maxBeat: 5, |
|||
} |
|||
}, |
|||
mounted() { |
|||
setInterval(() => { |
|||
|
|||
this.addBeat() |
|||
console.log("add beat") |
|||
}, 3000) |
|||
|
|||
}, |
|||
methods: { |
|||
async addBeat() { |
|||
this.move = true; |
|||
|
|||
setTimeout(() => { |
|||
this.beatList.push(6) |
|||
|
|||
if (this.beatList.length > this.maxBeat) { |
|||
this.beatList.shift(); |
|||
this.move = false; |
|||
} |
|||
}, 300) |
|||
|
|||
} |
|||
}, |
|||
computed: { |
|||
wrapStyle() { |
|||
let topBottom = (((this.beatHeight * this.hoverScale) - this.beatHeight) / 2); |
|||
let leftRight = (((this.beatWidth * this.hoverScale) - this.beatWidth) / 2); |
|||
|
|||
return { |
|||
padding: `${topBottom}px ${leftRight}px`, |
|||
width: (this.beatWidth + this.beatMargin * 2) * this.maxBeat + (leftRight * 2) + "px" |
|||
} |
|||
}, |
|||
barStyle() { |
|||
if (this.move) { |
|||
let width = -(this.beatWidth + this.beatMargin * 2); |
|||
|
|||
return { |
|||
transition: "all ease-in-out 0.25s", |
|||
transform: `translateX(${width}px)`, |
|||
} |
|||
} else { |
|||
return { |
|||
|
|||
} |
|||
} |
|||
}, |
|||
beatStyle() { |
|||
return { |
|||
width: this.beatWidth + "px", |
|||
height: this.beatHeight + "px", |
|||
margin: this.beatMargin + "px", |
|||
"--hover-scale": this.hoverScale, |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style scoped lang="scss"> |
|||
@import "../assets/vars.scss"; |
|||
|
|||
.wrap { |
|||
overflow: hidden; |
|||
width: 100px; |
|||
|
|||
white-space: nowrap; |
|||
} |
|||
|
|||
.hp-bar-big { |
|||
.beat { |
|||
display: inline-block; |
|||
background-color: $primary; |
|||
border-radius: 50rem; |
|||
transition: all ease-in-out 0.15s; |
|||
|
|||
|
|||
&:hover { |
|||
opacity: 0.8; |
|||
transform: scale(var(--hover-scale)); |
|||
} |
|||
} |
|||
} |
|||
|
|||
</style> |
Loading…
Reference in new issue