<!doctype html>
<html>
<head>
<title>文字滚动 歌词字幕</title>
<style type="text/css">
#scroll_caption{
overflow-y: scroll;
width: 450px;
height: 550px;
background: #2B2B2B;
}
#scroll_caption_list_box{
margin: calc(50% - 30px) 0;
}
.caption_item_box{
height: 40px;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
color: #6A6A6A;
}
.caption_item_selected_box{
color: white!important;
}
</style>
</head>
<body>
<div id="scroll_caption">
<div id="scroll_caption_list_box">
<div class="caption_item_box">
作词 : 薛之谦
</div>
<div class="caption_item_box">
作曲 : 薛之谦
</div>
<div class="caption_item_box">
编曲 : 郑伟
</div>
<div class="caption_item_box">
如果有人在灯塔
</div>
<div class="caption_item_box">
拨弄她的头发
</div>
<div class="caption_item_box">
思念刻在墙和瓦
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
如果感情会挣扎
</div>
<div class="caption_item_box">
没有说的儒雅
</div>
<div class="caption_item_box">
把挽回的手放下
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
镜子里的人说假话
</div>
<div class="caption_item_box">
违心的样子你决定了吗
</div>
<div class="caption_item_box">
装聋或者作哑 要不我先说话
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
我们的爱情 到这刚刚好
</div>
<div class="caption_item_box">
剩不多也不少 还能忘掉
</div>
<div class="caption_item_box">
我应该可以 把自己照顾好
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
我们的距离 到这刚刚好
</div>
<div class="caption_item_box">
不够我们拥抱 就挽回不了
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
用力爱过的人 不该计较
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
是否要逼人弃了甲
</div>
<div class="caption_item_box">
亮出一条伤疤
</div>
<div class="caption_item_box">
不堪的根源在哪
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
可是感情会挣扎
</div>
<div class="caption_item_box">
没有别的办法
</div>
<div class="caption_item_box">
它劝你不如退下
</div>
<div class="caption_item_box">
如果分手太复杂
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
流浪的歌手会放下吉他
</div>
<div class="caption_item_box">
故事要美必须藏着真话
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
我们的爱情 到这刚刚好
</div>
<div class="caption_item_box">
剩不多也不少 还能忘掉
</div>
<div class="caption_item_box">
我应该可以 把自己照顾好
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
我们的距离 到这刚刚好
</div>
<div class="caption_item_box">
不够我们拥抱 就挽回不了
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
用力爱过的人 不该计较
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
我们的爱情到这刚刚好
</div>
<div class="caption_item_box">
再不争也不吵 不必再煎熬
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
你可以不用 记得我的好
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
我们的流浪到这刚刚好
</div>
<div class="caption_item_box">
趁我们还没到 天涯海角
</div>
<div class="caption_item_box">
我也不是非要去那座城堡
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
天空有些暗了暗的刚刚好
</div>
<div class="caption_item_box">
我难过的样子就没人看到
</div>
<div class="caption_item_box">
你别太在意我身上的记号
</div>
<div class="caption_item_box"></div>
<div class="caption_item_box">
制作 : 薛之谦
</div>
<div class="caption_item_box">
录音 : 郝宇
</div>
<div class="caption_item_box">
混音 : 郑伟
</div>
<div class="caption_item_box">
母带处理 : Ted Jensen
</div>
</div>
</div>
<script type="text/javascript">
// 是否进行滚动
let is_scroll_flag = true
// 设置is_scroll_flag 为 true 的定时器
let set_scroll_flag_Timeout;
/**
* 目标元素 滚动指定位置
* @param targetElement 目标元素
* @param number 位置
* @param time 时间
*/
function ScrollTop(targetElement, number = 0, time){
if (!time) {
targetElement.scrollTop = number;
return number;
}
const spacingTime = 3; // 设置循环的间隔时间 值越小消耗性能越高
let spacingIndex = time / spacingTime; // 计算循环的次数
let nowTop = targetElement.scrollTop; // 获取当前滚动条位置
let everTop = (number - nowTop) / spacingIndex; // 计算每次滑动的距离
let scrollTimer = setInterval(() => {
if (spacingIndex > 0) {
spacingIndex--;
ScrollTop(targetElement, nowTop += everTop);
} else {
clearInterval(scrollTimer); // 清除计时器
}
}, spacingTime);
};
/**
* 滚动到指定index 和 样式变化
* @param caption_index 目标
* @param scroll_flag 是否滚动
*/
function to_target(caption_index, scroll_flag){
var caption_item_box_height = document.querySelector(".caption_item_box").clientHeight;
var scroll_caption_list = document.querySelectorAll(".caption_item_box");
var target = scroll_caption_list[caption_index];
var caption_item_selected_list = document.querySelectorAll(".caption_item_selected_box");
for(var i = 0;i<caption_item_selected_list.length;i++){
if (caption_item_selected_list[i] != target) {
caption_item_selected_list[i].classList.remove("caption_item_selected_box")
}
}
if (caption_index >= 0 && caption_index < scroll_caption_list.length){
target.classList.add("caption_item_selected_box");
}
var top = caption_index * caption_item_box_height;
if (scroll_flag != false) {
ScrollTop(document.getElementById('scroll_caption'), top, 300);
}
}
//暂停滚动 一会恢复
function pause_scroll() {
is_scroll_flag = false
clearTimeout(set_scroll_flag_Timeout);
set_scroll_flag_Timeout = setTimeout(function () {
is_scroll_flag = true
},2500);
}
//初始化 绑定事件
function init_scroll_caption() {
var scroll_caption = document.getElementById('scroll_caption')
scroll_caption.onmousedown = function () {
is_scroll_flag = false
}
scroll_caption.onmouseup = pause_scroll
//鼠标滚轮 滚动事件
scroll_caption.onwheel = pause_scroll
}
window.onload = function () {
init_scroll_caption()
document.querySelector(".caption_item_box").classList.add("caption_item_selected_box");
let caption_index = 0;
let scroll_caption_scrollTimer = setInterval(() => {
to_target(caption_index, is_scroll_flag)
caption_index = caption_index + 1;
}, 1000);
}
</script>
</body>
</html>