Home > Web Front-end > Front-end Q&A > How to dynamically display subtitles through Vue components

How to dynamically display subtitles through Vue components

PHPz
Release: 2023-04-13 14:08:50
Original
1212 people have browsed it

With the continuous development of modern web development, Vue has become the choice of more and more developers. In Vue, processing video subtitles is low-cost and efficient, and it can also implement some more complex functions.

Next, let’s take a look at how to create subtitles in Vue.

Step one: Install third-party library

Vue does not come with a subtitle processing library, we need to use a third-party library. Here I have chosen a popular library called ‘vtt.js’. Before installation, you need to install the Node.js environment and npm package management tool. After the installation is complete, run the following command in your Vue directory:

npm install vtt.js --save
Copy after login

Step 2: Create a subtitle file

Next, we need to create a subtitle file in the project. The format of subtitle files can be SRT, VTT, JSON, etc. Here we use VTT format.

A simplest VTT subtitle file is as follows:

WEBVTT

1
00:00:00.000 --> 00:00:05.000
Hello World!

2
00:00:05.000 --> 00:00:10.000
My name is Alice.

3
00:00:10.000 --> 00:00:15.000
And I am a Vue developer.
Copy after login

As you can see, the core part of the VTT file is a text string, which contains the subtitle content and its display time.

Step 3: Implement subtitles through the Vue component

In the Vue component, we can load and parse the subtitle file through the interface provided in the vtt.js library, and apply it to in the video player. The following is the basic code of the implementation:

<template>
  <div>
    <video ref="videoPlayer" />
    <div class="subtitle" />
  </div>
</template>

<script>
import vttjs from 'vtt.js';

export default {
  data() {
    return {
      subtitle: null, // 存储字幕数据
      subtitleElement: null, // 存储字幕显示位置
    };
  },
  mounted() {
    // 异步加载并解析字幕文件
    const xhr = new XMLHttpRequest();
    xhr.open('GET', 'your.vtt', true);
    xhr.onreadystatechange = () => {
      if (xhr.readyState === 4 && xhr.status === 200) {
        const parser = new vttjs.WebVTT.Parser(window, vttjs, 'default');
        parser.oncue = cue => {
          this.subtitle.cues.push(cue);
        };
        // 完成解析
        parser.onparsingerror = () => {
          console.error('解析字幕文件出错');
        };
        parser.onflush = () => {
          const subtitleElement = this.$el.querySelector('.subtitle');
          // 存储字幕显示位置
          this.subtitleElement = subtitleElement;
        };
        // 开始解析字幕文件
        parser.parse(xhr.responseText);
      }
    };
    xhr.onerror = () => {
      console.error('无法加载字幕文件');
    };
    xhr.send();

    // 创建视频播放器
    const videoPlayer = this.$refs.videoPlayer;
    videoPlayer.addEventListener('timeupdate', this.handleTimeUpdated);
  },
  beforeDestroy() {
    // 移除视频播放器
    const videoPlayer = this.$refs.videoPlayer;
    videoPlayer.removeEventListener('timeupdate', this.handleTimeUpdated);
  },
  methods: {
    handleTimeUpdated() {
      // 根据当前时间显示对应的字幕
      const videoPlayer = this.$refs.videoPlayer;
      const currentTime = videoPlayer.currentTime;
      const cues = this.subtitle.cues;
      for (let i = 0; i < cues.length; i++) {
        const cue = cues[i];
        if (currentTime >= cue.startTime && currentTime <= cue.endTime) {
          this.subtitleElement.innerHTML = cue.text;
          return;
        }
      }
      // 当前时间没有对应的字幕,清空字幕显示
      this.subtitleElement.innerHTML = &#39;&#39;;
    },
  },
};
</script>
Copy after login

Through the above code, we realize the loading, parsing and dynamic display of subtitles, making the subtitle function closely integrated with the video player, making it more efficient and easier to use.

Summary

Vue provides a powerful tool chain that can help developers easily build efficient web applications. Vue also has a convenient solution for processing video subtitles. We only need to use a third-party library to load and parse subtitles, and then use the Vue component to dynamically display the subtitles, and then we can easily implement the video subtitle function. Hope this article is helpful to you.

The above is the detailed content of How to dynamically display subtitles through Vue components. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template