下拉加载例子

最近接到一个需求,需要实现列表下拉加载。之前的开发多是使用第三方的插件实现,由于历史原因,该项目使用了Jquery进行开发,借此实现一个下拉加载的小例子。

直接上代码:

  • html 部分
<ul class="ul">
</ul>
  • css部分
.ul {
	border: 1px solid red;
	height: 300px;
	width: 100%;
	background: yellow;
	overflow-y: scroll;
	box-sizing:border-box;
}

li {
	height: 50px;
	background: blue;
	width: 100%;
	display: flex;
	justify-content: space-around;
	line-height: 50px;
	box-sizing:border-box;
	border: 1px solid green;
}
  • js部分(重要)
$(function () {

	let data = new Array(10).fill({ name: "leo", age: 12, starts: 1000 }); // 初始数据

	// 遍历,向Ul添加dom
	$.each(data, function (i, item) {
		$("ul").append(
			"<li class='li'>"
			+ "<p>" + item.name + "</p>"
			+ "<p>" + item.age + Number(i + 1) + "</p>"
			+ "<p>" + item.starts + "</p>" +
			"</li>");
	});

	let isLoad = false; // 防止多次下拉加载,定义一个开关

	$("ul").scroll(function () {

		if (isLoad) {
			return;  // 为true直接返回
		}

		let ulH = $("ul").height(); // dom高度
		let scrollTop = $("ul").scrollTop(); // 滚动距离
		let scrollHeight = document.querySelector("ul").scrollHeight; // 滚动高度
		
		// 下拉加载的核心:当滚动垂直距离+可视区高度>滚动的高度计数且isLoad为false 执行方法
		if (scrollTop + ulH >= scrollHeight && !isLoad) {
			isLoad = true;
			// 添加 loading
			$("ul").append("<li class='myloading'>正在加载.......</li>");
			// 模拟ajax请求
			setTimeout(() => {
				// 关闭限制
				isLoad = false;
				$(".ul").find(".myloading").remove();
				$.each(data, function (i, item) {
					$("ul").append(
						"<li class='li'>"
						+ "<p>" + item.name + "</p>"
						+ "<p>" + item.age + Number(i + 1) + "</p>"
						+ "<p>" + item.starts + "</p>" +
						"</li>");
				});
			}, 1000);
		}
	});
});

至此,我们就实现了一个下拉加载的小例子。如有错误,可及时联系。如果有帮助到你,还请不啬点赞~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值