jquery随手做的一个滚动库 我称之为 idkScroll
/**
* 仅做到底自动刷新功能
* options: {
* page int 当前在第几页
* limit int 每页个数
* onBottom function 到底的回调
* whenEnd function 结束时的回调
* dontWait bool 不等待第一个回调执行完毕就可以执行第二个
* autoFull bool 是否在上一个回调执行完后自动定时再检测一次 这个与dontWait慎用
* delay int 上一个参数的时间(毫秒)
* toTop int 到元素下边框(不含)之前几像素就开始加载
* }
*/
class idkScroll {
constructor(node, { page = 0, limit = 10, onBottom = function () { }, whenEnd = function () { }, dontWait = false, autoFull = true, delay = 100, toTop = 0 } = {}) {
if (node.constructor === String) {
node = $(node).get(0);
}
this.node = node;
this.length = page * limit;
this.total = null;
this.limit = limit;
this.onBottom = onBottom;
this.whenEnd = whenEnd;
this.dontWait = dontWait;
this.autoFull = autoFull;
this.delay = delay;
this.toTop = toTop;
// 是否正在等待回复 当this.dontWait为true时忽略
this.waitForReturn = false;
let that = this;
this.proxyFunc = function () {
that.checkBottom.apply(that);
};
// 开始检测
this.scroll("on");
}
// 开启或关闭滚动检测(是否停止检测)
scroll(str) {
if (str == "on") {
// 开始检测
// 默认执行一遍
this.checkBottom();
// 开启滚动检测
$(document).scroll(this.proxyFunc);
}
if (str == "off") {
// 停止检测
$(document).off("scroll", this.proxyFunc);
}
}
// 检查是否到底
checkBottom() {
// 合理运用表达式排序和短路来减少时间复杂度(省不了多少)
// 只算实际高度+内边距
if (
// 没有加载完成为true 利用编程语言对或的短路来规避this.total没有值的情况
(this.total == null || this.length < this.total) &&
// 没有正在等待回应或开启了不等待模式为true
(!this.waitForReturn || this.dontWait) &&
// 窗口下边框之后this.toTop像素的高度大于等于元素下边框(不含)的高度为true
$(document).scrollTop() + $(window).height() + this.toTop >= $(this.node).offset().top + $(this.node).innerHeight()
) {
this.waitForReturn = true;
this.onBottom(Math.ceil(this.length / this.limit) + 1, this.limit, this.node, this);
}
}
// 回调的回调 代表加载完成,可以继续检测
end(length, total) {
if (!this.dontWait && !this.waitForReturn) {
return;
}
this.total = total;
this.length += length;
this.waitForReturn = false;
if (this.isEnd()) {
// 停止检测
this.scroll("off");
// 运行结束函数
this.whenEnd(this.node, this);
} else {
if (this.autoFull) {
// 小心处理异步this,setTimeout里的this将会被替换为globalThis
let that = this;
setTimeout(function () {
that.checkBottom.apply(that);
}, this.delay);
}
}
}
// 检查结束
isEnd() {
return this.length >= this.total;
}
}
// 实例
// 传入两个参数
// 一个是css选择器或者网页元素
// 一个是options选项
let idkscroll = new idkScroll("body", {
// 到元素的底部运行
onBottom: function () {console.log("bottom", arguments); idkscroll.end(1, 1)},
// 结束时运行
whenEnd: function () {console.log("end", arguments);},
// 每页两条数据
limit: 2,
// 窗口下边框之后toTop像素的高度大于等于元素下边框(不含)的高度就触发onBottom的函数
toTop: $(window).height()
});
console.log(idkscroll);
发这篇博客大部分是表达我还没死
jquery随手做的一个滚动库 我称之为 idkScroll的更多相关文章
- 学以致用:手把手教你撸一个工具库并打包发布,顺便解决JS浮点数计算精度问题
本文讲解的是怎么实现一个工具库并打包发布到npm给大家使用.本文实现的工具是一个分数计算器,大家考虑如下情况: \[ \sqrt{(((\frac{1}{3}+3.5)*\frac{2}{9}-\fr ...
- 你不需要 jQuery,但你需要一个 DOM 库
写这篇文章的目的,一方面是介绍一下自己编写的模块化 DOM 库 domq.js,另一方面是希望大家对 jQuery 有一个正确的认识,即使 jQuery 已经逐渐退出历史舞台,但是它的 API 将会以 ...
- jQuery 是javascript的一个库(常用插件、处理器)
jQuery校验官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery就是javascript的一个库,把我 ...
- 利用jquery+iframe做一个ajax上传效果
以下是自学it网--中级班上课笔记 网址:www.zixue.it html页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict ...
- 自定义Jquery插件——由于项目需要,对页面中过长的文本进行截取,鼠标移上去有一个title的提示,所以做了一个Jquery过长文本处理的插件
由于项目需要,对页面中过长的文本进行截取,鼠标移上去有一个title的提示,所以做了一个Jquery过长文本处理的插件下面是代码: // 掉用方式支持 $('select').textBeauty(1 ...
- 从开发属于你自己的第一个 Python 库,做一名真正的程序员「双语版」
你好,我是悦创.之前我在 CSDN 编写了一篇开发 Python 库的教程,有人加我提问到的一些问题,我来更新一下这篇文章:https://blog.csdn.net/qq_33254766/arti ...
- FullPage.js-基于 jQuery 的插件全屏滚动插件
fullPage.js 是一个基于 jQuery 的插件,它能够很方便.很轻松的制作出全屏网站.如今我们经常能见到全屏网站,尤其是国外网站.这些网站用几幅很大的图片或色块做背景,再添加一些简单的内容, ...
- 【转载】写一个js库需要怎样的知识储备和技术程度?
作者:小爝链接:https://www.zhihu.com/question/30274750/answer/118846177来源:知乎著作权归作者所有,转载请联系作者获得授权. 1,如何编写健壮的 ...
- 创建你的第一个JavaScript库
是否曾对Mootools的魔力感到惊奇?是否有想知道Dojo如何做到那样的?是否对jQuery感到好奇?在这个教程中,我们将了解它们背后的东西并且动手创建一个超级简单的你最喜欢的库. 我们其乎每天都在 ...
- 十二步创建你的第一个JavaScript库
是否曾对Mootools的魔力感到惊奇?是否有想知道Dojo如何做到那样的?是否对jQuery感到好奇?在这个教程中,我们将了解它们背后的东西并且动手创建一个超级简单的你最喜欢的库. 我们其乎每天都在 ...
随机推荐
- KEIL5、STM32CubeMX、STM32CubeIDE 下载、安装
一.资源下载 Keil5下载链接: https://www.keil.com/download/product/ STM32 标准库芯片包下载链接: https://www.keil.com/dd2/ ...
- 编程哲学之 C# 篇:005——"Hello,World!"
如第一章说明,程序员的创造能力最接近于神,那么从现在开始,让我们来开始愉快地创造世界吧! 用解决方案来管理我们的创作 运行我们安装好的Visual Studio(以后一般情况下都会简称为VS),如下图 ...
- 云萌 V2.6.3.0 win10,win11 Windows永久激活工具
Windows如果一直不激活,其实用起来问题也不大,除了无法修改壁纸.颜色.锁屏.主题以及无法使用微软账号的同步功能等之外,绝大多数的基本功能都可以正常使用.不过该激活还是得激活的.别的不说,就桌面右 ...
- mybatis学习日记2
1.mybatis中的连接池 配置的位置: 主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是用来表示采用何种连接方式 mybatis连接池提供了3种方式的配置 ...
- 关于联想对Jim博士的质疑
对Jim博士质疑的质疑 因为关注司马南,从他的空间里看到Jim博士和其龃龉,大致看了Jim博士头条里的文章,因为看到自己常用的EPICS,上午匆忙就写了上面的文. Jim博士是去年在头条上看到的,因为 ...
- JZOJ 2474. 【GDKOI 2021普及组DAY2】我的世界
题解 这题很明显发现一个点到另一个点,必然最多只有一个进入下界的点和一个出来的点 分类讨论入点和出点的位置 要么都在 \(u->lca\) 或都在 \(lca->v\) 或分别有一个 那就 ...
- CF1372D Omkar and Circle
题目传送门 思路 这是一道非常简单的 \(\mathcal *2100\). 既然他样例给的那么简单,说明这是一道结论题. 于是我们可以手玩几组数据试试. 例如 \(3,5,9,8,12\) 这组,发 ...
- OpenAI Chat completion API 入门指南
Chat completion API 入门指南 ChatGPT 由 OpenAI 最先进的语言模型 gpt-3.5-turbo 提供支持. 使用 OpenAI API,您可以使用 GPT-3.5-t ...
- node.js 中删除,修改等接口
1.首先是引入模块.闯将服务器,设置路由等 二.查询员工接口 三.添加员工接口 四.删除员工接口 五.修改员工接口
- 关于cnpm的卸载与重装
1.卸载原有旧的版本: npm uninstall -g cnpm --registry=https://registry.npm.taobao.org 2.注册模块镜像: npm set regis ...