<!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>虚拟列表监听scroll实现</title>
</head>
<body>
<div
id="conten"
style="height: 500px; overflow-y: scroll; background-color: aqua"
>
<!-- 外层容器(高度为所有数据都展示的高度,用来撑起容器,展示滚动条) -->
<div style="height: 50000px">
<ul id="uul" style="text-decoration: none"></ul>
</div>
</div>
<script>
const list = new Array(Math.floor(500 / 50) + 4)
.fill(1)
.map((item, index) => index);
const total = new Array(1000).fill(1).map((item, index) => index);
// 初始展示首屏数据,多展示几条保证快速滑动能看到数据
init(list);
function init(arr, offset = 0) {
uul.innerHTML = "";
arr.forEach((item) => {
const li = document.createElement("li");
li.style = `text-align:center;height:50px;border:1px solid red;box-sizing: border-box;`;
li.innerHTML = item + 1;
uul.appendChild(li);
});
// 这里因为内容被滚动到上面去了,所以往下平移
uul.style = `transform:translateY(${offset}px)`;
}
conten.addEventListener("scroll", (e) => {
const top = e.target.scrollTop;
const num = Math.floor(top / 50);
// 截取要展示的数据
const newList = total.slice(num, num + Math.floor(500 / 50) + 4);
// 计算出偏移量
const offset = top - (top % 50);
init(newList, offset);
});
</script>
</body>
</html>
虚拟列表监听scroll实现
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 使用 vue-seamless-scroll 来实现最终效果 1、安装 2、引入 3、使用
- 参考链接 Unity UGUI 之 Scroll View 使用 Unity UGUI 利用Scroll Vie...
- 我也不知道这种css效果的专业术语是什么,就如标题这么叫吧。。。 1、前言 在h5开发的过程中,轮播图下面放个类目...
- 在一些特殊的UI设计中,需要点击某一处然后弹出下拉菜单列表进行交互。下面介绍一种比较简单的实现方法: wxml文件...