【问题标题】:Volume slide = 0 if clicked on 'mute'如果单击“静音”,则音量滑动 = 0
【发布时间】:2020-09-06 03:13:12
【问题描述】:

好吧,标题说明了一切。

当您将音量滑动到 0 时,我设法连接它,它已静音,但现在我遇到了这样的问题:如果静音,音量滑块应为 0。

我尝试了一些代码组合,但似乎无法理解它。

html:

     <div class="controls">
              <span class="columns small-8 medium-6 text-left">
                <span *ngIf="!playing" class="playpause" (click)="videoHandler('play')">
                  <i class="fa fa-play" aria-hidden="true" ></i>
                </span>
                <span *ngIf="playing" class="playpause" (click)="videoHandler('pause')">
                  <i class="fa fa-pause" aria-hidden="true" ></i>
                </span>
                <span *ngIf="!muted" class="speaker" (click)="videoHandler('mute')">
                  <i class="fa fa-volume-up" aria-hidden="true" ></i>
                </span>
                <span *ngIf="muted" class="speaker" (click)="videoHandler('unmute')">
                  <i class="fa fa-volume-off" aria-hidden="true" ></i>
                </span>
                <span class="volumeslider">
                  <input type="range" name="volume" min="0" max="1" step="0.05" value="1" (input)="videoHandler('volume', $event)">
                </span>
              </span>
            </div>

打字稿:

public videoHandler(fn: any, e: any): void {
    let element = this.videoplayer.nativeElement;

    switch (fn) {
        case 'play':
            element.play();
            this.playing = true;
            break;
        case 'pause':
            element.pause();
            this.playing = false;
            break;
        case 'fullscreen':
            if (element.requestFullscreen) {
                element.requestFullscreen();
            } else if (element.mozRequestFullScreen) {
                element.mozRequestFullScreen();
            } else if (element.webkitRequestFullscreen) {
                element.webkitRequestFullscreen();
            }
            break;
        case 'mute':
            element.muted = true;
            this.muted = true;
            break;
        case 'unmute':
            element.muted = false;
            element.removeAttribute('muted');
            this.muted = false;
            break;
        case 'volume':
            element.volume = e.target.value;
            this.muted = e.target.value === '0';
            element.muted = e.target.value === '0';
            break;
        case 'download':
            let src = e.target.dataset.vsr;
            let id = e.target.dataset.vid;
            this.downloadEmitter.emit({
                video: src,
                video_id: id
            });
        default:
            break;
    }
}

当然这很简单,但是看了几天并没有让我有新的想法。

【问题讨论】:

  • 看起来你的代码想要有七个独立的函数而不是一个,但你正在合并它们,这样你就不需要重复第一行。您希望在静音功能中使用 const volume = document.querySelector('[name="volume"]'); volume.setAttribute("--unmute", volume.value); volume.value = 0;,在取消静音功能中使用 const volume = document.querySelector('[name="volume"]'); const unmuteValue = volume.getAttribute("--unmute"); volume.value = unmuteValue ? unmuteValue : 0;。或者类似的东西。
  • @Charles Bamford 感谢您的重播!我尝试了您的想法并尝试对其进行调整,但这不起作用,似乎它不会接受音量为 0 的值:/

标签: javascript angular typescript


【解决方案1】:

如果你需要这个,答案很简单,我会把代码贴在这里:

 <div class="controls">
          <span class="columns small-8 medium-6 text-left">
            <span *ngIf="!playing" class="playpause" (click)="videoHandler('play')">
              <i class="fa fa-play" aria-hidden="true" ></i>
            </span>
            <span *ngIf="playing" class="playpause" (click)="videoHandler('pause')">
              <i class="fa fa-pause" aria-hidden="true" ></i>
            </span>
            <span *ngIf="!muted" class="speaker" (click)="videoHandler('mute'); slider.value = 0" >
              <i class="fa fa-volume-up" aria-hidden="true" ></i>
            </span>
            <span *ngIf="muted" class="speaker" (click)="videoHandler('unmute'); slider.value = 1">
              <i class="fa fa-volume-off" aria-hidden="true" ></i>
            </span>
            <span class="volumeslider">
              <input type="range" name="volume" min="0" max="1" step="0.05" value="1" (input)="videoHandler('volume', $event); slider.value = $event.target.value" class="volumeslide" #slider>
            </span>
          </span>
   </div>

所以我错过了将slider.value = number 添加到静音或取消静音。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多