iscroll4实现下拉刷新和下拉加载更多

  开发项目中,需要用到下拉刷新,开始本来打算自己写这个效果的。但是,自己写的效果不流畅,显得死板。通过查询相关资料,发现了iscroll插件。

  iScroll是一种高性能,小体积,无依赖性,跨平台的JS滚动,下拉刷新插件,可以动态加载分页内容。它适用于台式机,手机和智能电视。它的性能和尺寸大力优化等提供的一致好评现代老设备的平滑效果。

  版本:iscroll4

  代码如下:

 

  html代码

<!DOCTYPE html>
<html>
<head>
    <title>下拉刷新</title>
    <meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=2.0" name="viewport" />
    <meta content="telephone=no" name="format-detection" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <link rel="stylesheet" type="text/css" href="css/refresh.css">

</head>
<body>
    <div id="page">
        <div class="header" id="header">
            <h3>页头</h3>
        </div>

        <div class="container" id="container">
            <div id="wrapper">

                <div id="scroller" style="width:100%; position:absolute; top:-40px;">
                    <div class="showbox" id="downLoading" style="display:block;">
                        <div class="loadingWord">
                            <img src="imgs/down-vector.png">
                            <span class="loading_text downRefreshLable">下拉刷新</span>
                        </div>
                    </div>

                    <div id="dataList" class="dataList">
                        <ul>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                            <li>1111111111111111</li>
                        </ul>
                        <ul>
                            <li>2222222222222222</li>
                            <li>2222222222222222</li>
                            <li>2222222222222222</li>
                        </ul>
                    </div>

                    <div class="showbox" id="upLoading" style="display:block;">
                        <div class="loadingWord">
                            <img src="imgs/up-vector.png">
                            <span class="loading_text downRefreshLable">上拉更多</span>
                        </div>
                    </div>
                </div>
            </div>

        </div>

        <div class="footer" id="footer">
            <h3>页脚</h3>
        </div>
    </div>
    <script type="text/javascript" ></script>
    <script src="js/lib/require.js" data-main="js/app/refresh"></script>
</body>
</html>

  js代码

require.config({
    paths: {
        ‘zepto‘:‘../lib/zepto‘,
        ‘refresh‘:‘../app/refresh‘,
        ‘iscroll‘:‘../lib/iscroll4‘
    },
    shim: {
            "zepto": {
                exports : "$"
            },
            "iscroll":{
                exports : ‘isc‘
            }
        }

});

require([‘zepto‘, ‘iscroll‘, ‘refresh‘], function($,isc,ref){
    ref.init();
});

define(["zepto"],function($){
    //全局变量
    /*屏幕长宽*/
    var window_width = $(window).width();
    var window_height = $(window).height();
    var i = 0;
    var _iscroll;

    var elem = {

        //全局变量
        /*var window_width = $(document).width();
        var window_height = $(document).height();
        console.log(‘window_width===‘ +window_width +‘window_height===‘ +window_height);*/

        //入口函数
        init:function(){
            elem.initStyle();
            elem.initIscroll();
        },

        //初始化样式
        initStyle:function(){
            //页面主要内容.container样式
            var header_height = $(‘#header‘).height();
            var footer_height = $(‘#footer‘).height();
            var downLoad_height = $(‘#downLoading‘).height();
            var upLoad_height = $(‘#upLoading‘).height();

            var container_height = window_height - header_height -  footer_height;
            $(‘#container‘).height(container_height).css(‘top‘, header_height + ‘px‘);
            //iscroll滚动#warpper样式
            $(‘#wrapper‘).height(container_height + downLoad_height);
            $(‘#dataList‘).css(‘min-height‘, container_height - upLoad_height + ‘px‘);
        },

        //刷新页面数据
        refreshData:function(){
            console.log(‘刷新数据===Ajax‘);
        },
        //加载更多数据
        loadMoreData:function(){
            console.log(‘下拉更多===Ajax‘);
            i++;
            var newData = ‘<ul>‘
                            + ‘<li>‘+ i +‘</li>‘
                            + ‘<li>‘+ i +‘</li>‘
                            + ‘<li>‘+ i +‘</li>‘
                        + ‘</ul>‘
            $(‘#dataList‘).append(newData);

            _iscroll.refresh();
            //elem.initIscroll();
        },

        //滑动控件初始化
        initIscroll:function(){
            var refreshKey = false;//
            var loadMoreKey = false;//

            _iscroll=new iScroll(‘wrapper‘, {
                //scrollbarClass: ‘myScrollbar‘,
                checkDOMChanges:true,
                vScrollbar : false,

                //开始滚动时回调
                onScrollMove: function () {
                    ////console.log(this.y);
                    var _y = this.y;//下拉距离
                    var _max = (this.maxScrollY)*(-1);//最大的下拉距离,负值
                    //console.log(‘_y:‘+_y+‘  _max:‘ + _max);

                    //页头---下拉刷新
                    if(_y>0&&_y<40){//显示‘下拉刷新‘

                        $(‘#downLoading‘).find(‘img‘).animate({
                        ‘transform‘:‘rotate(-0deg)‘,
                        ‘-ms-transform‘:‘rotate(-0deg)‘,
                        ‘-moz-transform‘:‘rotate(-0deg)‘,
                        ‘-webkit-transform‘:‘rotate(-0deg)‘,
                        ‘-o-transform‘:‘rotate(-0deg)‘},200);
                        $(‘#downLoading‘).find(‘.loading_text‘).html(‘下拉刷新‘);
                        refreshKey = false;//下拉超过40,释放后刷新数据
                    }else if(_y>=40){//显示释放更新,后调用刷新数据函数

                       $(‘#downLoading‘).find(‘img‘).animate({
                        ‘transform‘:‘rotate(180deg)‘,
                        ‘-ms-transform‘:‘rotate(180deg)‘,
                        ‘-moz-transform‘:‘rotate(180deg)‘,
                        ‘-webkit-transform‘:‘rotate(180deg)‘,
                        ‘-o-transform‘:‘rotate(180deg)‘},200);
                       $(‘#downLoading‘).find(‘.loading_text‘).html(‘释放更新‘);
                       refreshKey = true;//下拉超过40,释放后刷新数据

                    //上拉---加载更多
                    }else if((-_y)>_max){//_max

                        //显示加载中
                        $(‘#upLoading‘).find(‘img‘).attr(‘src‘, ‘imgs/waiting.gif‘).css(‘display‘, ‘block‘);
                        $(‘#upLoading‘).find(‘.loading_text‘).html(‘加载中...‘);
                        loadMoreKey = true;
                    }else{
                        //显示上拉更多
                        $(‘#upLoading‘).find(‘img‘).attr(‘src‘, ‘imgs/up-vector.png‘).css(‘display‘, ‘block‘);
                        $(‘#upLoading‘).find(‘.loading_text‘).html(‘上拉更多‘);

                        refreshKey = false;//下拉超过40,释放后刷新数据
                        loadMoreKey = false;
                    }          

                 },

                 //手离开屏幕时回调
                 onTouchEnd:function(){
                    //当触发释放更新时,需要更新数据
                    if(refreshKey){
                        var downLoad_height = $(‘#downLoading‘).height();

                        $(‘#downLoading‘).find(‘img‘).attr(‘src‘, ‘imgs/waiting.gif‘).css(‘display‘, ‘block‘);
                        $(‘#downLoading‘).find(‘.loading_text‘).html(‘加载中...‘);
                        $(‘#scroller‘).css(‘top‘, ‘0px‘);

                        elem.refreshData();

                        setTimeout(function(){
                            $(‘#downLoading‘).find(‘img‘).attr(‘src‘, ‘imgs/down-vector.png‘).css(‘display‘, ‘block‘);
                            $(‘#downLoading‘).find(‘.loading_text‘).html(‘下拉刷新‘);
                            $(‘#scroller‘).css(‘top‘, -downLoad_height + ‘px‘);
                        },500);

                        refreshKey = false;
                    }

                    //当触发上拉加载更多时,需要加载更多数据
                    if(loadMoreKey){
                        elem.loadMoreData();

                        setTimeout(function(){
                            $(‘#upLoading‘).find(‘img‘).attr(‘src‘, ‘imgs/up-vector.png‘).css(‘display‘, ‘block‘);
                            $(‘#upLoading‘).find(‘.loading_text‘).html(‘上拉更多‘);
                        },500);

                        loadMoreKey = false;
                    }

                 }
            });
        }

    }

    return elem;
});

/*var elem = {

    //全局变量
    var window_width = $(document).width();
    var window_height = $(document).height();
    console.log(‘window_width===‘ +window_width +‘window_height===‘ +window_height);

    init:function(){
        alert($(‘.header h3‘).text());
         alert(‘init‘);
    }
}*/

我的实例源码上传到博客文件里了,需要可以自己下载查看。

时间: 2024-10-29 19:10:32

iscroll4实现下拉刷新和下拉加载更多的相关文章

Android如何定制一个下拉刷新,上滑加载更多的容器

前言 下拉刷新和上滑加载更多,是一种比较常用的列表数据交互方式. android提供了原生的下拉刷新容器 SwipeRefreshLayout,可惜样式不能定制. 于是打算自己实现一个专用的.但是下拉刷新和上滑,非常考验对android布局与父子触摸机制的功底,因此参考gitHub上的一个热门的下拉刷新项目 之所以选择他是因为它一个类就完成了所有View的适配,非常的精简强力. 需求 咱对下拉刷新.上滑加载更多的控件,需求如下: 1:下拉刷新,拖动到一定距离,提示文字变成 放手刷新 2:刷新完成

android ListView的上部下拉刷新下部点击加载更多具体实现及拓展

转自:http://blog.csdn.net/jj120522/article/details/8229423 这次就不上图了,例子太多太多了,想必大家都见过.这个功能的实现,简直是开发者必备的. 我也不过多介绍了,网上详细介绍的博客太多太多了,若想深入了解,请参考网上其他博文. 在这里,我只是按照自己的理解,模拟实现了一个,顺便代码贡献出来. 我对之详细标明的注释,想必如果不懂的同学们,看注释也应该明白,前提是,你要耐心看,因为代码有点多,但是我整理过了,还算清晰. 详细代码: [java]

Android 下拉刷新,上滑加载更多

底部上拉效果 public class ListViewFooter extends LinearLayout { public final static int STATE_NORMAL = 0; public final static int STATE_READY = 1; public final static int STATE_LOADING = 2; private Context mContext; private View mContentView; private View

[Android学习系列15]下拉刷新列表实现动态加载

使用google官方的SwipeRefreshLayout 参考: http://blog.csdn.net/easyer2012/article/details/22857807 http://stormzhang.github.io/android/2014/03/29/android-swiperefreshlayout/ http://www.eoeandroid.com/thread-330439-1-1.html http://www.oschina.net/translate/sw

Android 为什么我的PullListView只能向下滑动,不能向上滑动加载更多???

============问题描述============ Android 为什么我的PullListView只能向下滑动,不能向上滑动加载更多??? ============解决方案1============ mode模式,你可以看看官方api

Ionic -- Refresher &amp; InfiniteScroll 下拉刷新与滚动懒加载

下拉刷新和滚动加载在移动端是很常见的需求,Ionic 为我们提供了开箱即用的组件.在这里我结合自己做的小demo简单介绍下. Template 在模板中需要将 ion-refresher 组件放置在 ion-content 内部的首位,将 ion-infinite-scroll 置于尾部. <ion-refresher (ionRefresh)="doRefresh($event)"> <ion-refresher-content pullingIcon="

ListView实现下拉刷新-2-将顶部布局加载到ListView中

上一篇实现了Adapter类的创建,和getView函数的分析: 这一篇主要讲第二部分,即将顶部布局加载到ListView中:重点是ReFlashListView的实现上,这一篇中我会谈一谈在阅读源代码的过程中所遇到的困难和采取的方法: 首先看ReFlashListView类: public class ReFlashListView extends ListView implements OnScrollListener 表明ReFlashListView是继承自ListView的,并且 实现

iOS学习之路--下拉刷新和上拉加载更多

iOS学习之路--下拉刷新和上拉加载更多 简介 本文中笔者将和大家分享应用app中常用到的表单内容的下拉刷新和上拉加载更多的功能实现的方法. 内容 1.有哪些实现方法与各方法的优劣 使用过美团,大众点评的朋友们应该有注意到,当你向上滑动表单的时候会有更多的店铺加载进你的表单中,而当你下滑表单顶的时候,则会刷新表单的内容并从网络上获取最新的信息.通过下拉刷新和上拉加载更多的功能,使app可以获取更多用户想要的信息和获取最新的信息.那么这种功能如何实现呢,还请跟着笔者继续往下看. 目前来说,主要的实

【好程序员笔记分享】——下拉刷新和上拉加载更多

-iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS学习之路--下拉刷新和上拉加载更多 简介 本文中笔者将和大家分享应用app中常用到的表单内容的下拉刷新和上拉加载更多的功能实现的方法. 内容 1.有哪些实现方法与各方法的优劣 使用过美团,大众点评的朋友们应该有注意到,当你向上滑动表单的时候会有更多的店铺加载进你的表单中,而当你下滑表单顶的时候,则会刷新表单的内容 并从网络上获取最新的信息.通过下拉刷新和上拉加载更多的功能,使app可以获取更多用户想要

06---数据的下拉刷新上拉加载更多实现

以我最近做的微格项目为例,谈谈关于数据的下拉刷新上拉加载更多实现 页面加载数据: #pragma mark - 加载微博数据 - (void)loadStatusData { _statusesFrame = [NSMutableArray array]; // 微博管理 加载 [StatusManage getStatusesWithSendSinceId:0 maxId:0 Success:^(NSArray *statues) { for (Status *s in statues) {