本文实例为大家分享了Javascript下拉刷新的简单实现代码,供大家参考,具体内容如下

Html相关代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
</head>
<body style="background-color: beige;">
<div id="container" style="width:100%;border:solid 1px blue; transform:translate(0px,-61px)">
<div style="height:50px; line-height:50px; text-align:center; width:100%; border:solid 1px red;">
努力加载中...
</div>
<div style="width:100%; line-height:30px;background-color:#F2F2F2; font-size:17px; font-family:'Adobe Garamond Pro'">
下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新
下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新
下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉刷新下拉拉刷新下拉刷新
</div>
</div>
</body>
</html>
<!--JQuery是那么的好用,这种情况下怎么能没有它呢!-->
<script type="text/javascript" src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script>
JavaScript该做什么呢?
1、根据滑动轨迹动态调整滑块位置(transfrom=>translate);
2、根据滑动的距离判断是否执行刷新(或数据加载)。
当然,如果滑动结束后使用ajax重新加载页面数据,还将涉及到一个页面向上滑动并隐藏提示部分的效果。
大致思路:
(前提条件:当前元素已滑动至顶部)
1、当鼠标左键按下(移动设备上的touchstart事件)的时候记录下当前鼠标位置的 Y轴坐标;
2、当鼠标移动的时候(touchmove事件),记录下鼠标的Y 轴坐标判断滑动轨迹并进行相应的滑块移动;
3、当鼠标左键松开(touchend事件)的时候,通过对比鼠标开始和结束的Y轴坐标的距离判断是否应该刷新页面(或重新加载数据)。
上代码:
/*
*obj--滑动对象
*offset--滑动距离(当滑动距离大于等于offset时将调用callback)
*callback--滑动完成后的回调函数
*/
var slide = function (obj, offset, callback) {
var start,
end,
isLock = false,//是否锁定整个操作
isCanDo = false,//是否移动滑块
isTouchPad = (/hp-tablet/gi).test(navigator.appVersion),
hasTouch = 'ontouchstart' in window && !isTouchPad;
//将对象转换为jquery的对象
obj = $(obj);
var objparent = obj.parent();
/*操作方法*/
var fn =
{
//移动容器
translate: function (diff) {
obj.css({
"-webkit-transform": "translate(0," + diff + "px)",
"transform": "translate(0," + diff + "px)"
});
},
//设置效果时间
setTranslition: function (time) {
obj.css({
"-webkit-transition": "all " + time + "s",
"transition": "all " + time + "s"
});
},
//返回到初始位置
back: function () {
fn.translate(0 - offset);
//标识操作完成
isLock = false;
}
};
//滑动开始
obj.bind("touchstart", function (e) {
if (objparent.scrollTop() <= 0 && !isLock) {
var even = typeof event == "undefined" ? e : event;
//标识操作进行中
isLock = true;
isCanDo = true;
//保存当前鼠标Y坐标
start = hasTouch ? even.touches[0].pageY : even.pageY;
//消除滑块动画时间
fn.setTranslition(0);
}
});
//滑动中
obj.bind("touchmove", function (e) {
if (objparent.scrollTop() <= 0 && isCanDo) {
var even = typeof event == "undefined" ? e : event;
//保存当前鼠标Y坐标
end = hasTouch ? even.touches[0].pageY : even.pageY;
if (start < end) {
even.preventDefault();
//消除滑块动画时间
fn.setTranslition(0);
//移动滑块
fn.translate(end - start - offset);
}
}
});
//滑动结束
obj.bind("touchend", function (e) {
if (isCanDo) {
isCanDo = false;
//判断滑动距离是否大于等于指定值
if (end - start >= offset) {
//设置滑块回弹时间
fn.setTranslition(1);
//保留提示部分
fn.translate(0);
//执行回调函数
if (typeof callback == "function") {
callback.call(fn, e);
}
} else {
//返回初始状态
fn.back();
}
}
});
}
代码分析:
1、参数:obj,要滑动的对象;offset,提示部分的transform的值( 代码中是 transform:translate(0px,-61px) ,那么这里就是61 );callback,回调函数,在下拉完成后调用的函数( 页面刷新或数据加载 )。
2、为什么是transform不是margin?
因为transform不会引起重绘,相比margin更流畅,性能更好。但是transfrom有个比较好玩的地方,如果translateY的值为负数 (当前元素上移xx像素) 下方元素不会跟着上移 (margin会上移) ,在这点上它和margin是有区别的 。 注意,这里的-webkit-transform的存在是有必要的,因为有些浏览器识别不了transform,比如微信内置浏览 (我的手机上是这样的) 。为了兼容性,多扣几个字母是值得的。
3、关于transition设置为0s。
为什么要在touchstart的时候把transition的值设置为0秒呢?transition的作用是为元素属性的变化添加过渡效果,例如一个框变大,我们设置为transition为1s,那么这个框就是在1s内变大到指定大小。第一个参数表示设置过渡效果的 CSS 属性的名称 (如:margin,transform;all表示所有) ,第二个参数表示过渡的时间。 代码中设置transition的目的是在于滑动结束后 (手指离开屏幕) 为滑块回弹添加过渡效果,这样看上去就不会那么突兀。当然,这个过渡效果同样会应用到数据加载完成后提示部分的隐藏上。设置为0是为了取消在滑动过程中的滑块过渡效果,我们手指往下滑动的时候,滑块会跟这向下移动,这样就有了滑动滑块的效果。如果这个时候不取消transition就会出现滑块抖动的效果 (嘿嘿,有兴趣的话可以试试这种感觉。) 。整个过程中transition是相当重要的。
4、关于isLock和isCanDo.
这两个变量的作用在于防止二次滑动,在第一次滑动后数据加载完成之前不允许有第二次的滑动。当滑动开始的时候讲isLock和isCanDo都设置为True,表示允许后面两个事件里的代码可以正常运行,当滑动结束后isCanDo设置为false表示在isLock被设置为True之前 (整个操作完成之前) 所有的事件代码均不可用 (不执行下拉数据加载等相关动作) 。
5、如何使用?
$(function () {
slide("#container", 61, function (e) {
var that = this;
setTimeout(function () {
that.back.call();
}, 2000);
});
});
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# js
# 下拉刷新
# 基于iscroll.js实现下拉刷新和上拉加载效果
# 纯javascript实现简单下拉刷新功能
# vue.js移动端app之上拉加载以及下拉刷新实战
# vue.js整合vux中的上拉加载下拉刷新实例教程
# JS 插件dropload下拉刷新、上拉加载使用小结
# iscroll.js的上拉下拉刷新时无法回弹的解决方法
# dropload.js插件下拉刷新和上拉加载使用详解
# js仿手机页面文件下拉刷新效果
# JS+CSS实现下拉刷新/上拉加载插件
# 原生js仿写手机端下拉刷新
# 滑块
# 设置为
# 鼠标
# 加载
# 回调
# 是有
# 当鼠标
# 结束后
# 完成后
# 左键
# 过程中
# 判断是否
# 几个
# 就会
# 有个
# 第一个
# 在这
# 是这样
# 要在
# 这两个
相关文章:
建站之星安装提示数据库无法连接如何解决?
如何通过.red域名打造高辨识度品牌网站?
建站主机与服务器功能差异如何区分?
如何在云主机上快速搭建多站点网站?
如何用5美元大硬盘VPS安全高效搭建个人网站?
建站上传速度慢?如何优化加速网站加载效率?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
如何实现建站之星域名转发设置?
在线制作视频的网站有哪些,电脑如何制作视频短片?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何在阿里云部署织梦网站?
盐城做公司网站,江苏电子版退休证办理流程?
网站企业制作流程,用什么语言做企业网站比较好?
,交易猫的商品怎么发布到网站上去?
建站主机核心功能解析:服务器选择与网站搭建流程指南
制作宣传网站的软件,小红书可以宣传网站吗?
如何通过虚拟主机快速完成网站搭建?
Python文件管理规范_工程实践说明【指导】
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
安徽网站建设与外贸建站服务专业定制方案
已有域名如何免费搭建网站?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
宿州网站制作公司兴策,安徽省低保查询网站?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
西安专业网站制作公司有哪些,陕西省建行官方网站?
Swift中循环语句中的转移语句 break 和 continue
建站之星代理如何优化在线客服效率?
如何高效利用200m空间完成建站?
已有域名能否直接搭建网站?
微信h5制作网站有哪些,免费微信H5页面制作工具?
建站主机选虚拟主机还是云服务器更好?
建站之星下载版如何获取与安装?
如何用好域名打造高点击率的自主建站?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
建站之星后台管理:高效配置与模板优化提升用户体验
SQL查询语句优化的实用方法总结
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
如何通过NAT技术实现内网高效建站?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
C++中引用和指针有什么区别?(代码说明)
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
建站之星如何防范黑客攻击与数据泄露?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
*请认真填写需求信息,我们会在24小时内与您取得联系。