js:基于原生js的上啦下啦刷新功能
链接:https://www.jianshu.com/p/a8392115e6f0演示地址:http://wonghan.cn/iscroll-demo/html:<body>
<div id="app">
<header id="header">
<input type="text" id="input">
<input type="submit" id="submit">
</header>
<article id="article">
<ul id="ul">
<li class="li" id="text">下拉刷新</li>
<li class="li">1</li>
<li class="li">2</li>
<li class="li">3</li>
<li class="li">4</li>
<li class="li">5</li>
<li class="li">6</li>
<li class="li">7</li>
<li class="li">8</li>
<li class="li">9</li>
<li class="li">10</li>
</ul>
</article>
</div>
</body>
css:
#article{
overflow: scroll;
position: relative;
}
#ul{
position: absolute;
}
上拉加载:
let ul = document.getElementById('ul'); // 获取ul列表
let div = document.getElementById('article') // 获取包裹ul列表的div(css: overflow:scroll;)
let num = 11; // 要添加的li文本,可自定义
let isLoad = false; // 节流阀辅助变量
// 添加li的方法,可自定义
function addLi() {
let fragment = document.createDocumentFragment();
for(let i=0;i<10;i++) {
let li = document.createElement('li');
li.className = 'li';
li.innerHTML = num++;
fragment.appendChild(li); // 用DocumentFragment提高渲染速度
}
ul.appendChild(fragment);
}
// 上拉加载
div.addEventListener('scroll',function(){
if(div.scrollHeight-div.scrollTop<1000 && isLoad===false) {
isLoad = true;
addLi();
setTimeout(function(){
isLoad = false;
},300) // 节流阀
}
},false);
js:下拉刷新:
let ul = document.getElementById('ul'); // 获取ul列表
let div = document.getElementById('article') // 获取包裹ul列表的div(css: overflow:scroll;)
let text = document.getElementById('text'); // 写着“下拉刷新”的元素
let start; // 辅助变量:触摸开始时,相对于文档顶部的Y坐标
let refresh = false; // 辅助变量:是否刷新
div.addEventListener('touchstart',function(event){
let touch = event.touches[0];
start = touch.pageY; // 辅助变量:触摸开始时,相对于文档顶部的Y坐标
},false);
div.addEventListener('touchmove',function(event){
// 下拉刷新
let touch = event.touches[0];
if(div.scrollTop<=0){
// 如果ul列表到顶部,修改ul列表的偏移,显示“下拉刷新”,并准备触发下拉刷新功能,可自定义
ul.style.top = ul.offsetTop + touch.pageY - start +'px'; // ul.style.top = ul.offsetTop + 'px'
start = touch.pageY;
// 若ul偏移量过大,则修改文字,refresh置为true,配合'touchend'刷新
if(ul.offsetTop>=100) {
text.innerHTML = "释放刷新";
refresh = true;
}
}
},false);
div.addEventListener('touchend',function(event){
// 若'touchend'时,ul偏移,用setInterval循环恢复ul的偏移量
if(ul.offsetTop>=0) {
let time = setInterval(function(){
ul.style.top = ul.offsetTop -3 +'px';
// 若ul的偏移量恢复,clearInterval
if(ul.offsetTop<=0){
clearInterval(time);
text.innerHTML = "下拉刷新";
// 若恢复时'refresh===true',刷新页面
if(refresh){
location.reload();
}
}
})
}
},false);
js:基于原生js的上啦下啦刷新功能的更多相关文章
- 基于原生JS封装数组原型上的sort方法
基于原生JS封装数组原型上的sort方法 最近学习了数组的原型上内置方法的封装,加强了用原生JS封装方法的能力,也进一步理解数组方法封装的过程,实现的功能.虽然没有深入底层,了解源码.以下解法都是基于 ...
- 用jQuery基于原生js封装的轮播
我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...
- 基于原生JS的jsonp方法的实现
基于原生JS的jsonp方法的实现 jsonp,相信大家并不陌生,是在js异步请求中解决跨域的方法之一,原理很简单,有不清楚的同学可以google下,这里就补详细解释了.在Jquery库中,jQuer ...
- 原生js实现简单的下拉刷新功能
前言: 我们在浏览移动端web页面的时候,经常会用到下拉刷新. 现在我们用原生的js实现这个非常简单的下拉刷新功能. (温馨提示:本文比较基础,功能也很简单.写的不好的地方,希望大神提点一二.) 一. ...
- 基于原生js的图片延迟加载
当页面图片比较多的时候,我们通常会做一个延迟加载,避免页面打开时一下子的请求数太多,加载过慢影响用户体验. 如果项目用了jquery框架,则可以直接用 jquery.lazyload.可在jquery ...
- 基于原生js的返回顶部组件,兼容主流浏览器
基于原生js的返回顶部插件,兼容IE8及以上.FF.chrome等主流浏览器. js文件中封装了getScrollTop()和changeScrollTop()函数分别用于获取滚动条滚动的高度和修改滚 ...
- 再谈React.js实现原生js拖拽效果
前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目 ...
- 基于SwiperJs的H5/移动端下拉刷新上拉加载更多的效果
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
- 基于SwiperJs的H5/移动端下拉刷新上拉加载更多
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
随机推荐
- [R] [Johns Hopkins] R Programming 作業 Week 2 - Air Pollution
Introduction For this first programming assignment you will write three functions that are meant to ...
- attr跟prop的区别:
prop()函数的结果: 1.如果有相应的属性,返回指定属性值. 2.如果没有相应的属性,返回值是空字符串. attr()函数的结果: 1.如果有相应的属性,返回指定属性值. 2.如果没有相应的属性, ...
- dbca建库--linux上使用vnc图形化安装oracle10g版本
选择创建数据库 配不配置em,自己决定,我们选择配置 配置下面账户密码,在项目中,下面账户肯定是不相同的,我们这里输入相同的,密码为oracle10g 选择文件系统存放(asm和字符设备暂时不能存放) ...
- jdk1.8api帮助文档,转载
链接:https://pan.baidu.com/s/1jkDC68t6ha3PrSbx2BMevQ 密码:o425 转自https://blog.csdn.net/weixin_37012881/a ...
- FPGA Asynchronous FIFO设计思路(2)
FPGA Asynchronous FIFO设计思路(2) 首先讨论格雷码的编码方式: 先看4bit的格雷码,当MSB为0时,正向计数,当MSB为1时,即指针已经走过一遍了,最高位翻转,此时的格雷码是 ...
- 面向对象:静态属性,静态方法,组合,继承,衍生,继承之mro线性顺序列表,面向对象综合实例
1.静态属性(附有装饰器) class Room: def __init__(self,name,owner,width,length,height): self.name=name self.own ...
- 黄聪:微信h5支付demo微信H5支付demo非微信浏览器支付demo微信wap支付
一.首先先确定H5支付权限已经申请! 二.开发流程 1.用户在商户侧完成下单,使用微信支付进行支付 2.由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB ...
- Charles更新至4.2.8特别版
下载地址:链接:https://pan.baidu.com/s/1c2wXdBE 提取码:g7qc 更多工具/教程可进入Q群:测试技术学习小组 478717918
- @RequestParam、@ReqeustBody、@ReponseBody认识
简介: @RequestParam和@RequestBody均是处理request body部分的注解,都用于获取请求部分的参数. @ResponseBody是用于响应部分的注解 1. @Reques ...
- NodeJs Fs模块
和前面的Http.Url模块一样,Fs模块也是node的核心模块之一,主要用于对系统文件及目录进行读写操作. 基本方法 fs.stat fs.stat可以用来判断是文件还是目录:stats.isFil ...