我是头部
我是尾部
会得到这样一个网页,头部底部固定,中间部分可滑动
接下来,我们来监听ul的滚动事件
list.addEventListener(“scroll”, function () {
//这里可以获取到ul距离屏幕顶部的距离,每次滚动都会刷新
console.log(this.scrollTop);
})
来做一个分析,接下来不要着急写代码
看到这个图,我们就知道要做什么了
//ul的高度 不变的 定死的
let listH = list.clientHeight;
//所有li总高度
let contentH = this.childNodes.length * 41;
//差值
let diffValue = contentH - listH;
//距离视窗还有50的时候,开始触发;
if (this.scrollTop + 50 >= diffValue) {
console.log(‘该加载了…’)
getData();
}
上滑加载完美实现,当我滑到快到最后一个li的时候,触发获取数据的方法
我们再添加一个节流阀,不让它无限加载。
function getData() {
var html = ‘’;
for (var i = 0; i < 20; i++) {
html += ‘
- 我是第’ + (i + 1) + ‘个li
- ’;
}
var length = list.children.length;
if (length === 0) {
list.innerHTML = html;
} else if(length > 0 && length < 100){
//html是字符串
var newHtml = parseDom(html);
//后面插入元素
insertAfter(newHtml, list.children[length - 1]);
}else if(length === 100){
console.log(“已经到底了,别拉了”);
}
}
这里有两个非常重要的方法,都是原生js操作
1.字符串dom化
//字符串dom化
function parseDom(arg) {
var objEle = document.createElement(“div”);
objEle.innerHTML = arg;
return […objEle.childNodes];
};
2.在已有元素后面插入元素
//在已有元素后面插入元素
function insertAfter(newElement, targetElement) {
newElement.forEach(element => {
//在后面插入元素 after:js新的dom api
targetElement.after(element)
});
return
}
下拉加载
通过判断ul的scrollTop值,当ul的scrollTop === 0的时候,触发
添加到监听滚动事件里,加一些样式操作即可
有些许粗糙,功能为主,见谅见谅
if(this.scrollTop === 0){
list.style.top = “80px”;
loading.style.top = “40px”;
//刷新数据
setTimeout(()=>{
loading.style.top = “0”;
list.style.top = “40px”;
},1000)
}
Document 我是头部
加载中......已加载全部数据我是尾部