首页 > 其他分享 >js实现歌词自动轮转及播放时间跳转

js实现歌词自动轮转及播放时间跳转

时间:2024-05-25 17:34:51浏览次数:22  
标签:box 00 轮转 歌词 js time var 跳转 t1

需求

实现歌词滚动提示和歌词点击跳转功能

思路

歌词滚动:将歌词解析成两个数组,一个用于存放时间,一个用于存放歌词,下标一致对应,利用定时器对每毫秒轮询时间数组,若一致,显示歌词变红。
歌词点击播放:判断点击歌词在数组中的下标,读取时间数组中的时间,赋值播放时间

代码

歌词滚动.html

<html>
    <head>
        <title>歌词滚动</title>

        <script src="歌词滚动.js"></script>

    </head>
    <body>

        <div id="wordBox" style="width: 450px;height: 160px;background-color: aqua;overflow-y: scroll;display: flexl;flex-direction: column;justify-content: center;align-items: center;"></div>

    </body>
</html>

歌词滚动.json

window.onload = function () {


    var words = `[00:02.05]愿得一人心
[00:08.64]词:胡小健 曲:罗俊霖
[00:11.14]演唱: 李行亮,雨宗林
[00:24.93]
[00:27.48]曾在我背包小小夹层里的那个人
[00:32.31]陪伴我漂洋过海经过每一段旅程
[00:37.38]隐形的稻草人 守护我的天真
[00:42.43]曾以为爱情能让未来只为一个人
[00:47.50]关了灯依旧在书桌角落的那个人
[00:52.68]变成我许多年来纪念爱情的标本
[00:57.57]消失的那个人 回不去的青春
[01:02.69]忘不了爱过的人才会对过往认真
[01:09.71]只愿得一人心 白首不分离
[01:14.71]这简单的话语 需要巨大的勇气
[01:19.73]没想过失去你 却是在骗自己
[01:25.34]最后你深深藏在我的歌声里`

    // alert("hello")

    var wordArray = words.split("\n")

    var box = document.getElementById("wordBox")
    var time = []
    var wd = []
    for (let i = 0; i < wordArray.length; i++) {

        min = parseInt(wordArray[i].match(/\d{2}:\d{2}.\d{2}/)[0].split(":")[0])
        sin = parseInt(wordArray[i].match(/\d{2}:\d{2}.\d{2}/)[0].split(":")[1].split(".")[0])
        msin = parseInt(wordArray[i].match(/\d{2}:\d{2}.\d{2}/)[0].split(":")[1].split(".")[1])


        time.push(min * 60 * 1000 + sin * 1000 + msin)
    }

    var loadWords = function () {
        for (let j = 0; j < time.length; j++) {
            box.innerHTML = box.innerHTML + "<div style='width: 400px;height: 30px;margin-top: 10px;margin-bottom: 10px;' id=word" + j + "><span>" + wordArray[j] + "</span><button id=button" + j + ">点我</button></div>"
        }
    }

    loadWords()



    console.log(box.childNodes)

    console.log(time)
    var t1 = 0
    var interval = function () {
        setInterval(

            function () {



                for (let j = 0; j < time.length; j++) {

                    if (t1 == time[j]) {

                        for (let i = 0; i < box.childNodes.length; i++) {
                            box.childNodes[i].style.color = "black"
                        }
                        document.getElementById("word" + j).style.color = "red"

                        if (j > 1) {

                            box.scrollTo(0, parseInt(40 * (j - 1)))
                        }

                    }


                    if (t1 == time[time.length - 1]) {
                        window.clearInterval(interval)
                    }

                }
                t1 = t1 + 1

            },
            1
        )
    }
    interval()

    for (let i = 0; i < time.length; i++) {
        document.getElementById("button" + [i]).onclick = function () {
            t1 = time[i]
            interval()
        }
    }
}

标签:box,00,轮转,歌词,js,time,var,跳转,t1
From: https://www.cnblogs.com/keeepfool/p/18212662

相关文章

  • Content-Type 'application/json;charset=UTF-8' is not supported异常解决
    Content-Type'application/json;charset=UTF-8'isnotsupported异常解决前提:确定不是因为Content-Type导致的异常,controller层有注解@RequestBody。报错详情:确定不是因为缺少Jackson依赖或者版本过低:注意到报错信息上边有一条警告日志:.c.j.MappingJackson2HttpMessageCo......
  • js的闭包原理——通过引擎的堆栈解析
    有段代码如下:functioncreateCounter(){leti=0;functionincrement(){i++;}functiongetValue(){returni;}return{increment,getValue}}constcounter=createCounter();在这段代码中,运用了函数的3个特点:在函......
  • Nodejs安装及配置,包含Windows和Linux两种平台
    目录1.下载安装包2.Windows下安装3.Linux下安装4.使用Vite创建Vue项目5.结语Node.js是前端开发的必备工具,特别是在使用Vue或React开发项目时,需要npm安装依赖、运行开发环境以及项目打包,这里就分别介绍一下在Windows和Linux平台如何安装Nodejs。文章结尾,笔者还会......
  • 【计算机毕业设计】基于SSM++jsp的实验室耗材管理系统【源码+lw+部署文档】
             目录第1章绪论1.1课题背景1.2课题意义1.3研究内容第2章开发环境与技术2.1MYSQL数据库2.2JSP技术 2.3SSM框架第3章系统分析3.1可行性分析3.1.1技术可行性3.1.2经济可行性3.1.3操作可行性3.2系统流程3.2.1操作流程3.2.2......
  • Nodejs的ORM--Sequelize-一万六千字-详细教程
    本文来介绍Sequelize,一个基于Node.js的ORM(对象关系映射)工具,并详细介绍其用法。Sequelize用于在应用中使用JavaScript来操作关系型数据库,例如MySQL、PostgreSQL等。本文内容较多,可作为Sequelize的参考手册来阅读。开始使用核心概念Sequelize是一个基于JavaSc......
  • js控制专辑图片旋转效果
    需求需要通过按钮控制专辑图片的旋转和停止思路旋转:调用方法利用定时器控制每20ms将图片的角度旋转1°停止:调用方法清除定时器代码<html><head><title>图片轮转</title><script>window.onload=function(){varimg=document.getElem......
  • 什么是JS引擎
    JS引擎(JavaScript引擎)是负责在浏览器或Node.js等环境中解析和执行JavaScript代码的软件组件。它是JavaScript运行时的核心,将JavaScript代码转换为机器语言,使其能够在计算机上执行。不同的浏览器和运行环境使用不同的JS引擎。以下是一些著名的JS引擎:V8:Google的Chrome浏览器和N......
  • 前端服务端React(Next.js)、Vue(Nuxt.js)、Angular(Universal)渲染搭建和开发案例
    前端服务端渲染(Server-SideRendering,简称SSR)是一种Web开发技术,它允许服务器动态生成HTML内容,然后将其发送到客户端,客户端再将这些HTML内容渲染成页面。这种方式可以提高首屏加载速度,改善SEO,以及提供更好的用户体验。前端服务端渲染搭建步骤:选择框架:选择支持服务端渲染......
  • 前端 用账号密码登录的时候 对密码进行加密 【最佳解决方案】用bcrypt.js 或者 crypto
    1、在后台管理的项目中或者其他项目用到账号密码登录的功能,我们需要对密码进行一个密码的操作 2、我们可以使用第三方的库去实现登录密码加密的功能有两个JS库 bcrypt.js或者crypto-js3、方案一使用了bcrypt.js库对密码进行加密。首先,生成一个salt,它是一个随......
  • aws jsii 基于js 实现跨语言交互的编译器
    jsiiaws开源的,让我们可以基于js实现跨语言交互的编译器,我们可以基于ts开发功能,然后通过编译器jsii可以实现其他语言的通信,目前支持C#,golang,java,pythonruntime参考架构如下图说明从架构上我们可以看出jsii的通信是基于了标准输入输出的处理,实际内部处理后边研究下参考资......