基于iscroll实现下拉和上拉刷新
在原生APP
的开发中,有一个常见的功能,就是下拉刷新的功能,这个想必大家都是知道的,但是原生APP
的开发,有一个很大的问题就是,你每次更新一些功能,就要用户重新下载一次版本,尤其是在iOS
系统中,新版本还需要经过审核才能通过,这就使得版本的更新受到很大的限制,而如果我们改用网页来展示,那么只要改变服务器中网页的内容,那么就等于修改了APP
的内容展示,有更灵活的满足更新版本。
概述
但是有一点就是,如何让web
实现的页面,看起来更像是原生的APP
呢,首先要想办法解决的就是下拉刷新的功能,对于这个功能,我并没有在网络上找到很好的解决方法,并且,我个人对手机端的开发,经验还是有些欠缺,这里就不罗列使用JS
实现web
页下拉刷新的功能了。
这里,我基于iscroll5
的基础上,进行了少量的改动源代码,进而实现了下拉属性的功能,所以分享在这里,仅供参考。
关于iscroll插件
iscroll
插件(官网地址)当前最新的版本是version 5
版本,相对于版本4
,我个人觉得,版本5
变得更具有灵活性,虽然移除了一些特定的事件,特定的对外接口,但是对于使用该插件的程序员们,这个插件变得更具有操控性,这是我比较喜欢的一种插件类型,但同时,也发现了一些问题,事件中的touchend
事件,不存在了(确切的说,不能说是不存在),只是被拦截了,所以一些基本的事件,都被进行了拦截,而导致无法监听到touchend
事件,只能检测到scrollEnd
事件,scrollEnd
事件,是在页面滚动停止时,才会被触发的,所以~~
所以,根据版本5
,无法检测到,是不是下拉了一段距离之后,松开时的动作了,对此,我也检查了源代码,也没有发现这个功能的实现方法,不得已,只能对源代码进行了少量的修改,所以就有了本篇文章。
修改后插件的使用
基本上,该方法并没有进行多少的修改,只是添加了两个事件的监听类型,一个叫做“slideDown
”,表示下拉被触发,另一个叫做“slideUp
”,表示上拉被触发。
其他,实例化中,各属性都没有进行更改,所以,关于iscroll
的使用,直接参考官网的说明:iscroll官网。
这里,我只对新添加的事件,添加一个demo
测试,这个demo
是一个很简单的demo
,也只是用来说明新添加事件的用法的,如果需要用到下拉刷新或者上拉刷新的朋友,可以根据本demo
自行修改。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- <div id="wrapper">
- <div id="scroller">
- <div id = "scroller-pullDown">
- <span id = "down-icon" class = "icon-double-angle-down pull-down-icon"></span>
- <span id = "pullDown-msg" class = "pull-down-msg">下拉刷新</span>
- </div>
- <div id = "scroller-content">
- <ul>
- <li>Pretty row 1</li>
- <li>Pretty row 2</li>
- <li>Pretty row 3</li>
- <li>Pretty row 4</li>
- <li>Pretty row 5</li>
- ...
- <li>Pretty row 46</li>
- <li>Pretty row 47</li>
- <li>Pretty row 48</li>
- <li>Pretty row 49</li>
- <li>Pretty row 50</li>
- </ul>
- </div>
- <div id = "scroller-pullUp">
- <span id = "up-icon" class = "icon-double-angle-up pull-up-icon"></span>
- <span id = "pullUp-msg" class = "pull-up-msg">上拉刷新</span>
- </div>
- </div>
- </div>
CSS部分这里就不多说了,有兴趣的可以直接保存该网页,然后把相关代码分离即可,对应的JS
和CSS
代码,分别为iscroll.js
和iscroll.css
文件,其他的bootstrap
和jQuery
都是我懒的原因,加入的框架。
对上述的结构进行实例化:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- var myScroll,
- upIcon = $("#up-icon"),
- downIcon = $("#down-icon");
- myScroll = new IScroll('#wrapper', { probeType: 3, mouseWheel: true });
- //probeType属性,表明此插件,可以监听scroll事件
- myScroll.on("scroll",function(){
- //scroll事件,可以用来控制上拉和下拉之后显示的模块中,
- //样式和内容展示的部分的改变。
- var y = this.y,
- maxY = this.maxScrollY - y,
- downHasClass = downIcon.hasClass("reverse_icon"),
- upHasClass = upIcon.hasClass("reverse_icon");
- if(y >= 40){
- !downHasClass && downIcon.addClass("reverse_icon");
- return "";
- }else if(y < 40 && y > 0){
- downHasClass && downIcon.removeClass("reverse_icon");
- return "";
- }
- if(maxY >= 40){
- !upHasClass && upIcon.addClass("reverse_icon");
- return "";
- }else if(maxY < 40 && maxY >=0){
- upHasClass && upIcon.removeClass("reverse_icon");
- return "";
- }
- });
- myScroll.on("slideDown",function(){
- //当下拉,使得边界超出时,如果手指从屏幕移开,则会触发该事件
- if(this.y > 40){
- //获取内容于屏幕拉开的距离
- //可以在该部分中,修改样式,并且仅限ajax或者其他的一些操作
- //此时只是为了能演示该功能,只添加了一个alert功能。
- //并且,由于alert会阻塞后续的动画效果,所以,
- //添加了后面的一行代码,移除之前添加上的一个样式
- alert("slideDown");
- upIcon.removeClass("reverse_icon");
- }
- });
- myScroll.on("slideUp",function(){
- if(this.maxScrollY - this.y > 40){
- //与slideDown相同的,maxScrollY表示文档区域的最大高度
- alert("slideUp");
- upIcon.removeClass("reverse_icon")
- }
- });
同时,注意一点,当你使用ajax
添加或者删除一些新的元素时,要重新myScroll.refresh()
一下,会重新计算maxScrollY
区域的,以保证区域覆盖的正确性,这些东西,如果你真的使用到,那么肯定可以碰到这些问题的,所以,这里是我话多了~~~
OK,代码就是这样了,在写这个文章的时候,旁边没有Android
的设备,所以,没有进行测试,只测试了IOS8的设备,所以,如果有问题,请指出,谢谢~~
上述例子的demo地址:下拉,上拉刷新demo。
也可以扫描二维码:
总结
我的本意是把这个方法,写成一个基于iscroll
的插件,但当前还没有完成,所以现在只给出一个最简单demo
,待我闲暇时间,把该插件进行完善一下。
注:本例中引入的iscroll.js
经过了作者本人的一些修改,所以跟官网的代码,有出入,如需验证该问题,请自行下载demo。
也可点击链接:下载demo
如有问题,也请不吝指教,谢谢!
本文地址:http://www.zhangyunling.com/?p=359
基于iscroll实现下拉和上拉刷新的更多相关文章
- [Swift通天遁地]二、表格表单-(5)实现表格下拉和上拉刷新效果
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- H5基于iScroll实现下拉刷新,上拉加载更多
前言 前一段有个手机端的项目需要用到下拉刷新和上拉加载更多的效果,脑海里第一反映就是微博那种效果,刚开始的理解有些偏差,以为下拉也是追加数据,上拉也是追加数据,后请教同事后发现其实下拉只是刷新最新数据 ...
- 基于iscroll.js实现下拉刷新和上拉加载特效
现在已经不是纯Android独霸天下的时代了,H5嵌入Android的Hybrid混合开发是大势所趋.今天给大家带来的就是移动端中常见的"上拉刷新,下拉加载"特效,这个特效将会基于 ...
- Android 使用PullToRefresh实现下拉刷新和上拉加载(ExpandableListView)
PullToRefresh是一套实现非常好的下拉刷新库,它支持: 1.ListView 2.ExpandableListView 3.GridView 4.WebView 等多种常用的需要刷新的Vie ...
- 使用PullToRefresh实现下拉刷新和上拉加载
使用PullToRefresh实现下拉刷新和上拉加载 分类: Android2013-12-20 15:51 78158人阅读 评论(91) 收藏 举报 Android下拉刷新上拉加载PullToRe ...
- 安卓开发笔记——关于开源组件PullToRefresh实现下拉刷新和上拉加载(一分钟搞定,超级简单)
前言 以前在实现ListView下拉刷新和上拉加载数据的时候都是去继承原生的ListView重写它的一些方法,实现起来非常繁杂,需要我们自己去给ListView定制下拉刷新和上拉加载的布局文件,然后添 ...
- iscroll.js 下拉刷新和上拉加载
html代码如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- H5页面基于iScroll.js插件实现下拉刷新,上拉加载更多
前言 在我之前的项目中,页面总是干巴巴的,用户的体验不是特别完美,我也是一直觉得把设计师给到的psd做出来就好,很少考虑用户的感受.我喜欢看不同的App,操作每个步骤,观赏每个能和我互动的交互设计效果 ...
- IOS 开发下拉刷新和上拉加载更多
IOS 开发下拉刷新和上拉加载更多 简介 1.常用的下拉刷新的实现方式 (1)UIRefreshControl (2)EGOTTableViewrefresh (3)AH3DPullRefresh ( ...
随机推荐
- 第5讲——cin处理字符输入
本来这一讲应该是while.for.if之类的,但是,我们可是学过C的男人,再浪费时间搞这个??? 还不如学点C++中的新知识. cin对象支持3种不同模式的单字符输入,其用户接口各不相同. 下面我们 ...
- 使用IMAGEMAGICK的CONVERT工具批量转换图片格式
使用IMAGEMAGICK的CONVERT工具批量转换图片格式 http://www.qiansw.com/linux-imagemagick-convert-img.html Home > 文 ...
- SSH 项目中 使用websocket 实现网页聊天功能
参考文章 :java使用websocket,并且获取HttpSession,源码分析 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 1.在项 ...
- sendto函数的坑
测试unix数据报套接字时,一个程序收,一个程序发,分别绑定自己的socket.结果在收的部分,返回的发送方的地址总是空的,但是返回的地址长度又是对的. ) { bzero(&clientad ...
- c++ 中反正单词用到了resize()
resize(n) 调整容器的长度大小,使其能容纳n个元素.如果n小于容器的当前的size,则删除多出来的元素.否则,添加采用值初始化的元素. 题目如下: 151. Reverse Words in ...
- ThreadLocal 验明正身
一.前言 之前ThreadLocal使用不多,有个细节也就注意不到了:ThreadLocal在多线程中到底起什么作用?用它保存的变量在每个线程中,是每个线程都保存一份变量的拷贝吗?带着这些问题,我查了 ...
- input属性 disabled与readonly的区别
从效果上看 源码 <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...
- Python数据分析(四)DataFrame, Series, ndarray, list, dict, tuple的相互转换
转自:https://blog.csdn.net/lambsnow/article/details/78517340 import numpy as np import pandas as pd ## ...
- JS格式化 /Date(xxxxxx)/的日期类型
//用来转换/Date(xxxxxx)/类型的JSON日期为要求的日期格式字符串String.prototype._formatJsonDate = function (format) { var s ...
- [CF1076E]Vasya and a Tree
题目大意:给定一棵以$1$为根的树,$m$次操作,第$i$次为对以$v_i$为根的深度小于等于$d_i$的子树的所有节点权值加$x_i$.最后输出每个节点的值 题解:可以把操作离线,每次开始遍历到一个 ...