利用jQuery制作简易的table上下无缝轮播
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
<style>
.box {
/* 最外层可显示的高度 */
height: 200px;
overflow: hidden;
}
.table {
width: 600px
}
.thead,
.tbody {
position: relative;
}
.thead {
z-index: 1;
background: darkgray;
}
.tbody {
z-index: 0;
}
</style>
</head>
<body>
<div class="box">
<table class="table" border=1 cellspacing=0>
<thead class="thead">
<tr>
<th>序号</th>
<th>名字</th>
<th>年龄</th>
<th>性别</th>
<th>测试1</th>
</tr>
</thead>
<tbody class="tbody">
</tbody>
</table>
</div>
<script>
// 加载数据
for (let i = 0; i < 20; i++) {
var row = [
'<tr>',
'<td title="' + i + 1 + '">' + i + 1 + '</td>',
'<td>' + '名字' + i + '</td>',
'<td>' + '年龄' + i + '</td>',
'<td>' + '性别' + i + '</td>',
'<td>' + '测试1--' + i + '</td>',
'</tr>'
].join('')
console.log(row)
$('.box tbody').append(row)
}
startRoll(50) //50为时间
function startRoll(time) {
let timer = null
//默认初始值为自己本身的top
let top = $(".tbody").css('top')
let offsetTop = top.substring(0, top.indexOf('px'))
startFun(time)
function startFun(time) {
timer = setInterval(() => {
//比较数据的长度是否超过div的高度,没超过不开始轮播
if (!heightComparison()) {
clearTimeout(timer)
return false
}
offsetTop -= 1
let body_tbody = $("tbody") //定义 tbody为body_tbody
let scrollHeight = body_tbody.find("tr").outerHeight(true); //获取 tr的高度
let tbodyTopPX = body_tbody.css('top'); // 获取tbody的top值
let tbodyTop = tbodyTopPX.substring(0, tbodyTopPX.indexOf('px'))
body_tbody.css({ 'top': offsetTop + 'px' }) //改变tbody的top 令tbody向上移动
if (tbodyTop != 0 && parseInt(tbodyTop) % Math.ceil(scrollHeight) === 0) { // tbodyTop的top值是 tr高度的倍数时 将第一个tr移动到最后并让tbodyTop的top值减去tr的高度
body_tbody.find("tr:first").appendTo(body_tbody);
offsetTop += scrollHeight
body_tbody.css({ 'top': offsetTop + 'px' })
}
}, time)
}
$(".box").mouseover(function () {
// 鼠标移入 关闭轮播
clearTimeout(timer)
});
$(".box").mouseout(function () {
// 鼠标移出 重新开启轮播
startFun(time)
});
}
function heightComparison() {
let divHeight = $(".box").height(); //最外层div的高度 用来比较数据的长度是否超过div的高度,没超过不开始轮播
let tbodyHeight = $(".tbody").height();
let tHeadHeight = $(".thead").height();
return tbodyHeight > divHeight - tHeadHeight
}
</script>
</body>
</html>