【问题标题】:HTML5 Video pause instead of stopHTML5 视频暂停而不是停止
【发布时间】:2019-01-09 22:56:54
【问题描述】:

我正在尝试从该线程 How to make custom video player applicable to multiple videos? 修改脚本

Javascript:

/* Get Our Elements */
  const player = document.querySelector('.player');
  const video = player.querySelector('.viewer');
  const progress = player.querySelector('.progress');
  const progressBar = player.querySelector('.progress__filled');
  const toggle = player.querySelector('.toggle');
  const skipButtons = player.querySelectorAll('[data-skip]');
  const ranges = player.querySelectorAll('.player__slider');

  /* Build out functions */
  function togglePlay() {
    const method = video.paused ? 'play' : 'pause';
    video[method]();
  }

  function updateButton() {
    const icon = this.paused ? '►' : '❚❚';
    toggle.textContent = icon;
  }

  function skip() {
    video.currentTime += parseFloat(this.dataset.skip);
  }

  function handleRangeUpdate() {
    video[this.name] = this.value;
  }

  function handleProgress() {
    const percent = (video.currentTime / video.duration) * 100;
    progressBar.style.flexBasis = `${percent}%`;
  }

  function scrub(e) {
    const scrubTime = (e.offsetX / progress.offsetWidth) * video.duration;
    video.currentTime = scrubTime;
  }

  /* Hook up the event listners */
  video.addEventListener('click', togglePlay);
  video.addEventListener('play', updateButton);
  video.addEventListener('pause', updateButton);
  video.addEventListener('timeupdate', handleProgress);

  toggle.addEventListener('click', togglePlay);
  skipButtons.forEach(button => button.addEventListener('click', skip));
  ranges.forEach(range => range.addEventListener('change', handleRangeUpdate));
  ranges.forEach(range => range.addEventListener('mousemove', handleRangeUpdate));

  let mousedown = false;
  progress.addEventListener('click', scrub);
  progress.addEventListener('mousemove', (e) => mousedown && scrub(e));
  progress.addEventListener('mousedown', () => mousedown = true);
  progress.addEventListener('mouseup', () => mousedown = false);


  $('video').on('ended', function() {
    $.fn.fullpage.moveSlideRight();
  });

https://jsfiddle.net/maxse/xx7j91ou/3/

我只是想让暂停按钮成为真正的暂停按钮,因为它实际上就像一个停止按钮,当你点击它时,将进度条设置为 0。我想真正暂停视频。

做起来可能很简单,但我不知道。谢谢各位!

【问题讨论】:

    标签: html video pause


    【解决方案1】:

    有一个简单的解决方法:

    以下函数会在点击按钮时重置视频的currentTime,只要去掉它,问题就解决了。

     //Delete this function
     function scrub(e) {
          const scrubTime = (e.offsetX / progress.offsetWidth) * video.duration;
          video.currentTime = scrubTime;
        }
    

    https://jsfiddle.net/kq5hdw0m/8/

    工作示例

    【讨论】:

    • 谢谢!但我想这并不容易,因为如果我摆脱它,其他功能(如通过进度条导航)将不起作用:(
    • 好吧,让我来解决这个问题
    • 可能你误会了我的意思,我的意思是当你点击进度条跳过它并在视频中前进或后退时
    • 我正在查看它,尝试了不同功能的不同东西,但如果我改变一件事,其他东西就会坏掉,抱歉,我目前无法提供正确的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多