>웹 프론트엔드 >프런트엔드 Q&A >Vue 구성 요소를 통해 자막을 동적으로 표시하는 방법

Vue 구성 요소를 통해 자막을 동적으로 표시하는 방법

PHPz
PHPz원래의
2023-04-13 13:38:141195검색

현대 웹 개발의 지속적인 발전으로 Vue는 점점 더 많은 개발자의 선택이 되었습니다. Vue에서는 비디오 자막 처리가 저렴하고 효율적이며, 좀 더 복잡한 기능을 구현할 수도 있습니다.

이제 Vue에서 자막을 만드는 방법을 살펴보겠습니다.

1단계: 타사 라이브러리 설치

Vue에는 자막 처리 라이브러리가 제공되지 않으므로 타사 라이브러리를 사용해야 합니다. 여기서는 'vtt.js'라는 인기 있는 라이브러리를 선택했습니다. 설치하기 전에 Node.js 환경과 npm 패키지 관리 도구를 설치해야 합니다. 설치가 완료되면 Vue 디렉터리에서 다음 명령을 실행하세요.

npm install vtt.js --save

2단계: 자막 파일 만들기

다음으로 프로젝트에 자막 파일을 만들어야 합니다. 자막 파일의 형식은 SRT, VTT, JSON 등이 될 수 있습니다. 여기서는 VTT 형식을 사용합니다.

가장 간단한 VTT 자막 파일은 다음과 같습니다.

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.

보시다시피 VTT 파일의 핵심 부분은 자막 내용과 표시 시간이 포함된 텍스트 문자열입니다.

3단계: Vue 구성 요소를 통해 자막 구현

Vue 구성 요소에서는 vtt.js 라이브러리에서 제공되는 인터페이스를 통해 자막 파일을 로드하고 구문 분석한 후 비디오 플레이어에 적용할 수 있습니다. 구현의 기본 코드는 다음과 같습니다.

<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>

위 코드를 통해 자막의 로딩, 파싱 및 동적 표시를 구현하여 자막 기능을 비디오 플레이어와 긴밀하게 통합하여 보다 효율적이고 사용하기 쉽게 만듭니다.

요약

Vue는 개발자가 효율적인 웹 애플리케이션을 쉽게 구축하는 데 도움이 되는 강력한 도구 체인을 제공합니다. Vue에는 비디오 자막 처리를 위한 편리한 솔루션도 있습니다. 타사 라이브러리를 사용하여 자막을 로드하고 구문 분석한 다음 Vue 구성 요소를 사용하여 자막을 동적으로 표시하면 비디오 자막 기능을 쉽게 구현할 수 있습니다. 이 기사가 도움이 되기를 바랍니다.

위 내용은 Vue 구성 요소를 통해 자막을 동적으로 표시하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.