Javascript下拉刷新的简单实现
发布时间 - 2026-01-10 23:02:14 点击率:次本文实例为大家分享了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仿写手机端下拉刷新
# 滑块
# 设置为
# 鼠标
# 加载
# 回调
# 是有
# 当鼠标
# 结束后
# 完成后
# 左键
# 过程中
# 判断是否
# 几个
# 就会
# 有个
# 第一个
# 在这
# 是这样
# 要在
# 这两个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Python制作简易注册登录系统
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
如何用好域名打造高点击率的自主建站?
UC浏览器如何设置启动页 UC浏览器启动页设置方法
如何用AWS免费套餐快速搭建高效网站?
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
javascript中对象的定义、使用以及对象和原型链操作小结
太平洋网站制作公司,网络用语太平洋是什么意思?
大连网站制作公司哪家好一点,大连买房网站哪个好?
Laravel如何使用Vite进行前端资源打包?(配置示例)
昵图网官网入口 昵图网素材平台官方入口
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
如何彻底删除建站之星生成的Banner?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
如何实现javascript表单验证_正则表达式有哪些实用技巧
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
详解Android中Activity的四大启动模式实验简述
LinuxCD持续部署教程_自动发布与回滚机制
Laravel观察者模式如何使用_Laravel Model Observer配置
活动邀请函制作网站有哪些,活动邀请函文案?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
浅谈Javascript中的Label语句
大型企业网站制作流程,做网站需要注册公司吗?
如何获取上海专业网站定制建站电话?
微信小程序 配置文件详细介绍
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
高性能网站服务器配置指南:安全稳定与高效建站核心方案
如何快速使用云服务器搭建个人网站?
Bootstrap整体框架之CSS12栅格系统
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
如何将凡科建站内容保存为本地文件?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
如何在Tomcat中配置并部署网站项目?
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
奇安信“盘古石”团队突破 iOS 26.1 提权
Laravel如何实现API资源集合?(Resource Collection教程)
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Laravel怎么实现验证码(Captcha)功能
公司网站制作价格怎么算,公司办个官网需要多少钱?
焦点电影公司作品,电影焦点结局是什么?
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
简历没回改:利用AI润色让你的文字更专业
如何用已有域名快速搭建网站?
,怎么在广州志愿者网站注册?

