引用iScroll.js实现上拉和下拖刷新

使用技巧

1、引用iScroll.js, 在初始化时添加两个事件监听:touchMove、DOMContentLoaded。

2、实现iScroll插件的onScrollEnd事件, 也就是在这个事件里调用你自己的ajax方法实现数据的刷新和追加。

3、上拉加载更多请求后台时就相当于分页请求数据,这时候需要在ajax请求时发送pageIndex参数,而初始化加载时需要从后台返回一个pageCount以便前台判断。

4、最关键的就是实现下拉刷新方法(pullDownAction)和上拉加载更多(pullUpAction)方法。

效果图

 实现方法


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

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

var     myScroll,

    pullDownEl, pullDownOffset,

    pullUpEl, pullUpOffset,

    generatedCount = 0;

/**

 * 下拉刷新 (自定义实现此方法)

 * myScroll.refresh(); 数据加载完成后,调用界面更新方法

 */

function pullDownAction () {

    setTimeout(function () {   

        var el, li, i;

        el = document.getElementById(‘thelist‘);

        for (i=0; i<3; i++) {

            li = document.createElement(‘li‘);

            li.innerText = ‘Generated row ‘ + (++generatedCount);

            el.insertBefore(li, el.childNodes[0]);

        }

        

        myScroll.refresh();     //数据加载完成后,调用界面更新方法 

    }, 1000);  

}

/**

 * 滚动翻页 (自定义实现此方法)

 * myScroll.refresh();      // 数据加载完成后,调用界面更新方法

 */

function pullUpAction () {

    setTimeout(function () {    // <-- Simulate network congestion, remove setTimeout from production!

        var el, li, i;

        el = document.getElementById(‘thelist‘);

        for (i=0; i<3; i++) {

            li = document.createElement(‘li‘);

            li.innerText = ‘Generated row ‘ + (++generatedCount);

            el.appendChild(li, el.childNodes[0]);

        }

        

        myScroll.refresh();     //数据加载完成后,调用界面更新方法

    }, 1000);  

}

/**

 * 初始化iScroll控件

 */

function loaded() {

    pullDownEl = document.getElementById(‘pullDown‘);

    pullDownOffset = pullDownEl.offsetHeight;

    pullUpEl = document.getElementById(‘pullUp‘);  

    pullUpOffset = pullUpEl.offsetHeight;

    

    myScroll = new iScroll(‘wrapper‘, {

        scrollbarClass: ‘myScrollbar‘,

        useTransition: false,

        topOffset: pullDownOffset,

        onRefresh: function () {

            if (pullDownEl.className.match(‘loading‘)) {

                pullDownEl.className = ‘‘;

                pullDownEl.querySelector(‘.pullDownLabel‘).innerHTML = ‘下拉刷新...‘;

            else if (pullUpEl.className.match(‘loading‘)) {

                pullUpEl.className = ‘‘;

                pullUpEl.querySelector(‘.pullUpLabel‘).innerHTML = ‘上拉加载更多...‘;

            }

        },

        onScrollMove: function () {

            if (this.y > 5 && !pullDownEl.className.match(‘flip‘)) {

                pullDownEl.className = ‘flip‘;

                pullDownEl.querySelector(‘.pullDownLabel‘).innerHTML = ‘松手开始更新...‘;

                this.minScrollY = 0;

            else if (this.y < 5 && pullDownEl.className.match(‘flip‘)) {

                pullDownEl.className = ‘‘;

                pullDownEl.querySelector(‘.pullDownLabel‘).innerHTML = ‘下拉刷新...‘;

                this.minScrollY = -pullDownOffset;

            else if (this.y < (this.maxScrollY - 5) && !pullUpEl.className.match(‘flip‘)) {

                pullUpEl.className = ‘flip‘;

                pullUpEl.querySelector(‘.pullUpLabel‘).innerHTML = ‘松手开始更新...‘;

                this.maxScrollY = this.maxScrollY;

            else if (this.y > (this.maxScrollY + 5) && pullUpEl.className.match(‘flip‘)) {

                pullUpEl.className = ‘‘;

                pullUpEl.querySelector(‘.pullUpLabel‘).innerHTML = ‘上拉加载更多...‘;

                this.maxScrollY = pullUpOffset;

            }

        },

        onScrollEnd: function () {

            if (pullDownEl.className.match(‘flip‘)) {

                pullDownEl.className = ‘loading‘;

                pullDownEl.querySelector(‘.pullDownLabel‘).innerHTML = ‘加载中...‘;               

                pullDownAction();   // ajax call

            else if (pullUpEl.className.match(‘flip‘)) {

                pullUpEl.className = ‘loading‘;

                pullUpEl.querySelector(‘.pullUpLabel‘).innerHTML = ‘加载中...‘;               

                pullUpAction(); // ajax call

            }

        }

    });

    

    setTimeout(function () { document.getElementById(‘wrapper‘).style.left = ‘0‘; }, 800);

}

//初始化绑定iScroll控件

document.addEventListener(‘touchmove‘function (e) { e.preventDefault(); }, false);

document.addEventListener(‘DOMContentLoaded‘, loaded, false);

时间: 2024-10-12 01:56:51

引用iScroll.js实现上拉和下拖刷新的相关文章

iscroll.js实现上拉刷新,下拉加载更多,应用技巧项目实战

上拉刷新,下拉加载更多...仿原生的效果----iscroll是一款做滚动效果的插件,具体介绍我就不废话,看官方文档,我只写下我项目开发的一些用到的用法: (如果不好使,调试你的css,想必是个很蛋疼的问题,给点提示 :#wrapper,以及#scroller-content要注意) html如下: <div class="viewport"> <div id="wrapper" class="wrapper"> <

使用iScroll实现上拉或者下拉刷新

上拉或者下拉刷新的需求在移动端是非常常见的需求,大部分情况下,实现这个效果都使用网上现有的解决方案,例如有人使用swiper这个插件, 也有人使用iScroll这个滚动插件.本文的示例是利用iscroll实现的下拉刷新效果. iScroll简介 iScrool是目前最成熟的自定义滚动解决方案之一,在移动端和PC有很好的兼容性.iScroll官方提供了5个不同的版本: iscroll.js 通用版 包含了大部分公共特性 iscroll-lite.js 缩减版 削减了一些功能特性,例如:滚动条,鼠标

html5+css3实现上拉和下拉刷新

<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-sc

上拉、下拉无限滚动组件-pc端

场景: web项目,聊天记录历史搜索.需要支持上拉无限加载,下拉无限加载. 目标: 支持所需场景:可配置. 难点: 顶部无限滚动很麻烦,网上没找着好的解决方案.刚开始 顶部也想使用 IntersectionObserver 特性来做,但二次触发比较麻烦,后来改用监听 scroll 事件.问题又来了,滚动条一直处于顶部,无法保持原来的位置. 本例解决方案是:利用 scrollIntoViewIfNeeded 特性,在组装列表完成后,手动调用,使其滚动到 原来的列表项位置. 成品效果: 凑合能用,O

TableView上拉、下拉原理

TableView的上拉,下拉特效已经满大街都是了,也有很多第三方的代码. 这两天研究了一下其原理,分享一下思路.这里以tableView的上拉为例,由于上拉操作的样式也很多,这里只介绍一种:在上拉tableView的时候,在tableView的bottom下面,添加一个view,该view可以自定义.我称这个view为pullView,pullView是动态的,如下图(该图仅展示了loading状态,另外在loading的位置,还有"上拉显示更多"."松手显示更多"

Android新控件RecyclerView浅析及上拉和下拉刷新

概述: RecyclerView是android-support-v7-21版本中新增的一个Widgets,RecyclerView是ListView的升级版本,更加先进和灵活.在以后的开发中我们就可以直接使用RecyclerView来替换ListView. 特点介绍: 1. 可横向展示 2. 消除错位问题 3. 标准化了ViewHolder 横向: private void initHorizaontal(List<ItemModel> models) { RecyclerView recy

STM32端口模式配置——上拉、下拉、模拟、浮空输入;推挽、开漏、复用输出

1.上拉输入:上拉就是把电位拉高,比如拉到Vcc.上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!强弱只是上拉电阻的阻值不同,没有什么严格区分. 2.下拉输入:就是把电压拉低,拉到GND.与上拉原理相似. 3.浮空输入:浮空(floating)就是逻辑器件的输入引脚即不接高电平,也不接低电平.由于逻辑器件的内部结构,当它输入引脚悬空时,相当于该引脚接了高电平.一般实际运用时,引脚不建议悬空,易受干扰. 通俗讲就是让管脚什么都不接,浮空着. 4.模拟输入:模拟输入是指传统方式的

原生js实现上拉加载

原生js实现上拉加载:https://www.cnblogs.com/xinsir/p/10314694.html 原生js实现上拉加载其实超级简单,把原理整明白了你也会,再也不用去引一个mescroll啦~ 好了,废话不多说,开始进入正题:上拉加载是怎么去做的,原理就是监听滚动条滑到页面底部,然后就去做一次请求数据.那么只要我们对滚动监听即可. 现在,让我们来看代码: window.onscroll = function () { var scrollH = document.document

iscroll 移动端上拉刷新 下拉加载 实例 !

iscroll.js  是一款移动端框架, 相信做移动的同学都有接触吧, 哈哈 , 下面分享一下用法 , 首先再你的head里引入iscroll.js 路径需要自行修改 <script src="iscroll.js"></script> 好吧, 引入以后就该来点实际的啦 , 首先你的搭建你的HTML 结构  : 如以下代码 , 运动的对象就是你ID  为wrapper下的第一个子元素 ,没办法谁叫你用的框架呢 . 当然同学们也可以自行扩展 <div id