back to top & back to bottom

infinite auto load more & infinite scroll & load more

https://codepen.io/xgqfrms/pen/NZVvGM

"use strict";

/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
*
* @description scrollBottomAutoLoadMore
* @augments
* @example
* @link
*
*/ // utils
let log = console.log;
let error = console.error; let box = document.querySelector(`[data-dom="outbox"]`); // bottom: 556.59375
// height: 525.59375
// left: 135
// right: 405
// top: 31
// width: 270
// x: 135
// y: 31 // height: 525.59375 ~= 526
// ch = 526 // 1562 - 1036 = 526
// sh = 1562
// st = 1036 // ch = 526
// cw = 253
// oh = 526
// ow = 270
// sh = 1562
// sw = 253
// st = 1036 let isTriggerOnce = true; const scrollBottomAutoLoadMore = (debug = false) => {
for (let i = 0; i < 20; i++) {
let template = `<div class="innerbox" data-dom="innerbox">${i + 1}</div>`;
box.insertAdjacentHTML(`beforeend`, template);
}
let BoundingClientRect = box.getBoundingClientRect();
let ClientRects = box.getClientRects();
// log(`BoundingClientRect =`, BoundingClientRect);
// log(`ClientRects`, ClientRects);
// Event
box.addEventListener(`scroll`, (e) => {
// log(`e =`, e);
// log(`e.target =`, e.target);
// clientHeight, offsetHeight, scrollHeight
let ch = e.target.clientHeight;
let cw = e.target.clientWidth;
// log(`ch =`, ch);
// log(`cw =`, cw);
let oh = e.target.offsetHeight;
let ow = e.target.offsetWidth;
// log(`oh =`, oh);
// log(`ow =`, ow);
let sh = e.target.scrollHeight;
let sw = e.target.scrollWidth;
// log(`sh =`, sh);
// log(`sw =`, sw);
let st = e.target.scrollTop;
// log(`st =`, st);
let trigger = (sh - st) < (ch + 50) ? true : false;
let triggerValue = (sh - st) < (ch + 50);
if (trigger && isTriggerOnce) {
alert(`trigger loadMore function!`);
isTriggerOnce = false;
for (let i = 0; i < 10; i++) {
let template = `<div class="innerbox" data-dom="innerbox">${i + 1}</div>`;
box.insertAdjacentHTML(`beforeend`, template);
}
setTimeout(() => {
alert(`Ajax & fetch data success!`);
isTriggerOnce = true;
}, 1000);
} else {
// do nothing
// log(`sh =`, sh);
// log(`st =`, st);
// log(`ch =`, ch);
log(`(sh - st) =`, (sh - st));
log(`(ch - 50) =`, (ch + 50));
log(`triggerValue =`, triggerValue);
} // clientHeight: 526
// clientWidth: 346 // offsetHeight: 526
// offsetLeft: 182
// offsetTop: 31
// offsetWidth: 363 // scrollHeight: 1562
// scrollLeft: 0
// scrollTop: 1036
// scrollWidth: 346
});
// MouseEvent
box.addEventListener(`click`, (e) => {
// log(`e =`, e);
// log(`e.target =`, e.target);
// pageX, pageY, screenX, screenY, clientX, and clientY
let px = e.pageX;
let py = e.pageY;
// let sx = e.screenX;
// let sy = e.screenY;
// let cx = e.clientX;
// let cy = e.clientY;
log(`px =`, px);
log(`py =`, py);
let lx = e.layerX;
let ly = e.layerY;
let mx = e.movementX;
let my = e.movementY;
let ox = e.offsetX;
let oy = e.offsetY;
});
}; window.addEventListener("DOMContentLoaded", (event) => {
console.log("DOM fully loaded and parsed");
scrollBottomAutoLoadMore();
}); // export default scrollBottomAutoLoadMore; // export {
// scrollBottomAutoLoadMore,
// };

https://developer.mozilla.org/en-US/docs/Web/API/Window/scroll

https://zzk.cnblogs.com/my/s/blogpost-p?Keywords=scroll

refs



xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有️xgqfrms, 禁止转载 ️,侵权必究️!


最新文章

  1. 【HOW】如何手工编辑InfoPath文件
  2. c# 中的多线程和异步
  3. Zend Guard Run-time support missing问题的解决
  4. struts2中action中的通配符
  5. 2010山东省第一届ACM程序设计竞赛
  6. Mcafee两个Mac版本之间的区别
  7. hdu 3518 Boring counting 后缀数组LCP
  8. POJ_3046_Ant_Counting_(动态规划,多重集组合数)
  9. bzoj 1223: [HNOI2002]Kathy函数 数位DP 高精度
  10. Linux学习之停止进程
  11. jdbc操作步骤和preparedStatment相比Statment的好处
  12. JavaScript—DOM操作
  13. A - Space Elevator(动态规划专项)
  14. 如何开发基于Dubbo RPC的分布式服务?
  15. Ext.NET webform
  16. 【svn】本地文件夹同步到SVN
  17. web前端异步数据交互(长连接)
  18. (14)线程- Event事件和守护线程Daemon
  19. Thread + 匿名内部类
  20. Kali系列之hydra ssh密码爆破

热门文章

  1. 用Jenkins构建Django持续集成环境
  2. python基础学习2 函数变量与赋值
  3. Geoserver+Openlayers+MySQL设计思想,GeoServer服务器搭建(Docker构建镜像)
  4. dedecms后台更新网站栏目无反应的解决方法
  5. VS CODE远程办公篇一
  6. P4755 Beautiful Pair (分治 + 主席树)
  7. java——字符串常量池、字符串函数以及static关键字的使用、数组的一些操作函数、math函数
  8. CodeForces - 721D 贪心+优先队列(整理一下优先队列排序情况)
  9. Codeforces Round #479 (Div. 3) D. Divide by three, multiply by two (DFS)
  10. UWP(一)开发入门