Hướng dẫn custom video controls html - điều khiển video tùy chỉnh html


Phần tử HTML

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7 được sử dụng để hiển thị video trên trang web.

Show


Phần tử HTML

Để hiển thị video trong HTML, hãy sử dụng phần tử

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7:

Thí dụ

& nbsp; & nbsp; Trình duyệt của bạn không hỗ trợ thẻ video.
 
 
Your browser does not support the video tag.

Hãy tự mình thử »


Làm thế nào nó hoạt động

Thuộc tính

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
9 thêm các điều khiển video, như chơi, tạm dừng và âm lượng.

Đó là một ý tưởng tốt để luôn bao gồm các thuộc tính

. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
0 và
. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
1. Nếu chiều cao và chiều rộng không được đặt, trang có thể nhấp nháy trong khi video tải.

Phần tử

. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
2 cho phép bạn chỉ định các tệp video thay thế mà trình duyệt có thể chọn. Trình duyệt sẽ sử dụng định dạng được công nhận đầu tiên.

Văn bản giữa các thẻ

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7 và
. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
4 sẽ chỉ được hiển thị trong các trình duyệt không hỗ trợ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.


HTML Autoplay

Để tự động bắt đầu video, hãy sử dụng thuộc tính

. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
6:

Thí dụ

& nbsp; & nbsp; Trình duyệt của bạn không hỗ trợ thẻ video.
 
 
Your browser does not support the video tag.

Hãy tự mình thử »

Làm thế nào nó hoạt động Chromium browsers do not allow autoplay in most cases. However, muted autoplay is always allowed.

Thuộc tính

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
9 thêm các điều khiển video, như chơi, tạm dừng và âm lượng.

Thí dụ

& nbsp; & nbsp; Trình duyệt của bạn không hỗ trợ thẻ video.
 
 
Your browser does not support the video tag.

Hãy tự mình thử »


Làm thế nào nó hoạt động

Thuộc tính

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
9 thêm các điều khiển video, như chơi, tạm dừng và âm lượng.

Đó là một ý tưởng tốt để luôn bao gồm các thuộc tính
. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
0 và
. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
1. Nếu chiều cao và chiều rộng không được đặt, trang có thể nhấp nháy trong khi video tải.
Phần tử
. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
2 cho phép bạn chỉ định các tệp video thay thế mà trình duyệt có thể chọn. Trình duyệt sẽ sử dụng định dạng được công nhận đầu tiên.
4.0 9.0 3.5 4.0 10.5


Văn bản giữa các thẻ // Add eventlisteners here playButton.addEventListener('click', togglePlay);7 và . . . . . .4 sẽ chỉ được hiển thị trong các trình duyệt không hỗ trợ phần tử // Add eventlisteners here playButton.addEventListener('click', togglePlay);7.

HTML Autoplay

Để tự động bắt đầu video, hãy sử dụng thuộc tính
. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
6:
MP4Lưu ý: Trình duyệt crom không cho phép tự động phát trong hầu hết các trường hợp. Tuy nhiên, autoplay bị tắt tiếng luôn được phép.Thêm
. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
7 sau
. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
8 để cho video của bạn bắt đầu phát tự động (nhưng bị tắt tiếng):
Hỗ trợ trình duyệtCác số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.
Các số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.
Các số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.
Yếu tốCác số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.
Các số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.
Các số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.
Yếu tốCác số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.
Các số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.
Các số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.
Yếu tốCác số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.
Các số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.
Yếu tố
Opera Các số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.
Các số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.
Các số trong bảng chỉ định phiên bản trình duyệt đầu tiên hỗ trợ đầy đủ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.

Yếu tố

File FormatĐịnh dạng video HTML
Có ba định dạng video được hỗ trợ: MP4, WebM và OGG. Hỗ trợ trình duyệt cho các định dạng khác nhau là:Trình duyệt
WebmOGG
Bờ rìaVÂNG

Trình duyệt Chrome

Firefox

Cuộc đi săn

KHÔNG

Opera


Video HTML - Các loại phương tiện

Định dạng tệpLoại phương tiện truyền thông
Phần tử
. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
2 cho phép bạn chỉ định các tệp video thay thế mà trình duyệt có thể chọn. Trình duyệt sẽ sử dụng định dạng được công nhận đầu tiên.
Văn bản giữa các thẻ
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7 và
. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
4 sẽ chỉ được hiển thị trong các trình duyệt không hỗ trợ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.
Phần tử
. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
2 cho phép bạn chỉ định các tệp video thay thế mà trình duyệt có thể chọn. Trình duyệt sẽ sử dụng định dạng được công nhận đầu tiên.
Văn bản giữa các thẻ
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7 và
. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
4 sẽ chỉ được hiển thị trong các trình duyệt không hỗ trợ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.
Phần tử
. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
2 cho phép bạn chỉ định các tệp video thay thế mà trình duyệt có thể chọn. Trình duyệt sẽ sử dụng định dạng được công nhận đầu tiên.
Văn bản giữa các thẻ
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7 và
. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .
4 sẽ chỉ được hiển thị trong các trình duyệt không hỗ trợ phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7.


  • 1 Xây dựng ứng dụng JavaScript đầu tiên của bạn - Trình tạo báo giá ngẫu nhiên Build your first JavaScript App — A Random Quote Generator
  • 2 Cách xây dựng ứng dụng tìm kiếm Wikipedia với JavaScript How to build a Wikipedia Search App with JavaScript
  • 3 Cách xây dựng ứng dụng máy tính với JavaScript How to build a Calculator App with JavaScript
  • 4 Cách xây dựng ứng dụng danh sách việc cần làm với JavaScript How to build a Todo List App with JavaScript
  • 5 Cách xây dựng trình phát video HTML5 tùy chỉnh với JavaScript How to build a Custom HTML5 Video Player with JavaScript
  • 6 Cách xây dựng một trò chơi Simon với JavaScript How to build a Simon Game with JavaScript
  • 7 Cách xây dựng ứng dụng hẹn giờ Pomodoro với JavaScript How to build a Pomodoro Timer App with JavaScript
  • 8 Cách tạo tiện ích mở rộng Chrome đầu tiên của bạn How to create your first Chrome extension

Xem và chia sẻ nội dung video là một trong những cách sử dụng phổ biến nhất của web và cách video được nhúng trên trang web đã phát triển trong nhiều năm qua. Ngày nay, việc thêm các tệp video vào trang web có thể đạt được bằng cách sử dụng phần tử

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7 hoạt động trong tất cả các trình duyệt hiện đại và hỗ trợ nhiều định dạng video khác nhau.

Hướng dẫn custom video controls html - điều khiển video tùy chỉnh html

Hỗ trợ video HTML5. Xem Caniuse.com để biết bảng cập nhật.

Triển lãm chính khi sử dụng

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7 là trình phát video được hiển thị sẽ thay đổi tùy thuộc vào trình duyệt không lý tưởng nếu bạn muốn cung cấp trải nghiệm người dùng nhất quán. Đây là lý do tại sao rất hữu ích khi xây dựng giao diện của riêng bạn có các điều khiển tùy chỉnh thay vì sử dụng mặc định trình duyệt.

Trong hướng dẫn này, tôi sẽ đưa bạn qua việc xây dựng một trình phát video tùy chỉnh với JavaScript. Mục đích được mô tả cách tận dụng API phương tiện HTML5 trong trình duyệt để xây dựng trải nghiệm cải thiện trên các mặc định.

Người chơi mà chúng tôi sẽ xây dựng trong hướng dẫn này sẽ trông rất giống người được tìm thấy trên YouTube bởi vì tôi nghĩ rằng đó là một ý tưởng tốt để sao chép một số chức năng trong điều gì đó mà hầu hết mọi người đã quen thuộc.

Chúng tôi đã giành chiến thắng khi thực hiện tất cả các tính năng được tìm thấy trong trình phát YouTube vì điều đó sẽ tạo ra một hướng dẫn dài hơn, phức tạp hơn. Tuy nhiên, một khi bạn đã hoàn thành hướng dẫn này, tôi sẽ tự tin rằng bạn sẽ có thể dễ dàng cắm vào bất kỳ chức năng mới nào.

Bạn có thể xem bản demo trực tiếp về những gì chúng tôi sẽ xây dựng hoặc xem mã nguồn trên GitHub.

Điều kiện tiên quyết

Bạn cần có một sự hiểu biết cơ bản về JavaScript và DOM để có thể tiến lên phía trước với hướng dẫn này. Tôi cũng khuyên bạn nên sử dụng phiên bản Chrome mới nhất vì một số tính năng mà chúng tôi sẽ thêm (chẳng hạn như hình ảnh trong ảnh) chỉ hoạt động trong Chrome tại thời điểm viết.

Bắt đầu

Tôi đã chuẩn bị các tập tin khởi động cho hướng dẫn này trên GitHub. Bạn cần sao chép nó vào máy của mình và mở thư mục dự án trong trình soạn thảo văn bản của bạn. Bạn sẽ tìm thấy đánh dấu và kiểu cho trình phát trong các tệp

const playbackIcons = document.querySelectorAll('.playback-icons use');
3 và
const playbackIcons = document.querySelectorAll('.playback-icons use');
4 tương ứng, cũng như tệp video mà chúng tôi sẽ kiểm tra trình phát. Tệp
const playbackIcons = document.querySelectorAll('.playback-icons use');
5 đi kèm là nơi chúng tôi sẽ thêm tất cả các mã cần thiết cho người chơi hoạt động.

Chạy

const playbackIcons = document.querySelectorAll('.playback-icons use');
6 trong thiết bị đầu cuối để cài đặt trình duyệt Sync như một sự phụ thuộc phát triển để khởi động máy chủ web và tự động làm mới trang khi bất kỳ tệp nào thay đổi, tiếp theo là
const playbackIcons = document.querySelectorAll('.playback-icons use');
7 để mở dự án trong trình duyệt của bạn trên http: // localhost: 3000 .

Những gì đã được thực hiện cho đến nay

Hiện tại, trình phát video giữ lại các điều khiển trình duyệt gốc hoạt động giống như bạn mong đợi. Đánh dấu cho các điều khiển tùy chỉnh đã được xác định trong phần tử

const playbackIcons = document.querySelectorAll('.playback-icons use');
8 nhưng chúng được ẩn theo mặc định.

index.html

. . .
<div class="video-controls hidden" id="video-controls">

div>
. . .

Mặc dù chúng tôi sẽ triển khai giao diện tùy chỉnh cho các điều khiển, nhưng bạn có ý tưởng giữ lại thuộc tính

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
9 trên phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7 để người dùng đã tắt JavaScript vì bất kỳ lý do gì vẫn sẽ có quyền truy cập vào các điều khiển video gốc của trình duyệt. Đối với những người khác, các điều khiển gốc có thể được ẩn dễ dàng và thay thế bằng các điều khiển tùy chỉnh như sẽ được chứng minh trong thời gian ngắn.

Một hình ảnh áp phích cũng đã được thêm vào video và thuộc tính

// updatePlayButton updates the playback icon and tooltip
// depending on the playback state
function updatePlayButton() {
  playbackIcons.forEach(icon => icon.classList.toggle('hidden'));
}
1 được đặt thành
// updatePlayButton updates the playback icon and tooltip
// depending on the playback state
function updatePlayButton() {
  playbackIcons.forEach(icon => icon.classList.toggle('hidden'));
}
2 hướng dẫn trình duyệt chỉ tìm nạp siêu dữ liệu video (như thời lượng). Để giữ cho mọi thứ đơn giản, chỉ có một tệp nguồn trong MP4 đã được đưa vào cho video ở định dạng MP4 vì nó được hỗ trợ bởi tất cả các trình duyệt chính và là một mặc định khá an toàn. Xem tài liệu này để biết thêm thông tin về các định dạng video và khả năng tương thích trình duyệt.

index.html

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .

Ẩn các điều khiển gốc

Điều đầu tiên chúng ta cần làm là ẩn các điều khiển video mặc định và cung cấp giao diện của riêng chúng tôi một khi xác định rằng trình duyệt hỗ trợ video HTML5. Nhập đoạn mã sau vào tệp

const playbackIcons = document.querySelectorAll('.playback-icons use');
5 của bạn để thực hiện điều đó:

index.js

// Select elements here
const video = document.getElementById('video');
const videoControls = document.getElementById('video-controls');

const videoWorks = !!document.createElement('video').canPlayType;
if (videoWorks) {
  video.controls = false;
  videoControls.classList.remove('hidden');
}

Thuộc tính

// updatePlayButton updates the playback icon and tooltip
// depending on the playback state
function updatePlayButton() {
  playbackIcons.forEach(icon => icon.classList.toggle('hidden'));
}
4 là cách chúng tôi có thể phát hiện hỗ trợ cho định dạng video trong trình duyệt. Để sử dụng nó, chúng ta cần tạo một thể hiện của phần tử
// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
7 và kiểm tra xem nó có hỗ trợ phương thức
// updatePlayButton updates the playback icon and tooltip
// depending on the playback state
function updatePlayButton() {
  playbackIcons.forEach(icon => icon.classList.toggle('hidden'));
}
4 không. Nếu có, thật an toàn khi cho rằng video HTML5 được hỗ trợ để các điều khiển mặc định bị vô hiệu hóa nhanh chóng có lợi cho các điều khiển tùy chỉnh của chúng tôi.

Hướng dẫn custom video controls html - điều khiển video tùy chỉnh html

Các điều khiển gốc đã được thay thế bằng các điều khiển tùy chỉnh

Chuyển đổi trạng thái phát lại

Hãy bắt đầu với những điều cơ bản. Bạn sẽ có thể phát và tạm dừng video bằng cách nhấp vào nút phát và biểu tượng sẽ thay đổi để phù hợp với trạng thái của video. Chúng tôi sẽ bắt đầu bằng cách chọn video và nút phát ở đầu

const playbackIcons = document.querySelectorAll('.playback-icons use');
5 như sau:

index.js

const playButton = document.getElementById('play');

Sau đó, chúng tôi sẽ tạo một chức năng chuyển đổi trạng thái phát lại của video:

index.js

// Add functions here

// togglePlay toggles the playback state of the video.
// If the video playback is paused or ended, the video is played
// otherwise, the video is paused
function togglePlay() {
  if (video.paused || video.ended) {
    video.play();
  } else {
    video.pause();
  }
}

Cuối cùng, hãy tạo một trình nghe sự kiện thực thi chức năng

// updatePlayButton updates the playback icon and tooltip
// depending on the playback state
function updatePlayButton() {
  playbackIcons.forEach(icon => icon.classList.toggle('hidden'));
}
8 khi nhấp vào
// updatePlayButton updates the playback icon and tooltip
// depending on the playback state
function updatePlayButton() {
  playbackIcons.forEach(icon => icon.classList.toggle('hidden'));
}
9:

index.js

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);

Đủ dễ dàng phải không? Kiểm tra nó bằng cách nhấp vào nút phát trong trình duyệt của bạn. Nó nên chơi và tạm dừng video một cách thích hợp.

Xin lỗi, trình duyệt của bạn không hỗ trợ video HTML5, nhưng đừng lo lắng, bạn có thể tải xuống và xem nó với trình phát video yêu thích của bạn!

GIF

Điều này thực sự thiết lập giai điệu cho phần còn lại của hướng dẫn. Chúng tôi thường chọn một trong các điều khiển video, tạo một chức năng thực hiện một chức năng cụ thể, sau đó kết nối nó thông qua trình nghe sự kiện.

Hãy cùng di chuyển để cập nhật biểu tượng phát tùy thuộc vào trạng thái của video. Đây là HTML cho

// updatePlayButton updates the playback icon and tooltip
// depending on the playback state
function updatePlayButton() {
  playbackIcons.forEach(icon => icon.classList.toggle('hidden'));
}
9:

index.html

. . .
<button data-title="Play (k)" id="play">
  <svg class="playback-icons">
    <use href="#play-icon">use>
    <use class="hidden" href="#pause">use>
  svg>
button>
. . .

Chúng tôi có cả biểu tượng chơi và tạm dừng trong phần tử

video.addEventListener('play', updatePlayButton);
video.addEventListener('pause', updatePlayButton);
1, nhưng chỉ có một biểu tượng bị phân tán tại thời điểm trong khi cái kia bị ẩn. Những gì chúng ta cần làm bây giờ là chuyển lớp ẩn trên mỗi biểu tượng để biểu tượng thích hợp được hiển thị tùy thuộc vào trạng thái của video.

Đầu tiên, chọn các biểu tượng ở đầu

const playbackIcons = document.querySelectorAll('.playback-icons use');
5:

index.js

const playbackIcons = document.querySelectorAll('.playback-icons use');

Tiếp theo, hãy tạo chức năng để cập nhật nút phát theo

// updatePlayButton updates the playback icon and tooltip
// depending on the playback state
function updatePlayButton() {
  playbackIcons.forEach(icon => icon.classList.toggle('hidden'));
}
8:

index.js

// updatePlayButton updates the playback icon and tooltip
// depending on the playback state
function updatePlayButton() {
  playbackIcons.forEach(icon => icon.classList.toggle('hidden'));
}

Và cuối cùng, thêm những người nghe sự kiện sau ở phía dưới:

index.js

video.addEventListener('play', updatePlayButton);
video.addEventListener('pause', updatePlayButton);

Khi video được phát hoặc tạm dừng, chức năng

video.addEventListener('play', updatePlayButton);
video.addEventListener('pause', updatePlayButton);
4 được thực thi giúp bật lớp
video.addEventListener('play', updatePlayButton);
video.addEventListener('pause', updatePlayButton);
5 trên mỗi nút. Vì chúng tôi có lớp
video.addEventListener('play', updatePlayButton);
video.addEventListener('pause', updatePlayButton);
5 trên biểu tượng tạm dừng theo mặc định, một khi video được phát, biểu tượng này sẽ được hiển thị và biểu tượng phát sẽ được ẩn. Nếu video bị tạm dừng lại, điều ngược lại xảy ra. Bạn có thể kiểm tra điều này trong trình duyệt của bạn.

Một điều cần làm là cập nhật văn bản trong công cụ xuất hiện khi bạn di chuột qua nút phát. Nó đọc

video.addEventListener('play', updatePlayButton);
video.addEventListener('pause', updatePlayButton);
7 theo mặc định, nhưng chúng ta cần cập nhật nó để nó đọc
video.addEventListener('play', updatePlayButton);
video.addEventListener('pause', updatePlayButton);
8 khi video đang phát.
video.addEventListener('play', updatePlayButton);
video.addEventListener('pause', updatePlayButton);
9 là phím tắt mà chúng tôi sẽ thêm để phát hoặc tạm dừng video sau trong hướng dẫn.

Cập nhật

video.addEventListener('play', updatePlayButton);
video.addEventListener('pause', updatePlayButton);
4 như được hiển thị bên dưới:

index.js

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
0

Điều đó sẽ đặt văn bản thích hợp trong chú giải công cụ khi bạn di chuột trên nút khi video đang phát hoặc tạm dừng.

Nếu bạn đang tự hỏi làm thế nào công cụ được hiển thị, thì đây là CSS có liên quan:

style.css

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
1

Xin lỗi, trình duyệt của bạn không hỗ trợ video HTML5, nhưng đừng lo lắng, bạn có thể tải xuống và xem nó với trình phát video yêu thích của bạn!

GIF

Hiển thị thời lượng video và thời gian trôi qua

Nó cần thiết để hiển thị độ dài của một video vì đó là một trong những điều đầu tiên mà người dùng muốn thấy, vì vậy chúng tôi sẽ làm điều đó tiếp theo.

Đây là đánh dấu trong thời gian và thời gian trôi qua:

index.html

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
2

Chọn cả hai điều khiển trong tệp

const playbackIcons = document.querySelectorAll('.playback-icons use');
5 của bạn như sau:

index.js

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
3

Chúng tôi sẽ hiển thị tổng thời lượng của video khi trang tải bằng cách sử dụng thuộc tính video ____ ____102. Thuộc tính này biểu thị số giây của video vì vậy chúng tôi cần chuyển đổi số này thành phút và giây trước khi chúng tôi có thể hiển thị nó. Tạo hàm

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
03 mất thời gian tính bằng giây và chuyển đổi nó thành phút và giây:

index.js

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
4

Tiếp theo, tạo chức năng

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
04 bên dưới
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
03:

index.js

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
5

Như được hiển thị ở trên, thời lượng video của Video tính bằng giây được làm tròn đến số nguyên gần nhất, được định dạng thành phút và giây và được cập nhật trên màn hình. Thuộc tính

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
06 cũng được cập nhật lên chuỗi thời gian đại diện cho thời lượng của video.

Tiếp theo, hãy để Lát kết nối chức năng

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
04 với sự kiện video ____ ____108 như được hiển thị bên dưới. Điều này sẽ khiến thời lượng video được cập nhật khi siêu dữ liệu của video đã được tải.

index.js

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
6

Hướng dẫn custom video controls html - điều khiển video tùy chỉnh html

Sau đó, hãy để cập nhật thời gian trôi qua khi video được phát. Ở đây, chức năng giúp chúng tôi đạt được những gì chúng tôi muốn:

index.js

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
7

Sự kiện chúng ta cần nghe trên video là sự kiện

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
09. Sự kiện này được bắn bất cứ khi nào thời gian phát lại được chỉ định bởi tài sản video ____ ____ ____110 được cập nhật.

index.js

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
8

Mã trên đảm bảo rằng một khi video

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
10 được cập nhật nhờ phát video, thời gian trôi qua cũng được cập nhật một cách thích hợp.

Xin lỗi, trình duyệt của bạn không hỗ trợ video HTML5, nhưng đừng lo lắng, bạn có thể tải xuống và xem nó với trình phát video yêu thích của bạn!

GIF

Hiển thị thời lượng video và thời gian trôi qua

Nó cần thiết để hiển thị độ dài của một video vì đó là một trong những điều đầu tiên mà người dùng muốn thấy, vì vậy chúng tôi sẽ làm điều đó tiếp theo.

index.html

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
9

Đây là đánh dấu trong thời gian và thời gian trôi qua:

Chọn cả hai điều khiển trong tệp

const playbackIcons = document.querySelectorAll('.playback-icons use');
5 của bạn như sau:

Chúng tôi sẽ hiển thị tổng thời lượng của video khi trang tải bằng cách sử dụng thuộc tính video ____ ____102. Thuộc tính này biểu thị số giây của video vì vậy chúng tôi cần chuyển đổi số này thành phút và giây trước khi chúng tôi có thể hiển thị nó. Tạo hàm

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
03 mất thời gian tính bằng giây và chuyển đổi nó thành phút và giây:

Tiếp theo, tạo chức năng
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
04 bên dưới
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
03:

// Select elements here
const video = document.getElementById('video');
const videoControls = document.getElementById('video-controls');

const videoWorks = !!document.createElement('video').canPlayType;
if (videoWorks) {
  video.controls = false;
  videoControls.classList.remove('hidden');
}
0

Như được hiển thị ở trên, thời lượng video của Video tính bằng giây được làm tròn đến số nguyên gần nhất, được định dạng thành phút và giây và được cập nhật trên màn hình. Thuộc tính

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
06 cũng được cập nhật lên chuỗi thời gian đại diện cho thời lượng của video.

index.js

// Select elements here
const video = document.getElementById('video');
const videoControls = document.getElementById('video-controls');

const videoWorks = !!document.createElement('video').canPlayType;
if (videoWorks) {
  video.controls = false;
  videoControls.classList.remove('hidden');
}
1

Tiếp theo, hãy để Lát kết nối chức năng

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
04 với sự kiện video ____ ____108 như được hiển thị bên dưới. Điều này sẽ khiến thời lượng video được cập nhật khi siêu dữ liệu của video đã được tải.

Sau đó, hãy để cập nhật thời gian trôi qua khi video được phát. Ở đây, chức năng giúp chúng tôi đạt được những gì chúng tôi muốn:

index.js

// Select elements here
const video = document.getElementById('video');
const videoControls = document.getElementById('video-controls');

const videoWorks = !!document.createElement('video').canPlayType;
if (videoWorks) {
  video.controls = false;
  videoControls.classList.remove('hidden');
}
2

Sự kiện chúng ta cần nghe trên video là sự kiện

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
09. Sự kiện này được bắn bất cứ khi nào thời gian phát lại được chỉ định bởi tài sản video ____ ____ ____110 được cập nhật.

index.js

// Select elements here
const video = document.getElementById('video');
const videoControls = document.getElementById('video-controls');

const videoWorks = !!document.createElement('video').canPlayType;
if (videoWorks) {
  video.controls = false;
  videoControls.classList.remove('hidden');
}
3

Mã trên đảm bảo rằng một khi video

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
10 được cập nhật nhờ phát video, thời gian trôi qua cũng được cập nhật một cách thích hợp.

Xin lỗi, trình duyệt của bạn không hỗ trợ video HTML5, nhưng đừng lo lắng, bạn có thể tải xuống và xem nó với trình phát video yêu thích của bạn!

GIF

Tiến về phía trước

Hầu hết các trình phát video cho phép bạn nhấp vào thanh tiến trình để nhảy đến một điểm cụ thể trong video và chúng tôi sẽ không khác. Đầu tiên, chúng ta cần chọn phần tử công cụ:

index.js

// Select elements here
const video = document.getElementById('video');
const videoControls = document.getElementById('video-controls');

const videoWorks = !!document.createElement('video').canPlayType;
if (videoWorks) {
  video.controls = false;
  videoControls.classList.remove('hidden');
}
4

Sau đó thêm một chức năng để hiển thị dấu thời gian trong phần tử Tooltip khi con trỏ qua thanh tiến trình:

index.js

// Select elements here
const video = document.getElementById('video');
const videoControls = document.getElementById('video-controls');

const videoWorks = !!document.createElement('video').canPlayType;
if (videoWorks) {
  video.controls = false;
  videoControls.classList.remove('hidden');
}
5

Hàm này sử dụng vị trí của con trỏ trên phần tử

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
24 để tìm ra một cách đại khái trong phạm vi đầu vào mà người dùng đang di chuột và lưu trữ vị trí trong thuộc tính
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
25 trong khi cập nhật chú giải công cụ để phản ánh dấu thời gian ở vị trí đó.

Kết nối chức năng

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
26 với sự kiện
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
27 trên điều khiển
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
24 để xem nó có hiệu lực trong hành động:

index.js

// Select elements here
const video = document.getElementById('video');
const videoControls = document.getElementById('video-controls');

const videoWorks = !!document.createElement('video').canPlayType;
if (videoWorks) {
  video.controls = false;
  videoControls.classList.remove('hidden');
}
6

Xin lỗi, trình duyệt của bạn không hỗ trợ video HTML5, nhưng đừng lo lắng, bạn có thể tải xuống và xem nó với trình phát video yêu thích của bạn!

GIF

Khi giá trị của phần tử

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
24 được thay đổi bằng cách nhấp hoặc kéo ngón tay cái, chúng tôi muốn video nhảy vào thời gian được đặt trong thuộc tính
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
25. Tạo chức năng
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
31 mới dưới
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
26:

index.js

// Select elements here
const video = document.getElementById('video');
const videoControls = document.getElementById('video-controls');

const videoWorks = !!document.createElement('video').canPlayType;
if (videoWorks) {
  video.controls = false;
  videoControls.classList.remove('hidden');
}
7

Hàm này sẽ được thực thi khi giá trị của các thay đổi phần tử

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
24 có thể được theo dõi bằng sự kiện
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
34. Sau đó, chúng tôi nhận được giá trị của thuộc tính
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
25 và kiểm tra xem nó có tồn tại không. Nếu có, chúng tôi lấy giá trị và cập nhật thời gian đã trôi qua video và thanh tiến trình lên giá trị đó. Nếu thuộc tính
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
25 không tồn tại (ví dụ trên điện thoại di động), giá trị của phần tử
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
24 được sử dụng thay thế.

Điều này tạo ra hiệu quả của việc nhảy về phía trước một vị trí khác trong video.

index.js

// Select elements here
const video = document.getElementById('video');
const videoControls = document.getElementById('video-controls');

const videoWorks = !!document.createElement('video').canPlayType;
if (videoWorks) {
  video.controls = false;
  videoControls.classList.remove('hidden');
}
8

Xin lỗi, trình duyệt của bạn không hỗ trợ video HTML5, nhưng đừng lo lắng, bạn có thể tải xuống và xem nó với trình phát video yêu thích của bạn!

GIF

Khi giá trị của phần tử . . . . . .24 được thay đổi bằng cách nhấp hoặc kéo ngón tay cái, chúng tôi muốn video nhảy vào thời gian được đặt trong thuộc tính . . . . . .25. Tạo chức năng . . . . . .31 mới dưới . . . . . .26:

index.html

// Select elements here
const video = document.getElementById('video');
const videoControls = document.getElementById('video-controls');

const videoWorks = !!document.createElement('video').canPlayType;
if (videoWorks) {
  video.controls = false;
  videoControls.classList.remove('hidden');
}
9

Hàm này sẽ được thực thi khi giá trị của các thay đổi phần tử

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
24 có thể được theo dõi bằng sự kiện
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
34. Sau đó, chúng tôi nhận được giá trị của thuộc tính
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
25 và kiểm tra xem nó có tồn tại không. Nếu có, chúng tôi lấy giá trị và cập nhật thời gian đã trôi qua video và thanh tiến trình lên giá trị đó. Nếu thuộc tính
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
25 không tồn tại (ví dụ trên điện thoại di động), giá trị của phần tử
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
24 được sử dụng thay thế.

Điều này tạo ra hiệu quả của việc nhảy về phía trước một vị trí khác trong video.

Điều khiển âm lượng

Trong đoạn trích trên, bạn có thể tìm thấy đánh dấu cho tất cả các điều khiển liên quan đến âm lượng. Chúng tôi có một nút đại diện cho biểu tượng âm lượng tùy thuộc vào trạng thái của âm lượng video và đầu vào phạm vi điều khiển âm lượng của video.

index.js

const playButton = document.getElementById('play');
0

Điều đầu tiên chúng ta cần làm là cập nhật âm lượng của video khi giá trị của phần tử

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
38 thay đổi. Chúng tôi cũng cần cập nhật biểu tượng để phản ánh âm lượng hiện tại của video.

index.js

const playButton = document.getElementById('play');
1

Như bạn có thể thấy, đầu vào âm lượng nằm trong khoảng từ 0 đến 1 và mỗi bước trong đầu vào làm tăng âm lượng lên 0,01. Nó được đặt theo cách này để làm cho nó phù hợp với thuộc tính âm lượng video Video cũng dao động từ 0 đến 1 trong đó 0 là âm lượng thấp nhất và 1 là cao nhất.

index.js

const playButton = document.getElementById('play');
2

Đi trước và chọn nút, biểu tượng và đầu vào trong tệp

const playbackIcons = document.querySelectorAll('.playback-icons use');
5 của bạn:

Tiếp theo, hãy tạo chức năng
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
40 mới để cập nhật âm lượng ngay khi đầu vào âm lượng được thay đổi:

const playButton = document.getElementById('play');
3

Và kết nối nó với phần tử

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
41 như sau:

Tại thời điểm này, bạn sẽ nhận thấy mức giảm âm lượng khi bạn trượt phạm vi sang trái và ngược lại. Chúng ta cần thêm một chức năng khác để cập nhật biểu tượng bất cứ khi nào âm lượng thay đổi:

index.js

const playButton = document.getElementById('play');
4

index.js

Xin lỗi, trình duyệt của bạn không hỗ trợ video HTML5, nhưng đừng lo lắng, bạn có thể tải xuống và xem nó với trình phát video yêu thích của bạn!

GIF

Khi giá trị của phần tử

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
24 được thay đổi bằng cách nhấp hoặc kéo ngón tay cái, chúng tôi muốn video nhảy vào thời gian được đặt trong thuộc tính
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
25. Tạo chức năng
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
31 mới dưới
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
26:

index.js

const playButton = document.getElementById('play');
5

Hàm này sẽ được thực thi khi giá trị của các thay đổi phần tử

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
24 có thể được theo dõi bằng sự kiện
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
34. Sau đó, chúng tôi nhận được giá trị của thuộc tính
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
25 và kiểm tra xem nó có tồn tại không. Nếu có, chúng tôi lấy giá trị và cập nhật thời gian đã trôi qua video và thanh tiến trình lên giá trị đó. Nếu thuộc tính
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
25 không tồn tại (ví dụ trên điện thoại di động), giá trị của phần tử
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
24 được sử dụng thay thế.

index.js

const playButton = document.getElementById('play');
6

Điều này tạo ra hiệu quả của việc nhảy về phía trước một vị trí khác trong video.

Điều khiển âm lượng

Xin lỗi, trình duyệt của bạn không hỗ trợ video HTML5, nhưng đừng lo lắng, bạn có thể tải xuống và xem nó với trình phát video yêu thích của bạn!

GIF

Khi giá trị của phần tử . . . . . .24 được thay đổi bằng cách nhấp hoặc kéo ngón tay cái, chúng tôi muốn video nhảy vào thời gian được đặt trong thuộc tính . . . . . .25. Tạo chức năng . . . . . .31 mới dưới . . . . . .26:

Hàm này sẽ được thực thi khi giá trị của các thay đổi phần tử

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
24 có thể được theo dõi bằng sự kiện
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
34. Sau đó, chúng tôi nhận được giá trị của thuộc tính
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
25 và kiểm tra xem nó có tồn tại không. Nếu có, chúng tôi lấy giá trị và cập nhật thời gian đã trôi qua video và thanh tiến trình lên giá trị đó. Nếu thuộc tính
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
25 không tồn tại (ví dụ trên điện thoại di động), giá trị của phần tử
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
24 được sử dụng thay thế.

Điều này tạo ra hiệu quả của việc nhảy về phía trước một vị trí khác trong video.

index.js

const playButton = document.getElementById('play');
7

Điều khiển âm lượng

Ở đây, HTML cho hoạt hình của chúng tôi:

INDEX.html

const playButton = document.getElementById('play');
8

Và ở đây, các CSS có liên quan:

style.css

const playButton = document.getElementById('play');
9

Theo mặc định, phần tử

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
52 được thực hiện hoàn toàn trong suốt bằng cách sử dụng thuộc tính
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
53. Để tái tạo hình ảnh động từ YouTube, chúng tôi sẽ sử dụng API hoạt hình web để làm động cho độ mờ và quy mô của yếu tố này.

Chọn nó đầu tiên ở đầu

const playbackIcons = document.querySelectorAll('.playback-icons use');
5:

index.js

// Add functions here

// togglePlay toggles the playback state of the video.
// If the video playback is paused or ended, the video is played
// otherwise, the video is paused
function togglePlay() {
  if (video.paused || video.ended) {
    video.play();
  } else {
    video.pause();
  }
}
0

Sau đó tạo chức năng sau đây bên dưới tất cả các chức năng khác trong

const playbackIcons = document.querySelectorAll('.playback-icons use');
5:

index.js

// Add functions here

// togglePlay toggles the playback state of the video.
// If the video playback is paused or ended, the video is played
// otherwise, the video is paused
function togglePlay() {
  if (video.paused || video.ended) {
    video.play();
  } else {
    video.pause();
  }
}
1

Phương thức

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
56 có trong một loạt các đối tượng KeyFrame và một đối tượng tùy chọn nơi bạn có thể kiểm soát thời lượng của hình ảnh động trong số những thứ khác.

Bây giờ, hãy thêm một người nghe sự kiện

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
49 thứ hai vào
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
23:

// Add functions here

// togglePlay toggles the playback state of the video.
// If the video playback is paused or ended, the video is played
// otherwise, the video is paused
function togglePlay() {
  if (video.paused || video.ended) {
    video.play();
  } else {
    video.pause();
  }
}
2

Hiệu ứng là bây giờ bạn thấy một hình ảnh động ngắn khi bạn phát hoặc tạm dừng video bằng cách nhấp vào nó.

Xin lỗi, trình duyệt của bạn không hỗ trợ video HTML5, nhưng đừng lo lắng, bạn có thể tải xuống và xem nó với trình phát video yêu thích của bạn!

GIF

Video toàn màn hình

Tiếp theo, hãy để Lừa làm cho nút toàn màn hình chức năng. Để tạo video toàn màn hình (bao gồm cả các điều khiển), chúng tôi phải chọn phần tử

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
59 và yêu cầu trình duyệt đặt nó (và hậu duệ của nó) trong màn hình đầy đủ.

Chọn cả nút và bộ chứa video trong tệp

const playbackIcons = document.querySelectorAll('.playback-icons use');
5 của bạn:

index.js

// Add functions here

// togglePlay toggles the playback state of the video.
// If the video playback is paused or ended, the video is played
// otherwise, the video is paused
function togglePlay() {
  if (video.paused || video.ended) {
    video.play();
  } else {
    video.pause();
  }
}
3

Sau đó tạo chức năng

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
61 mới:

index.js

// Add functions here

// togglePlay toggles the playback state of the video.
// If the video playback is paused or ended, the video is played
// otherwise, the video is paused
function togglePlay() {
  if (video.paused || video.ended) {
    video.play();
  } else {
    video.pause();
  }
}
4

Và thêm Trình nghe sự kiện

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
49 trên
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
63 như được hiển thị bên dưới:

index.js

// Add functions here

// togglePlay toggles the playback state of the video.
// If the video playback is paused or ended, the video is played
// otherwise, the video is paused
function togglePlay() {
  if (video.paused || video.ended) {
    video.play();
  } else {
    video.pause();
  }
}
5

Hàm

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
61 kiểm tra xem tài liệu có ở chế độ toàn màn hình trước không, nếu vậy nó sẽ ra khỏi chế độ cửa sổ. Mặt khác, nó đặt phần tử
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
65 trong màn hình đầy đủ.

Một điều nữa chúng ta cần làm trong phần này là cập nhật biểu tượng toàn màn hình và văn bản trong Tooltip xuất hiện khi bạn di chuột trên nút. Đầu tiên, chọn các biểu tượng:

index.js

// Add functions here

// togglePlay toggles the playback state of the video.
// If the video playback is paused or ended, the video is played
// otherwise, the video is paused
function togglePlay() {
  if (video.paused || video.ended) {
    video.play();
  } else {
    video.pause();
  }
}
6

Sau đó tạo chức năng để cập nhật nút khi

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
65 đi vào và ra khỏi chế độ toàn màn hình:

index.js

// Add functions here

// togglePlay toggles the playback state of the video.
// If the video playback is paused or ended, the video is played
// otherwise, the video is paused
function togglePlay() {
  if (video.paused || video.ended) {
    video.play();
  } else {
    video.pause();
  }
}
7

Cuối cùng, gán

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
67 cho trình xử lý sự kiện
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
68 trên phần tử
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
65:

index.js

// Add functions here

// togglePlay toggles the playback state of the video.
// If the video playback is paused or ended, the video is played
// otherwise, the video is paused
function togglePlay() {
  if (video.paused || video.ended) {
    video.play();
  } else {
    video.pause();
  }
}
8

Và nó hoạt động như mong đợi! Kiểm tra nó trong trình duyệt của bạn hoặc xem GIF bên dưới.

Xin lỗi, trình duyệt của bạn không hỗ trợ video HTML5, nhưng đừng lo lắng, bạn có thể tải xuống và xem nó với trình phát video yêu thích của bạn!

GIF

Video toàn màn hình

Tiếp theo, hãy để Lừa làm cho nút toàn màn hình chức năng. Để tạo video toàn màn hình (bao gồm cả các điều khiển), chúng tôi phải chọn phần tử

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
59 và yêu cầu trình duyệt đặt nó (và hậu duệ của nó) trong màn hình đầy đủ.

Chọn cả nút và bộ chứa video trong tệp

const playbackIcons = document.querySelectorAll('.playback-icons use');
5 của bạn:

Hướng dẫn custom video controls html - điều khiển video tùy chỉnh html

Sau đó tạo chức năng

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
61 mới:

Và thêm Trình nghe sự kiện

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
49 trên
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
63 như được hiển thị bên dưới:

index.js

// Add functions here

// togglePlay toggles the playback state of the video.
// If the video playback is paused or ended, the video is played
// otherwise, the video is paused
function togglePlay() {
  if (video.paused || video.ended) {
    video.play();
  } else {
    video.pause();
  }
}
9

Hàm

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
61 kiểm tra xem tài liệu có ở chế độ toàn màn hình trước không, nếu vậy nó sẽ ra khỏi chế độ cửa sổ. Mặt khác, nó đặt phần tử
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
65 trong màn hình đầy đủ.

index.js

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
0

Một điều nữa chúng ta cần làm trong phần này là cập nhật biểu tượng toàn màn hình và văn bản trong Tooltip xuất hiện khi bạn di chuột trên nút. Đầu tiên, chọn các biểu tượng:

index.js

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
1

Sau đó tạo chức năng để cập nhật nút khi

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
65 đi vào và ra khỏi chế độ toàn màn hình:

Cuối cùng, gán

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
67 cho trình xử lý sự kiện
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
68 trên phần tử
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
65:

index.js

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
2

Và nó hoạt động như mong đợi! Kiểm tra nó trong trình duyệt của bạn hoặc xem GIF bên dưới.

Xin lỗi, trình duyệt của bạn không hỗ trợ video HTML5, nhưng đừng lo lắng, bạn có thể tải xuống và xem nó với trình phát video yêu thích của bạn!

GIF

Video toàn màn hình

Tiếp theo, hãy để Lừa làm cho nút toàn màn hình chức năng. Để tạo video toàn màn hình (bao gồm cả các điều khiển), chúng tôi phải chọn phần tử

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
59 và yêu cầu trình duyệt đặt nó (và hậu duệ của nó) trong màn hình đầy đủ.

Chọn cả nút và bộ chứa video trong tệp

const playbackIcons = document.querySelectorAll('.playback-icons use');
5 của bạn:

index.js

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
3

Sau đó tạo chức năng

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
61 mới:

Và thêm Trình nghe sự kiện

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
49 trên
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
63 như được hiển thị bên dưới:

Hàm
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
61 kiểm tra xem tài liệu có ở chế độ toàn màn hình trước không, nếu vậy nó sẽ ra khỏi chế độ cửa sổ. Mặt khác, nó đặt phần tử
. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
65 trong màn hình đầy đủ.

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
4

Một điều nữa chúng ta cần làm trong phần này là cập nhật biểu tượng toàn màn hình và văn bản trong Tooltip xuất hiện khi bạn di chuột trên nút. Đầu tiên, chọn các biểu tượng:

Sau đó tạo chức năng để cập nhật nút khi

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
65 đi vào và ra khỏi chế độ toàn màn hình:

  • video.addEventListener('play', updatePlayButton);
    video.addEventListener('pause', updatePlayButton);
    9: Phát hoặc tạm dừng video
  • . . .
    <video controls class="video" id="video" preload="metadata" poster="poster.jpg">
      <source src="video.mp4" type="video/mp4">source>
    video>
    . . .
    82: tắt tiếng hoặc bật tiếng
  • . . .
    <video controls class="video" id="video" preload="metadata" poster="poster.jpg">
      <source src="video.mp4" type="video/mp4">source>
    video>
    . . .
    83: Chuyển đổi toàn màn hình
  • . . .
    <video controls class="video" id="video" preload="metadata" poster="poster.jpg">
      <source src="video.mp4" type="video/mp4">source>
    video>
    . . .
    84: Chuyển đổi chế độ hình ảnh trong hình ảnh

Những gì chúng tôi sẽ làm ở đây là lắng nghe sự kiện

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
85 trên tài liệu, phát hiện khóa đã được nhấn và chạy các chức năng liên quan cho khóa.

index.js

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
5

Một câu lệnh chuyển đổi được sử dụng ở trên để phát hiện khóa nào đã được nhấn và sau đó thực thi mã có liên quan. Lý do

. . .
<video controls class="video" id="video" preload="metadata" poster="poster.jpg">
  <source src="video.mp4" type="video/mp4">source>
video>
. . .
86 được gọi sau hai giây là để bắt chước hành vi trên YouTube, khi sử dụng phím tắt để phát video, các điều khiển không ẩn ngay khi video bắt đầu phát nhưng làm như vậy sau một thời gian ngắn.

index.js

// Add eventlisteners here
playButton.addEventListener('click', togglePlay);
6

Sự kết luận

Có rất nhiều cách để cải thiện trình phát video nhưng hướng dẫn đã trở nên quá lâu nên tôi phải dừng lại ở đây. Nếu bạn quan tâm đến việc mở rộng chức năng của người chơi, đây là một số ý tưởng:

  • Thêm hỗ trợ cho chú thích và phụ đề.
  • Thêm hỗ trợ tốc độ.
  • Thêm khả năng chuyển tiếp nhanh hoặc tua lại video.
  • Thêm khả năng chọn độ phân giải video (720p, 480p, 360p, 240p).

Tôi hy vọng hướng dẫn này là hữu ích cho bạn. Nếu bạn có bất kỳ câu hỏi nào, xin vui lòng để lại nhận xét bên dưới và tôi sẽ liên hệ lại với bạn. Don Tiết quên kiểm tra mã nguồn đầy đủ trên GitHub.

Cảm ơn bạn đã đọc, và mã hóa hạnh phúc!

  • #JavaScript