scrollTop + clientHeight = scrollHeight

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回答
好帮手慕星星 2019-08-01 10:56:38

同学你好,

1、获取浏览器视口高度用的属性错误,应该是clientHeight,如下:

http://img1.sycdn.imooc.com//climg/5d4253e90001ae1d06740050.jpg

offsetWidth是获取页面高度的,document.body.scrollHeight和document.documentElement.offsetHeight一样,按照上面修改之后判断就没有问题了。

2、document.documentElement.offsetHeight;放到scroll事件外内声明值不一样的原因:

因为ajax是异步操作,将获取页面高度放在scroll事件外面,数据还没有加载到页面中就获取了,只是一部分高度,不是全部的。将获取页面高度放在scroll事件里面,数据加载进来了再获取就是页面的高度了。

自己可以测试理解下,祝学习愉快!

欢迎采纳~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.WebAPP开发与小程序
  • 参与学习           人
  • 提交作业       622    份
  • 解答问题       6815    个

微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师