需求:在APP落地页上的底部位置显示此前其他用户的购买记录,要求此div盒子只显示3条半,但一页有10条,div内的滑动条滑到一页底部自动加载下一页并发加载埋点。
实现:首先理解三个概念,分别是contentH,viewH,scrollTop。
contentH:即所要滑动的元素内容的高度,包括可见部分以及滚动条下面的不可见部分。
ViewH:即我们看到的这个DIV的高度,不包括可见部分也不包括滚动条下面的不可见部分。
scrollTop:即滚动条距离顶部的距离,若scrollTop的值为0,则代表滚动条在最上面。拉动滚动条,从最上面到最下面,变化的是scrollTop的值。例:假如contentH的高度为2000,而这个DIV的高度只有300,那么还有1700不可见,拉动滚动条到最底部,此时scrollTop为1700,所以这个1700也可以理解为滚动条可以滚动的长度。当滑动条拉到底部的时候,contentH=viewH+scrollTop。
故可实现如下:
$.ajax({ type: "get", url: "record.json",//测试用假数据 dataType: "json", success: function (records) { var showLength = records.data.length;//需要显示的总长度 var flag = showLength <= 10 "SJCGBS-10030"});//不论长度是否超过10都发送第一页埋点 if (showLength > 10) { var origin = 1, load = 2; $('.records_body').scroll(function () { var contentH = $(this).get(0).scrollHeight; var viewH = $('.records_body').height(); var scrollTop = $(this).scrollTop(); var pages = Math.ceil(showLength / 10);//需要显示的总页数 if (viewH + scrollTop == contentH && load <= pages) { if (load * 10 < showLength) { load_records(origin++ * 10, load++ * 10);//加载下一页的10条数据 hxmClickStat('mar_all_207_ssjk.goumai.load.' + origin, {url_ver: "SJCGBS-10030"});//滑动到底部开始加载下一页时发送埋点 } else { load_records(origin * 10, showLength);//加载最后一页 hxmScrollBottomStat('mar_all_207_ssjk.goumai.bottom', {url_ver: "SJCGBS-10030"});//最后一页发送埋点 load++;//避免重复执行 } } }); } function load_records(start, end) { for (var i = start; i < end; i++) { var stime = records.data[i].time; var accure_time = stime.slice(5, stime.length); var record_html = '<div class="records_item"><img src=' + records.data[i].avatar + ' class="avatar"/><div class="buyer_info"><p class="buyer_name">' + records.data[i].account + '</p><p class="status_title">购买成功</p></div>\n\<' + 'div class="buyer_address"><p class="buy_address">' + records.data[i].city + ' IP:' + records.data[i].ip + '</p>\n\<' + 'p class="buy_time">' + accure_time + '</p></div></div>'; $(record_html).appendTo('.records_body');//插入一条购买记录 } } }, error: function () { console.log('some errors happened!'); } });
以上方法在苹果手机浏览器中会达不到预期效果,解决方法及代码改进
将触底判断条件更改为
if (viewH + scrollTop +1>= contentH && load <= pages)
究其原因,故在滚动时将scrollTop和viewH、contentH分别打印出来,滑到底部的时候发现他们有1个单位的误差,可能是因为某些div元素的高度不为整数而js在判断的时候直接将其取整了,故可以选择将其加1。
也可以使用另一种方式百分比的判断条件来实现:在滚动条距离底端2%以内:scrollTop / (contentH– viewH) >= 0.98。
或者使用绝对数值范围来实现,滚动条距离底端30px以内:contentH – viewH – scrollTop <= 30。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新动态
- 魔兽世界wlk暗牧一键输出宏是什么 wlk暗牧一键输出宏介绍
- 群星.1996-红不让台语原唱2辑【福和唱片】【WAV+CUE】
- 郭书瑶.2009-爱的抱抱(EP)【种子音乐】【FLAC分轨】
- 郑瑞芬.1989-BE.MY.BABY【现代】【WAV+CUE】
- 花钱请人每周放30万只不咬人的蚊子 防治登革热传播
- 饭制《第一后裔》丧尸版弗蕾娜
- 贝克汉姆亲临!2024FC品类游戏嘉年华圆满落幕
- 「命轨爻错之翼」风之翼发放说明
- 《原神》前瞻特别节目回顾长图
- 米游币抽抽乐-原神专场现已开启!
- 黑鸭子2001《风情中国HQCD》[日本版][WAV+CUE]
- 陈杰洲1990-成人礼[滚石][WAV+CUE]
- MarkAanderud-HandsFree(2024)[24-44,1]FLAC
- 孙露《观心》1:1母盘直刻限量版[低速原抓WAV+CUE][361M]
- 钟志刚《汽车DJ玩主》[低速原抓WAV+CUE][1G]