滚动歌词效果

在这里插入图片描述

html文件

快速创建30个li,乱数假文

li*30>lorem

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="shortcut icon" href="../js/favicon.ico" type="image/x-icon">
    <link rel="stylesheet" href="index.css">
</head>

<body>
    <p>你好</p>
    <audio src="./张漾 - 我听过你的声音.mp3" controls></audio>
    <div class="container">
        <ul>
            <li>Lorem ipsum dolor sit amet.</li>
            <li>Vitae eum non consectetur consequuntur!</li>
            <li>Commodi, itaque. Magnam, architecto optio!</li>
            <li>Recusandae pariatur libero enim voluptatem!</li>
            <li>Inventore voluptatum qui deleniti aut.</li>
            <li>Veniam iste ea inventore nulla!</li>
            <li>Ullam nulla omnis placeat? Ipsa?</li>
            <li>Esse sapiente cumque sit a?</li>
            <li>Hic eveniet inventore ipsum porro.</li>
            <li>Dicta earum voluptates perferendis cum.</li>
            <li>Porro eaque tempora quisquam nesciunt.</li>
            <li>Tempore eius cum atque perferendis.</li>
            <li>At, enim quibusdam? In, et.</li>
            <li>Alias beatae earum magnam fugiat.</li>
            <li>Optio molestiae laboriosam delectus dicta?</li>
            <li>Accusamus id debitis ullam quod.</li>
            <li>Voluptatibus tenetur nulla laudantium voluptate!</li>
            <li>Eos dolor fugit eaque suscipit.</li>
            <li>Architecto ipsam dicta perspiciatis a.</li>
            <li>Reprehenderit fugit ex dolor earum?</li>
            <li>Consectetur qui voluptas consequuntur dolorem!</li>
            <li>Neque quia a molestias nam.</li>
            <li>Sapiente facere quod molestias doloribus.</li>
            <li>Aut modi harum repellendus totam.</li>
            <li>Suscipit quaerat explicabo dolorum officiis.</li>
            <li>Sed nemo quod deleniti ab!</li>
            <li>Dolor tempore sit beatae nihil.</li>
            <li>Voluptates delectus reiciendis nostrum cupiditate.</li>
            <li>Quis accusamus explicabo tempora officia.</li>
            <li>Officia consequatur ducimus placeat asperiores!</li>
        </ul>
    </div>

    <script src="./index.js"></script>

</body>

</html>

css文件

*{
    margin: 0;
    padding: 0;
}

body{
    background: #000000;
    color: #ffffff;
    text-align: center;
}

audio{
    margin-top: 50px;
}

.container{
    margin-top: 50px;
    height: 400px;
    /* border: 2px solid #ffffff ; */
    overflow: hidden;
}


li{
    height: 30px;
    line-height: 30px;
    transition: 2s;
}

.container ul{
    transform: translateY(0px);  
    transition: 2s;  /*动画化过度*/
    padding: 200px 0;
}

.active{
    color: aqua;
    transform: scale(1.5);
}


js文件

const doms = {
    audio: document.querySelector('audio'),
    ul: document.querySelector('ul'),
    li: document.querySelector('li'),
    container: document.querySelector('.container'),
}


const timeList = Array.from({ length: 30 }, (_, index) => (index+1) * 4)

//时间对应的歌词列表下标
function findIndex() {
    const currentTime = doms.audio.currentTime
    for (var i = 0; i < timeList.length; i++) {
        if (currentTime < timeList[i]) {
            return i - 1
        }
    }
    //最后一段时间特殊处理
    return timeList.length - 1
}

//计算每一li的偏移量
function setOffset() {
    const index = findIndex()
    var heightOff = (index + 0.5) * doms.li.clientHeight+200 - doms.container.clientHeight / 2;  //居中
    console.log(heightOff);

    //第一句和最后一句进行特殊处理
    if (heightOff <= 0) {
        heightOff = 0
    } else if (heightOff >= doms.ul.clientHeight - doms.container.clientHeight) {
        heightOff = doms.ul.clientHeight - doms.container.clientHeight 
    }

    doms.ul.style.transform = `translateY(-${heightOff}px)`


    //去除之前的样式
    const li = doms.ul.querySelector('.active')
    if (li) {
        li.classList.remove('active')
    }

	//激活对应的li
    if(index>=0){
        doms.ul.children[index].classList.add('active')
    }


}


doms.audio.addEventListener('timeupdate', setOffset)
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值