javascript - 自动滚动项目列表
问题描述
我在 a 中有一个项目列表,div
外部div
有一个固定的高度。所以项目溢出但隐藏在外部div
。我想滚动外部div
直到列表中的最后一项可见。我已经成功了一半。我滚动外部div
直到最后一个列表项。
这是我到目前为止所做的:
$(document).ready(function() {
$m = $('.marq');
$q = $('.qbox');
var mh = $m.height();
var qh = $q.height();
var currscr = 0;
scroll();
function scroll() {
var xpx = mh - qh;
if (mh > qh) {
currscr = xpx;
setInterval(function() {
autoscroll();
}, 50);
} else {
console.log("too few items");
}
}
function autoscroll() {
if (currscr > 0) {
var ch = $m.css('top').replace('px', '');
$m.css('top', (ch - 1) + 'px');
--currscr;
}
}
});
.qbox {
height: 90vh;
width: 80vw;
box-sizing: border-box;
overflow: hidden;
}
.marq {
position: relative;
box-sizing: border-box;
}
.item {
background: #4CAF50;
color: white;
box-sizing: border-box;
padding: 5px;
margin-bottom: 8px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="qbox">
<div class="marq">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
<div class="item">Item 6</div>
<div class="item">Item 7</div>
<div class="item">Item 8</div>
<div class="item">Item 9</div>
<div class="item">Item 10</div>
<div class="item">Item 11</div>
<div class="item">Item 12</div>
<div class="item">Item 13</div>
<div class="item">Item 14</div>
<div class="item">Item 15</div>
</div>
</div>
它在到达最后一项时停止。我希望它在延迟一段时间后滚动回第一项。然后在延迟一段时间后滚动到底部。并无限重复。
注意:速度要一致,列表中的项目数不应该影响滚动速度。这适用于滚动,从上到下和从下到上。滚动动画应该更像线性。
有什么帮助吗?
解决方案
var scroller = document.getElementById('scroller');
var scroller_height = scroller.clientHeight;
var qbox_height = document.getElementById('qbox').clientHeight;
function scrollForever(p_top)
{
var move_distance = 1;
var new_top = p_top - move_distance;
scroller.style.top = ""+p_top+"px";
if(scroller_height+(new_top-qbox_height)>=0)
{
setTimeout(function(){scrollForever(new_top)},50);
}
else
{
setTimeout(function(){scrollBack(new_top)},1000);
}
}
function scrollBack(p_top)
{
var move_distance=1;
if(p_top<0)
{
p_top = p_top+move_distance;
scroller.style.top = ""+p_top+"px";
setTimeout(function(){scrollBack(p_top)},50);
}
else
{
scroller.style.top = "0px";
setTimeout(function(){scrollForever(0)},1000);
}
}
scrollForever(0);
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>scrolling.html</title>
<style type="text/css">
.qbox {
height: 175px;
width: 500px;
box-sizing: border-box;
overflow: hidden;
}
.marq {
position: relative;
box-sizing: border-box;
}
.item {
background: #4CAF50;
color: white;
box-sizing: border-box;
padding: 5px;
margin-bottom: 8px;
}
</style>
</head>
<body>
<div class="qbox" id="qbox">
<div class="marq" id="scroller">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
<div class="item">Item 6</div>
<div class="item">Item 7</div>
<div class="item">Item 8</div>
<div class="item">Item 9</div>
<div class="item">Item 10</div>
<div class="item">Item 11</div>
<div class="item">Item 12</div>
<div class="item">Item 13</div>
<div class="item">Item 14</div>
<div class="item">Item 15</div>
</div>
</div>
</body>
</html>
推荐阅读
- mysql - 升级到 1.0 后无法升帆
- c# - asp.net上传文件License file not found错误
- php - PHP基本登录脚本不会登录
- javascript - 如何在具有循环结构的打字稿中复制primeNG树ByValue
- sql - 从一列时间表创建出勤视图 (SQL Server 2008 R2)
- excel - Excel导出所有文本内容
- php - 在php中成功连接表时不显示记录?
- python - Plotnine 中的误差线
- javascript - 使用 JavaScript 从离开站点警报中获取文本?
- android - Python程序(PC上的服务器)和android应用程序(使用android studios构建的客户端)之间的TCP套接字