audio player volume improvements

This commit is contained in:
Lurkars 2021-04-20 21:37:48 +02:00 committed by Thomas Basler
parent a1fd55444a
commit b586ef79ad
3 changed files with 45 additions and 14 deletions

View File

@ -102,9 +102,15 @@
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-volume-up" fill="white" xmlns="http://www.w3.org/2000/svg"> <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-volume-up" fill="white" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M6.717 3.55A.5.5 0 0 1 7 4v8a.5.5 0 0 1-.812.39L3.825 10.5H1.5A.5.5 0 0 1 1 10V6a.5.5 0 0 1 .5-.5h2.325l2.363-1.89a.5.5 0 0 1 .529-.06zM6 5.04L4.312 6.39A.5.5 0 0 1 4 6.5H2v3h2a.5.5 0 0 1 .312.11L6 10.96V5.04z" /> <path fill-rule="evenodd" d="M6.717 3.55A.5.5 0 0 1 7 4v8a.5.5 0 0 1-.812.39L3.825 10.5H1.5A.5.5 0 0 1 1 10V6a.5.5 0 0 1 .5-.5h2.325l2.363-1.89a.5.5 0 0 1 .529-.06zM6 5.04L4.312 6.39A.5.5 0 0 1 4 6.5H2v3h2a.5.5 0 0 1 .312.11L6 10.96V5.04z" />
<g id="audioplayer_volume_icon_playing"> <g id="audioplayer_volume_icon_playing">
<path d="M11.536 14.01A8.473 8.473 0 0 0 14.026 8a8.473 8.473 0 0 0-2.49-6.01l-.708.707A7.476 7.476 0 0 1 13.025 8c0 2.071-.84 3.946-2.197 5.303l.708.707z" /> <g id="audioplayer_volume_icon_playing_high">
<path d="M10.121 12.596A6.48 6.48 0 0 0 12.025 8a6.48 6.48 0 0 0-1.904-4.596l-.707.707A5.483 5.483 0 0 1 11.025 8a5.483 5.483 0 0 1-1.61 3.89l.706.706z" /> <path d="M11.536 14.01A8.473 8.473 0 0 0 14.026 8a8.473 8.473 0 0 0-2.49-6.01l-.708.707A7.476 7.476 0 0 1 13.025 8c0 2.071-.84 3.946-2.197 5.303l.708.707z" />
<path d="M8.707 11.182A4.486 4.486 0 0 0 10.025 8a4.486 4.486 0 0 0-1.318-3.182L8 5.525A3.489 3.489 0 0 1 9.025 8 3.49 3.49 0 0 1 8 10.475l.707.707z" /> </g>
<g id="audioplayer_volume_icon_playing_mid">
<path d="M10.121 12.596A6.48 6.48 0 0 0 12.025 8a6.48 6.48 0 0 0-1.904-4.596l-.707.707A5.483 5.483 0 0 1 11.025 8a5.483 5.483 0 0 1-1.61 3.89l.706.706z" />
</g>
<g id="audioplayer_volume_icon_playing_low">
<path d="M8.707 11.182A4.486 4.486 0 0 0 10.025 8a4.486 4.486 0 0 0-1.318-3.182L8 5.525A3.489 3.489 0 0 1 9.025 8 3.49 3.49 0 0 1 8 10.475l.707.707z" />
</g>
</g> </g>
</svg> </svg>
</button> </button>

View File

@ -11,7 +11,7 @@ enum audioStates {
const audioPlayerDivId = "audioplayer"; const audioPlayerDivId = "audioplayer";
const audioPlayerCtrlId = "audioplayerctrl"; const audioPlayerCtrlId = "audioplayerctrl";
const audioPlayerVolId = "audioplayer_volume"; const audioPlayerVolId = "audioplayer_volume";
const audioPlayerMuteId = "audioplayer_volume_icon_playing"; const audioPlayerVolumeIconId = "audioplayer_volume_icon_playing";
const animationTime = 500; const animationTime = 500;
class AudioManager { class AudioManager {
@ -21,7 +21,7 @@ class AudioManager {
private audioPlayerCtrl: HTMLDivElement; private audioPlayerCtrl: HTMLDivElement;
private audioPlayerElem: HTMLAudioElement | undefined; private audioPlayerElem: HTMLAudioElement | undefined;
private audioPlayerVol: HTMLInputElement; private audioPlayerVol: HTMLInputElement;
private audioPlayerMute: HTMLInputElement; private audioPlayerVolumeIcon: HTMLInputElement;
private volume = 1; private volume = 1;
private muted = false; private muted = false;
@ -32,14 +32,14 @@ class AudioManager {
this.audioPlayerDiv = HtmlUtils.getElementByIdOrFail<HTMLDivElement>(audioPlayerDivId); this.audioPlayerDiv = HtmlUtils.getElementByIdOrFail<HTMLDivElement>(audioPlayerDivId);
this.audioPlayerCtrl = HtmlUtils.getElementByIdOrFail<HTMLDivElement>(audioPlayerCtrlId); this.audioPlayerCtrl = HtmlUtils.getElementByIdOrFail<HTMLDivElement>(audioPlayerCtrlId);
this.audioPlayerVol = HtmlUtils.getElementByIdOrFail<HTMLInputElement>(audioPlayerVolId); this.audioPlayerVol = HtmlUtils.getElementByIdOrFail<HTMLInputElement>(audioPlayerVolId);
this.audioPlayerMute = HtmlUtils.getElementByIdOrFail<HTMLInputElement>(audioPlayerMuteId); this.audioPlayerVolumeIcon = HtmlUtils.getElementByIdOrFail<HTMLInputElement>(audioPlayerVolumeIconId);
this.volume = localUserStore.getAudioPlayerVolume(); this.volume = localUserStore.getAudioPlayerVolume();
this.audioPlayerVol.value = '' + this.volume; this.audioPlayerVol.value = '' + this.volume;
this.muted = localUserStore.getAudioPlayerMuted(); this.muted = localUserStore.getAudioPlayerMuted();
if (this.muted) { if (this.muted) {
this.audioPlayerMute.classList.add('muted'); this.audioPlayerVolumeIcon.classList.add('muted');
} }
} }
@ -93,7 +93,23 @@ class AudioManager {
this.volumeReduced = reduceVolume; this.volumeReduced = reduceVolume;
this.audioPlayerElem.volume = this.volume; this.audioPlayerElem.volume = this.volume;
this.audioPlayerVol.value = '' + this.volume; if (this.muted) {
this.audioPlayerVolumeIcon.classList.add('muted');
this.audioPlayerVol.value = '0';
} else {
this.audioPlayerVol.value = '' + this.volume;
this.audioPlayerVolumeIcon.classList.remove('muted');
if (this.volume < 0.3) {
this.audioPlayerVolumeIcon.classList.add('low');
} else if (this.volume < 0.7) {
this.audioPlayerVolumeIcon.classList.remove('low');
this.audioPlayerVolumeIcon.classList.add('mid');
} else {
this.audioPlayerVolumeIcon.classList.remove('low');
this.audioPlayerVolumeIcon.classList.remove('mid');
}
}
this.audioPlayerElem.muted = this.muted; this.audioPlayerElem.muted = this.muted;
} }
@ -129,16 +145,12 @@ class AudioManager {
this.muted = !this.muted; this.muted = !this.muted;
this.changeVolume(); this.changeVolume();
localUserStore.setAudioPlayerMuted(this.muted); localUserStore.setAudioPlayerMuted(this.muted);
if (this.muted) {
this.audioPlayerMute.classList.add('muted');
} else {
this.audioPlayerMute.classList.remove('muted');
}
} }
this.audioPlayerVol.oninput = (ev: Event)=> { this.audioPlayerVol.oninput = (ev: Event)=> {
this.setVolume(parseFloat((<HTMLInputElement>ev.currentTarget).value)); this.setVolume(parseFloat((<HTMLInputElement>ev.currentTarget).value));
this.muted = false;
localUserStore.setAudioPlayerMuted(this.muted);
this.changeVolume(); this.changeVolume();
(<HTMLInputElement>ev.currentTarget).blur(); (<HTMLInputElement>ev.currentTarget).blur();

View File

@ -464,6 +464,19 @@ body {
visibility: hidden; visibility: hidden;
display: none; display: none;
} }
#audioplayer_volume_icon_playing.low #audioplayer_volume_icon_playing_high {
visibility: hidden;
display: none;
}
#audioplayer_volume_icon_playing.low #audioplayer_volume_icon_playing_mid {
visibility: hidden;
display: none;
}
#audioplayer_volume_icon_playing.mid #audioplayer_volume_icon_playing_high {
visibility: hidden;
display: none;
}
#audioplayerctrl > #audioplayer_volume { #audioplayerctrl > #audioplayer_volume {
width: 100%; width: 100%;
background-color: rgba(0,0,0,0.5); background-color: rgba(0,0,0,0.5);