文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

React实现歌词滚动效果(跟随音乐播放时间滚动)

码农的乐园

码农的乐园

2024-04-02 17:21

关注

这篇文章将为大家详细讲解有关React实现歌词滚动效果(跟随音乐播放时间滚动),小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

React实现歌词滚动效果(跟随音乐播放时间滚动)

引言

在音乐播放器中,动态歌词滚动效果是用户体验的关键部分。本教程将引导你使用React实现这种效果,让歌词随着音乐播放时间同步滚动。

创建歌曲播放器组件

首先,创建一个名为 MusicPlayer 的React组件来管理音乐播放和歌词显示。

import React, { useState, useEffect } from "react";
import { useRef } from "react";
import "./styles.css";

const MusicPlayer = () => {
  const [isPlaying, setIsPlaying] = useState(false);
  const [currentTime, setCurrentTime] = useState(0);
  // ... Rest of the component
};

添加歌词文本

将歌词文本存储在一个数组中,每个元素代表一行歌词。

const lyrics = ["Line 1", "Line 2", "Line 3", "..."];

监听播放时间更新

使用 useEffect 钩子监听音乐播放器的当前时间更新。

useEffect(() => {
  const interval = setInterval(() => {
    if (isPlaying) {
      setCurrentTime(prevTime => prevTime + 1);
    }
  }, 1000);
  return () => clearInterval(interval);
}, [isPlaying]);

滚动歌词

使用 currentTime 来确定应显示的歌词行。

const currentLyricIndex = Math.floor(currentTime / 1000);

然后使用CSS动画为当前歌词行添加滚动效果。

.lyrics-container {
  animation: lyrics-scroll ${lyrics.length}s linear infinite;
  animation-play-state: paused;
}

@keyframes lyrics-scroll {
  0% {
    transform: translate3d(0, 0, 0);
  }
  100% {
    transform: translate3d(0, -${currentLyricIndex * 20}px, 0);
  }
}

控制播放和暂停

添加播放和暂停按钮来控制音乐播放。

<button onClick={() => setIsPlaying(true)}>播放</button>
<button onClick={() => setIsPlaying(false)}>暂停</button>

同步歌词和音乐

当音乐播放时,启动歌词滚动动画。

useEffect(() => {
  if (isPlaying) {
    document.querySelector(".lyrics-container").style.animationPlayState = "running";
  } else {
    document.querySelector(".lyrics-container").style.animationPlayState = "paused";
  }
}, [isPlaying]);

最终代码

以下提供了完整的React组件代码:

import React, { useState, useEffect } from "react";
import { useRef } from "react";
import "./styles.css";

const MusicPlayer = () => {
  const [isPlaying, setIsPlaying] = useState(false);
  const [currentTime, setCurrentTime] = useState(0);
  const lyrics = ["Line 1", "Line 2", "Line 3", "..."];

  useEffect(() => {
    const interval = setInterval(() => {
      if (isPlaying) {
        setCurrentTime(prevTime => prevTime + 1);
      }
    }, 1000);
    return () => clearInterval(interval);
  }, [isPlaying]);

  const currentLyricIndex = Math.floor(currentTime / 1000);

  useEffect(() => {
    if (isPlaying) {
      document.querySelector(".lyrics-container").style.animationPlayState = "running";
    } else {
      document.querySelector(".lyrics-container").style.animationPlayState = "paused";
    }
  }, [isPlaying]);

  return (
    <div className="music-player-container">
      <div className="lyrics-container">
        {lyrics.map((lyric, idx) => (
          <p key={idx} className={`lyric-line ${idx === currentLyricIndex ? "current-lyric" : ""}`}>
            {lyric}
          </p>
        ))}
      </div>
      <div className="controls">
        <button onClick={() => setIsPlaying(true)}>播放</button>
        <button onClick={() => setIsPlaying(false)}>暂停</button>
      </div>
    </div>
  );
};

export default MusicPlayer;

总结

通过使用React的 useStateuseEffect 和 CSS 动画,可以轻松地实现歌词滚动效果。该效果可以增强音乐播放器的用户体验,让用户更容易跟随歌词,提升整体音乐聆听体验。

以上就是React实现歌词滚动效果(跟随音乐播放时间滚动)的详细内容,更多请关注编程学习网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯