diff --git a/src/components/HeartbeatBar.vue b/src/components/HeartbeatBar.vue index 96a62cf61..429ca9f91 100644 --- a/src/components/HeartbeatBar.vue +++ b/src/components/HeartbeatBar.vue @@ -4,11 +4,17 @@
+ > +
+
this.maxBeat) { - let width = -(this.beatWidth + this.beatMargin * 2); + let width = -(this.beatWidth + this.beatHoverAreaPadding * 2); return { transition: "all ease-in-out 0.25s", @@ -137,12 +143,17 @@ export default { }, + beatHoverAreaStyle() { + return { + padding: this.beatHoverAreaPadding + "px", + "--hover-scale": this.hoverScale, + }; + }, + beatStyle() { return { width: this.beatWidth + "px", height: this.beatHeight + "px", - margin: this.beatMargin + "px", - "--hover-scale": this.hoverScale, }; }, @@ -152,7 +163,7 @@ export default { */ timeStyle() { return { - "margin-left": this.numPadding * (this.beatWidth + this.beatMargin * 2) + "px", + "margin-left": this.numPadding * (this.beatWidth + this.beatHoverAreaPadding * 2) + "px", }; }, @@ -219,20 +230,20 @@ export default { if (this.size !== "big") { this.beatWidth = 5; this.beatHeight = 16; - this.beatMargin = 2; + this.beatHoverAreaPadding = 2; } // Suddenly, have an idea how to handle it universally. // If the pixel * ratio != Integer, then it causes render issue, round it to solve it!! const actualWidth = this.beatWidth * window.devicePixelRatio; - const actualMargin = this.beatMargin * window.devicePixelRatio; + const actualHoverAreaPadding = this.beatHoverAreaPadding * window.devicePixelRatio; if (!Number.isInteger(actualWidth)) { this.beatWidth = Math.round(actualWidth) / window.devicePixelRatio; } - if (!Number.isInteger(actualMargin)) { - this.beatMargin = Math.round(actualMargin) / window.devicePixelRatio; + if (!Number.isInteger(actualHoverAreaPadding)) { + this.beatHoverAreaPadding = Math.round(actualHoverAreaPadding) / window.devicePixelRatio; } window.addEventListener("resize", this.resize); @@ -245,7 +256,7 @@ export default { */ resize() { if (this.$refs.wrap) { - this.maxBeat = Math.floor(this.$refs.wrap.clientWidth / (this.beatWidth + this.beatMargin * 2)); + this.maxBeat = Math.floor(this.$refs.wrap.clientWidth / (this.beatWidth + this.beatHoverAreaPadding * 2)); } }, @@ -273,32 +284,41 @@ export default { } .hp-bar-big { - .beat { + .beat-hover-area { display: inline-block; - background-color: $primary; - border-radius: $border-radius; - - &.empty { - background-color: aliceblue; - } - - &.down { - background-color: $danger; - } - - &.pending { - background-color: $warning; - } - - &.maintenance { - background-color: $maintenance; - } &:not(.empty):hover { transition: all ease-in-out 0.15s; opacity: 0.8; transform: scale(var(--hover-scale)); } + + .beat { + background-color: $primary; + border-radius: $border-radius; + + /* + pointer-events needs to be changed because + tooltip momentarily disappears when crossing between .beat-hover-area and .beat + */ + pointer-events: none; + + &.empty { + background-color: aliceblue; + } + + &.down { + background-color: $danger; + } + + &.pending { + background-color: $warning; + } + + &.maintenance { + background-color: $maintenance; + } + } } }