移动端touch事件 || 上拉加载更多
前言:
说多了都是泪,在进行项目开发时,在上拉加载更多实现分页效果的问题上,由于当时开发任务紧急,所以就百度找了各种移动端的上拉下拉
实现加载更多的插件。然后就留下了个坑:上拉加载的时候会由于用户错误的姿势,例如长按后再touchmove等会出现卡死的假象。(ps:当然,
我不认为是插件的问题,当时的想法是觉得引用的插件存在冲突),于是,我就直接通过封装touch事件完成上拉加载实现分页的功能。
备注:文章最后会加上为实现这个功能我找的一些插件
了解touch事件
在应用touch事件实现上拉加载更多实现分页的效果上,其实我们用到的只有touchstart,touchmove,touchend,touchcancel事件,还有targetTouches[0]
和changedTouches[0]属性即可完成简单的分页效果。
了解更多touch事件的方法可以访问:
https://developer.mozilla.org/zh-CN/docs/Web/API/Touch
touch事件需要注意事项
在执行touch事件的时候,在大多数情况下我们需要注意的就是阻止浏览器的默认行为,例如滚动事件或者浏览器的缩放,可以通过html页面加上meta标签禁止
用户缩放:<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">,然后
在touch事件上加上event.preventDefault()阻止默认事件。
上代码
通过基于zepto简单的封装了touch事件上拉加载更多的效果。
;(function ($,window,undefined) {
var userDefinedSlide={
isSupportTouch:"ontouchstart" in document ? true :false,
startPos:{},//touchstart的位置信息
endPos:{},//touchmove的位置信息
upOrDown:'',//up:为上拉加载,down为下拉刷新
winHigh:0,//浏览器的高度,
docHigh:0,//文档的高度,对应于页面总高度
scrollHigh:0,//滚动的高度
notDefault:false,//是否阻止默认行为
//docHigh=winHigh+scrollHigh
init:function(){
if(!this.isSupportTouch){
console.warn('touch events are not supported at current device');
}else{
this.touchEvents();
}
},
touchEvents:function(){
var that=this;
$("body").on("touchstart",function (e) {
var touch=e.targetTouches[0];
that.startPos={
x:touch.pageX,
y:touch.pageY,
time:+new Date()
};
that.winHigh=$(window).height();//可视窗口高度
that.docHigh=$(document).height();//总高度
that.scrollHigh=$(window).scrollTop();//滚动高度
});
$("body").on("touchmove",function (e) {
if(that.notDefault){
e.preventDefault();
}
var touch=e.targetTouches[0];
that.endPos={
x:touch.pageX,
y:touch.pageY,
time:+new Date()
};
that.upOrDown=that.endPos.y-that.startPos.y;
});
$("body").on("touchend touchcancel",function (e) {
if(that.upOrDown < 0 && that.docHigh<=(that.winHigh+that.scrollHigh)){
console.log('is to bottom');
//可执行动画效果
setTimeout(function(){
//需要异步加载数据放置位置
//若执行动画,则加载数据后移除动画效果
},1000);
}
})
}
};
userDefinedSlide.init();
})( Zepto ,window,undefined);
而基于是在touchmove事件执行获取触摸位置还在touchend/touchcancel事件执行获取触摸位置则我没有过多的考究。
要在touchend/touchcancel事件获取触摸位置的话则需要将var touch=e.targetTouches[0];调整为var touch=e.changedTouches[0];
因为,touchend/touchcancel事件没有targetTouches属性,只有changedTouches属性。
可能有人存在疑惑,为啥要绑定touchend和touchcancel两个事件呢,个人事件,发现在部分安卓手机上会在touchend事件上有bug,不能
执行,所以通过执行touchcancel事件:当系统停止跟踪触摸的时候触发,来达到touchend的效果。
通过我上面对touch事件的简单封装就可实现上拉加载更多实现分页的效果了。
更多上拉加载更多、下拉刷新插件:
dropload:https://github.com/ximan/dropload
iScroll:https://github.com/cubiq/iscroll
swiper:https://github.com/nolimits4web/Swiper(ps:swiper也可实现上拉加载更多)
mescroll:http://www.mescroll.com/
另:我文章开头提到的使用插件存在的bug,有知道的大神可以留言给我喔,再次谢过先了。
移动端touch事件 || 上拉加载更多的更多相关文章
- 原生js移动端touch事件实现上拉加载更多
大家都知道jQuery里没有touch事件,所以在移动端使用原生js实现上拉加载效果还是很不错的,闲话不多说,代码如下: //获取要操作的元素 var objSection = document.ge ...
- 移动端实现上拉加载更多(使用dropload.js vs js)
做下笔记,:移动端实现上拉加载更多,其实是数据的分段加载,在这里为了做测试我写了几个json文件作为分段数据: 方式一:使用dropload.js; 配置好相关参数及回调函数就可使用:代码如下 var ...
- vue2.0 移动端,下拉刷新,上拉加载更多插件,修改版
在[实现丰盛]的插件基础修改[vue2.0 移动端,下拉刷新,上拉加载更多 插件], 1.修改加载到尾页面,返回顶部刷新数据,无法继续加重下一页 2.修改加载完成文字提示 原文链接:http://ww ...
- 基于SwiperJs的H5/移动端下拉刷新上拉加载更多的效果
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
- 基于SwiperJs的H5/移动端下拉刷新上拉加载更多
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
- 【Web】移动端下拉刷新、上拉加载更多插件
移动网站中常常有的功能:列表的下拉刷新.上拉加载更多 本例介绍一种简单使用的移动端下拉刷新.上拉加载更多插件,下载及参考地址:https://github.com/ximan/dropload 插件依 ...
- 移动端h5列表页上拉加载更多
背景 上星期公司要求做一个回收书籍的h5给安卓用,里面有一个功能是回收记录列表.设计师那边出的稿子是没有要求分页或者是上拉刷新的,但是众所周知,列表页数据很多的情况下,h5加载是很慢的.所以我一开始是 ...
- vue移动端上拉加载更多
LoadMore.vue <template> <div class="load-more-wrapper" @touchstart="touchSta ...
- mui实现分页上拉加载更多 下拉刷新数据的简单实现 移动端下拉上拉
空下来把mui上拉加载更多,下拉刷新数据做了一个简单的实现,希望可以帮助到需要的朋友 demo项目的结构 <!DOCTYPE html> <html> <head> ...
随机推荐
- docker~学习笔记索引
回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...
- git - 远程分支
对于用户来说,git给人提交到本地的机会.我们可以在自己的机器上创建不同的branch,来测试和存放不同的代码. 对于代码管理员而言,git有许多优良的特性.管理着不同的分支,同一套源代码可以出不一样 ...
- 【微信小程序开发教程】如何显示群名称?
今年 5 月份的时候,微信宣布:「为了更好的针对群场景提供个性化服务,当用户在群聊中点击小程序分享卡片时,小程序支持开发者获取群 ID 和群名称」.但随后没多久,发现小程序只返回了群 ID,并没有给我 ...
- APP测试 - android os6,7 新增特性测试
背景 android os6,7推出后,公司的APP在市场上面反映的一些问题.初始方案在7月份已经整了一份,但是邮件发出大部分同学都看不到,这里在博客里面整理后再在部门内邮件发出来. android ...
- org.apache.hadoop.security.AccessControlException: Permission denied: user=?, access=WRITE, inode="/":hadoop:supergroup:drwxr-xr-x 异常解决
进行如下更改:vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml[我的hadoop目录在/usr/local下,具体的是修改你的hadoop目录中的/etc/ ...
- Pivot Table系列之展开/折叠用法 (Expand/Collapse)
1.遇到的问题: PivotTable中本来已经展开的维度的Hierarchy(层次结构),在切换切片器的数据集时,层次结构就折叠在一起了:没有按照之前的方式展开显示. 2.在做成PivotTable ...
- (转)Synchronized(对象锁)和Static Synchronized(类锁)的区别
场景:面试的时候经常用得到! 1 综述 Synchronized和Static Synchronized区别 一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念),一个是全 ...
- iOS开发实战-卫P嗯上网项目
写在前面 最近闲来无事,又跟小伙伴搞起.一.键.上.网.的项目,于是这个项目就来了. 很高兴App 已经过审 有兴趣的可以玩玩牛牛数据
- pwnable.kr bof之write up
这一题与前两题不同,用到了静态调试工具ida 首先题中给出了源码: #include <stdio.h> #include <string.h> #include <st ...
- Python使用openpyxl读写excel文件
Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...