scrollTop + clientHeight = scrollHeight
(function ($) { var htmlItem = "<li class='category-item'>" + "<img class='item-icon' src=$url />" + "<p class='item-name'>$name</p>" + "</li>"; function getHead() { $.ajax({ url: "../../JS/json/head.json", dataType: "json", type: "get", success: function (data) { if (data.msg === "成功") { console.log(data) var itemlist = "" var data = data.data.primary_filter.splice(0, 10); data.forEach((item, index) => { var str = htmlItem .replace("$url", item.url) .replace("$name", item.name) itemlist += str }); console.log(itemlist) $(".category").append($(itemlist)) } } }) } getHead() var homelist = "<li class='homelist-item'><img class='homelist-item-img' src=$url />" + "<div class='word'>" + "<h3 class='word-title'>$title</h3>" + "<div class='word-discrpt'><div class='word-discrpt-l'><div class='word-star'>评分:$star</div><div class='word-sales'>月销:$sales</div></div><div class='word-distance'>$time | $distance</div></div>" + "<div class='word-money'>$money</div>" + "<ul class='word-active'>$active</ul>" + "</div>" + "</li>" var discounts = "<li class='word-active-item'><img class='word-active-img' src=$icon_url /><p class='word-active-info'>$info</p>" var page = 0; var isLoading = false function getList() { page = page + 1; isLoading = true; $.ajax({ url: "../../JS/json/homelist.json", dataType: "json", type: "get", success: function (data) { if (data.msg === "成功") { console.log(data) var itemlist = "" var data = data.data.poilist || [] data.forEach((item, index) => { if (item.month_sale_num >= 1000) { var sale_num = "999+" } else { sale_num = item.month_sale_num } var active = "" item.discounts2.forEach((i, j) => { var src = discounts .replace("$icon_url", i.icon_url) .replace("$info", i.info) active += src }) var str = homelist .replace("$url", item.pic_url) .replace("$title", item.name) .replace("$star", item.wm_poi_score) .replace("$sales", sale_num) .replace("$time", item.mt_delivery_time) .replace("$distance", item.distance) .replace("$money", item.min_price_tip) .replace("$active", active) itemlist += str }); /* console.log(itemlist) */ $(".list").append($(itemlist)) isLoading = false } } }) } getList() var clientHeight = document.documentElement.offsetHeight; function addEvent() { window.addEventListener('scroll', function () { var scrollTop = document.body.scrollTop || document.documentElement.scrollTop; var scrollHeight = document.body.scrollHeight; var proDis = 0; console.log(scrollTop + "+" + clientHeight + "=" + (scrollTop + clientHeight) + ">=" + (scrollHeight - proDis)) if ((scrollTop + clientHeight) >= (scrollHeight - proDis)) { if (page < 4) { if (isLoading) { return; } getList() } } }) } addEvent() })(jQuery)
scrollTop + clientHeight = scrollHeight
按道理来说,scrollTop + clientHeight 应该等于 scrollHeight,为什么我把页面拉到最下面,scrollTop + clientHeight 比 scrollHeight还要小1000多,是什么原因呢?跟rem的设置有关系吗?
还有,我如果把var clientHeight = document.documentElement.offsetHeight;放到scroll事件内来声明的话,他的值就和body的高一摸一样,放在外面的就是对的,这是什么情况呢
正在回答 回答被采纳积分+1
同学你好,
1、获取浏览器视口高度用的属性错误,应该是clientHeight,如下:
offsetWidth是获取页面高度的,document.body.scrollHeight和document.documentElement.offsetHeight一样,按照上面修改之后判断就没有问题了。
2、document.documentElement.offsetHeight;放到scroll事件外内声明值不一样的原因:
因为ajax是异步操作,将获取页面高度放在scroll事件外面,数据还没有加载到页面中就获取了,只是一部分高度,不是全部的。将获取页面高度放在scroll事件里面,数据加载进来了再获取就是页面的高度了。
自己可以测试理解下,祝学习愉快!
欢迎采纳~
- 参与学习 人
- 提交作业 622 份
- 解答问题 6815 个
微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星