infinite auto load more & infinite scroll & load more
infinite auto load more & infinite scroll & load more
https://codepen.io/xgqfrms/pen/NZVvGM
autoScrollLoadMore(dom = ``, callback = () => console.log(`scroll load more, cb`)) {
// let box = document.querySelector(`[data-dom="outbox"]`);
let box = document.querySelector(dom);
log(`box =`, box);
log(`box.clientHeight =`, box.clientHeight);
log(`box.scrollHeight =`, box.scrollHeight);
log(`box.scrollTop =`, box.scrollTop);
if (box) {
let onceFlag = box.dataset.flag || false;
if (!onceFlag) {
box.dataset.flag = true;
box.addEventListener(`scroll`, (e) => {
let {
clientHeight: ch,
scrollHeight: sh,
scrollTop: st,
} = e.target;
// let ch = e.target.clientHeight;
// let sh = e.target.scrollHeight;
// let st = e.target.scrollTop;
// log(`ch =`, ch);
// log(`sh =`, sh);
// log(`st =`, st);
// log(`(sh - st) =`, (sh - st));
// log(`(ch - 50) =`, (ch + 10));
let trigger = (sh - st) < (ch + 10) ? true : false;
log(`trigger =`, trigger);
if (trigger && this.isTriggerOnce) {
alert(`trigger loadMore function!`);
this.isTriggerOnce = false;
// fetch data
// callback();
setTimeout(() => {
// alert(`Ajax & fetch data success!`);
this.isTriggerOnce = true;
}, 1000);
} else {
// do nothing
// log(`(sh - st) =`, (sh - st));
// log(`(ch - 50) =`, (ch + 10));
}
});
} else {
log(`only bind once!`);
}
} else {
// error
error(`box is null!`);
}
},
"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"]`);
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
log(`box.clientHeight =`, box.clientHeight);
log(`box.scrollHeight =`, box.scrollHeight);
log(`box.scrollTop =`, box.scrollTop);
box.addEventListener(`scroll`, (e) => {
// log(`e =`, e);
// log(`e.target =`, e.target);
// clientHeight, offsetHeight, scrollHeight
let ch = e.target.clientHeight;
// let ch = 50;
// let cw = e.target.clientWidth;
// let oh = e.target.offsetHeight;
// let ow = e.target.offsetWidth;
let sh = e.target.scrollHeight;
let st = e.target.scrollTop;
let trigger = (sh - st) < (ch + 10) ? true : false;
// 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 - st) =`, (sh - st));
// log(`(ch - 50) =`, (ch + 50));
// log(`triggerValue =`, triggerValue);
}
});
// 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;
// log(`px =`, px);
// log(`py =`, py);
let sx = e.screenX;
let sy = e.screenY;
// log(`sx =`, sx);
// log(`sy =`, sy);
let cx = e.clientX;
let cy = e.clientY;
// log(`cx =`, cx);
// log(`cy =`, cy);
let lx = e.layerX;
let ly = e.layerY;
// log(`lx =`, lx);
// log(`ly =`, ly);
let mx = e.movementX;
let my = e.movementY;
// log(`mx =`, mx);
// log(`my =`, my);
let ox = e.offsetX;
let oy = e.offsetY;
// log(`ox =`, ox);
// log(`oy =`, oy);
});
};
window.addEventListener("DOMContentLoaded", (event) => {
console.log("DOM fully loaded and parsed");
scrollBottomAutoLoadMore();
});
// export default scrollBottomAutoLoadMore;
// export {
// scrollBottomAutoLoadMore,
// };
vue-infinite-scroll
https://github.com/ElemeFE/vue-infinite-scroll
https://www.npmjs.com/package/vue-infinite-scroll
https://segmentfault.com/a/1190000011693433
v-infinite-scroll
https://github.com/dflourusso/v-infinite-scroll
https://www.npmjs.com/package/v-infinite-scroll
http://dflourusso.com.br/v-infinite-scroll/
refs
xgqfrms 2012-2020
www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有️xgqfrms, 禁止转载 ️,侵权必究️!
infinite auto load more & infinite scroll & load more的更多相关文章
- Oozie时出现org.apache.oozie.service.ServiceException: E0103: Could not load service classes, Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
不多说,直接上干货! 问题详情 查看你的$OOZIE_HOME/logs 我的是/home/hadoop/app/oozie-4.1.0-cdh5.5.4/logs/oozie.log文件 [hado ...
- pytorch------cpu与gpu load时相互转化 torch.load(map_location=)
将gpu改为cpu时,遇到一个报错: RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is ...
- Multipath TCP and load balancers
Load balancers play a very important role in today’s Internet. Most Internet services are provided b ...
- PELT(Per-Entity Load Tracking)
引言 对于Linux内核而言,做一款好的进程调度器是一项非常具有挑战性的任务,主要原因是在进行CPU资源分配的时候必须满足如下的需求: 1.它必须是公平的 2.快速响应 3.系统的throughput ...
- Cocos Creator 资源加载流程剖析【三】——Load部分
Load流程是整个资源加载管线的最后一棒,由Loader这个pipe负责(loader.js).通过Download流程拿到内容之后,需要对内容做一些"加载"处理.使得这些内容可以 ...
- Category、load、initialize 源码讲解
今天深圳天气有暴风雨,没有事情干,趁着周末和平常晚上写一篇关于Category知识的梳理!可能针对平常只会知道些category基本结论知道的人有些帮助,写这篇博客会按照下面的目录结合实例以及Cate ...
- js load more select
js load more select searchable scroll load more append to list refs xgqfrms 2012-2020 www.cnblogs.co ...
- jq方法中 $(window).load() 与 $(document).ready() 的区别
通过自学进入了前端的行列,只知道在js中,一开头就写一个: window.onload = function(){ //doing sth} 然后所有的乱七八糟的代码全塞里面,大概知道window.o ...
- $.load()的用法
jquery load 事件用法 jquery load 事件用法 如果绑定给window对象,则会在所有内容加载后触发,包括窗口,框架,对象和图像.如果绑定在元素上,则当元素的内容加载完毕后触发. ...
随机推荐
- 记一次压测问题定位:connection reset by peer,TCP三次握手后服务端发送RST_网络_c359719435的专栏-CSDN博客 https://blog.csdn.net/c359719435/article/details/80300433
记一次压测问题定位:connection reset by peer,TCP三次握手后服务端发送RST_网络_c359719435的专栏-CSDN博客 https://blog.csdn.net/c3 ...
- SDS——动态字符串
Redis中简单动态字符串sds数据结构与API相关文件是:sds.h, sds.c. SDS本质上就是char *,因为有了表头sdshdr结构的存在,所以SDS比传统C字符串在某些方面更加优秀,并 ...
- Prometheus+Grafana监控SpringBoot
Prometheus+Grafana监控SpringBoot 一.Prometheus监控SpringBoot 1.1 pom.xml添加依赖 1.2 修改application.yml配置文件 1. ...
- Struts 2学习(二)
文章目录 @[toc] #动态结果 配置时不知道执行后的结果是哪一个,运行时才知道哪个结果作为视图显示给用户. #全局结果 全局就结果可满足一个包中多个Action共享一个结果. 全局结果位于pack ...
- python--可迭代对象、迭代器和生成器
迭代器 1.什么是迭代器? 不依赖于索引的取值方式 迭代是一个重复的过程,即每一次重复为一次迭代,并且每次迭代的结果都是下一次迭代的初始值 示例: str1 = 'abcde' count = 0 w ...
- Spring集成swagger步骤(包含Header)
1.添加依赖,2.4.0: <dependency> <groupId>io.springfox</groupId> <artifactId>sprin ...
- git从安装到多账户操作一套搞定(一)入门使用
作者:良知犹存 转载授权以及围观:欢迎添加微信:Allen-Iverson-me-LYN 总述 GIT是当今热门代码管理技术,但是如此火的系统,竟然是大神林纳斯花了两周用C写出来的一个分布式版 ...
- PAT甲级—暴力搜索
1091 Acute Stroke (30point(s)) 基础的搜索,但是直接用递归会导致段错误,改用队列之后就不会了,这说明递归调用在空间利用率上还是很吃亏的. #include <cst ...
- hdu2049 不容易系列之(4)——考新郎(组合,错排)
题意: n 个数中 m 个数错排的情况个数. 思路: 先从 n 个数中选出 m 个,即 $C_n^m$, 再算出 m 个数的错排数,即 ${f_{\left( m \right)}}$. 错排: 当n ...
- 【poj 1061】青蛙的约会(数论--拓展欧几里德 求解同余方程)
题意:已知2只青蛙的起始位置 a,b 和跳跃一次的距离 m,n,现在它们沿着一条长度为 l 的纬线(圈)向相同方向跳跃.问它们何时能相遇?(好有聊的青蛙 (΄◞ิ౪◟ิ‵) *)永不相遇就输出&quo ...