作者:©Iaine 万一
简介:30 Day ChallengeWes Bos 设计的一个 30 天原生js编程挑战。项目免费提供了 30 个视频教程、30 个挑战的起始文档和 30 个挑战解决方案源代码。

本项目为第11天的“自定义视频播放器”项目。Have fun with the website! ♪(^∇^*)

网页效果: https://janice143.github.io/videoPlayer/

项目描述

利用video标签,以及一些div标签,在js中设置视频的播放控件,包括暂停/播放声音调节视频进度调节视频播放率跳过/退后

项目重点

项目过程

html部分

  1. video标签标记视频文件
  2. div标签和button标签实现的一些视频控件,类名为.controlers
    • .progress进度条,.progress_filled进度条填充颜色
    • .player_button播放按钮
    • 声音滑块
    • 播放速度滑块
    • 前进/后退按钮

Js部分

  • 获取标签

  • 编写自定义函数

    • 播放按键

      1
      2
      const method = video.paused ? 'play' : 'pause';
      video[method]();
    • 更新播放键的按键

      1
      2
      const icon = this.paused ? '►' : '❚ ❚';
      toggle.textContent = icon;
    • 前进/后退

      1
      video.currentTime += parseFloat(this.dataset.skip);
    • 更新滑块的值

      1
      video[this.name] = this.value;
    • 更新进度条(填充颜色)

      1
      2
      const percent = (video.currentTime / video.duration) * 100;
      progressBar.style.flexBasis = `${percent}%`;
    • 鼠标移动进度条

      1
      2
      const scrubTime = (e.offsetX / progress.offsetWidth) * video.duration;
      video.currentTime = scrubTime;
  • 添加监听事件

    • 视频的click,play,pause,timeupdata事件
    • 播放按钮、前进后退按钮的click事件
    • 滑块的change,mousemove事件
    • 进度条的click,mousemove,mousedown,mouseup事件

CSS部分

  • flex容器的项目属性

    • flex-basis:项目占据的主轴空间(main size)
    • flex
  • 属性选择器

    • input[type=range]

项目知识点

data-*

自定义数据属性,可通过所属元素的 HTMLElement 接口访问,确切地说是HTMLElement.datasetHTMLElement.dataset["testValue"] 属性访问。

注*:data-后面的命名规则

  • 该名称不能以xml开头,无论这些字母是大写还是小写;
  • 该名称不能包含任何分号;
  • 该名称不能包含A至Z的大写字母
  • data后面的命名中有-,如 data-test-value ,可通过 HTMLElement.dataset.testValue ( 或者是HTMLElement.dataset["testValue"]) 来访问,任何短线符号都会被下个字母的大写替代(驼峰拼写)。

JS30的第11个项目圆满完成啦,感谢阅读,有问题联系我的邮箱1803105538@qq.com.