1
1
<template >
2
2
<div ref =" wrapper" class =" relative ml-4 sm:ml-8" v-click-outside =" clickOutside" >
3
3
<div class =" flex items-center justify-center text-gray-300 cursor-pointer h-full" @mousedown.prevent @mouseup.prevent @click =" setShowMenu(true)" >
4
- <span class =" text-gray-200 text-sm sm:text-base" >{{ playbackRate.toFixed(1) }}<span class =" text-base" >x</span ></span >
4
+ <span class =" text-gray-200 text-sm sm:text-base" >{{ playbackRateDisplay }}<span class =" text-base" >x</span ></span >
5
5
</div >
6
6
<div v-show =" showMenu" class =" absolute -top-[5.5rem] z-20 bg-bg border-black-200 border shadow-xl rounded-lg" :style =" { left: menuLeft + 'px' }" >
7
7
<div class =" absolute -bottom-1.5 right-0 w-full flex justify-center" :style =" { left: arrowLeft + 'px' }" >
19
19
<div class =" w-full py-1 px-1" >
20
20
<div class =" flex items-center justify-between" >
21
21
<ui-icon-btn :disabled =" !canDecrement" icon =" remove" @click =" decrement" />
22
- <p class =" px-2 text-2xl sm:text-3xl" >{{ playbackRate }}<span class =" text-2xl" >x</span ></p >
22
+ <p class =" px-2 text-2xl sm:text-3xl" >{{ playbackRateDisplay }}<span class =" text-2xl" >x</span ></p >
23
23
<ui-icon-btn :disabled =" !canIncrement" icon =" add" @click =" increment" />
24
24
</div >
25
25
</div >
@@ -33,6 +33,10 @@ export default {
33
33
value: {
34
34
type: [String , Number ],
35
35
default: 1
36
+ },
37
+ playbackRateIncrementDecrement: {
38
+ type: Number ,
39
+ default: 0.1
36
40
}
37
41
},
38
42
data () {
@@ -58,10 +62,17 @@ export default {
58
62
return [0.5 , 1 , 1.2 , 1.5 , 2 ]
59
63
},
60
64
canIncrement () {
61
- return this .playbackRate + 0.1 <= this .MAX_SPEED
65
+ return this .playbackRate + this . playbackRateIncrementDecrement <= this .MAX_SPEED
62
66
},
63
67
canDecrement () {
64
- return this .playbackRate - 0.1 >= this .MIN_SPEED
68
+ return this .playbackRate - this .playbackRateIncrementDecrement >= this .MIN_SPEED
69
+ },
70
+ playbackRateDisplay () {
71
+ if (this .playbackRateIncrementDecrement == 0.05 ) return this .playbackRate .toFixed (2 )
72
+ // For 0.1 increment: Only show 2 decimal places if the playback rate is 2 decimals
73
+ const numDecimals = String (this .playbackRate ).split (' .' )[1 ]? .length || 0
74
+ if (numDecimals <= 1 ) return this .playbackRate .toFixed (1 )
75
+ return this .playbackRate .toFixed (2 )
65
76
}
66
77
},
67
78
methods: {
@@ -73,14 +84,14 @@ export default {
73
84
this .$nextTick (() => this .setShowMenu (false ))
74
85
},
75
86
increment () {
76
- if (this .playbackRate + 0.1 > this .MAX_SPEED ) return
77
- var newPlaybackRate = this .playbackRate + 0.1
78
- this .playbackRate = Number (newPlaybackRate .toFixed (1 ))
87
+ if (this .playbackRate + this . playbackRateIncrementDecrement > this .MAX_SPEED ) return
88
+ var newPlaybackRate = this .playbackRate + this . playbackRateIncrementDecrement
89
+ this .playbackRate = Number (newPlaybackRate .toFixed (2 ))
79
90
},
80
91
decrement () {
81
- if (this .playbackRate - 0.1 < this .MIN_SPEED ) return
82
- var newPlaybackRate = this .playbackRate - 0.1
83
- this .playbackRate = Number (newPlaybackRate .toFixed (1 ))
92
+ if (this .playbackRate - this . playbackRateIncrementDecrement < this .MIN_SPEED ) return
93
+ var newPlaybackRate = this .playbackRate - this . playbackRateIncrementDecrement
94
+ this .playbackRate = Number (newPlaybackRate .toFixed (2 ))
84
95
},
85
96
updateMenuPositions () {
86
97
if (! this .$refs .wrapper ) return
0 commit comments