下拉加载、下拉刷新

移动端开发中,上拉加载、下拉刷新这个功能经常用到,简单介绍下:

该功能采用了插件iScroll.js,下载地址如下:http://cubiq.org/iscroll-4,示例demo如下:

HTML代码:

<!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; maximum-scale=1.0;" />
        <title>iScroll下拉刷新上滑加载</title>
        <link rel="stylesheet" href="style/main.css" />
    </head>
    <body>
        <div class="header">head</div>
        <div id="wrapper">
            <div id="scroller">
                <div id="pullDown">
                    <span class="pullDownLabel">下拉刷新</span>
                </div>
                <ul id="thelist">
                <!--<li>原始数据</li>-->
                </ul>
                <div id="pullUp">
                    <span class="pullUpLabel">上拉加载更多</span>
                </div>
            </div>
        </div>
        <div class="footer">footer</div>
    </body>

    <script type="text/javascript" src="script/iscroll.js"></script>
    <script type="text/javascript" src="script/main.js"></script>
</html>

CSS代码:

body,ul,li {padding:0;margin:0;border:0}
body {font-size:12px;font-family:microsoft yahei}
.header {position:absolute;top:0; left:0;width:100%;height:45px;line-height:45px;font-size:16px;text-align:center;background:#e6e6e6}
.footer {position:absolute;bottom:0; left:0;width:100%;height:48px;line-height:48px;font-size:16px;text-align:center;background:#e6e6e6}
#wrapper {position:absolute;top:45px; bottom:48px;left:0;width:100%}
#scroller li {color:#fff;font-size:16px;padding:0 10px;height:60px;line-height:60px;background:lightblue;margin-top:5px}
#pullDown, #pullUp {padding:0 10px;height:30px;line-height:30px;color:#888;text-align:center}

JS代码:

var myScroll, pullDownEl, pullDownOffset, pullUpEl, pullUpOffset, generatedCount = 0;
function loaded () {
  //动画部分
  pullDownEl = document.getElementById('pullDown');
  pullDownOffset = pullDownEl.offsetHeight;
  pullUpEl = document.getElementById('pullUp');
  pullUpOffset = pullUpEl.offsetHeight;
  myScroll = new iScroll('wrapper', {
    useTransition: true,
    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 = 'Pull down to refresh...';
        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 = 'Pull up to load more...';
        this.maxScrollY = pullUpOffset;
      }
    },
    onScrollEnd: function () {
      if (pullDownEl.className.match('flip')) {
        pullDownEl.className = 'loading';
        pullDownEl.querySelector('.pullDownLabel').innerHTML = '加载中';
        pullDownAction(); // Execute custom function (ajax call?)
      } else if (pullUpEl.className.match('flip')) {
        pullUpEl.className = 'loading';
        pullUpEl.querySelector('.pullUpLabel').innerHTML = '加载中';
        pullUpAction(); // Execute custom function (ajax call?)
      }
    }
  });

  loadAction();
}
document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);//阻止冒泡
document.addEventListener('DOMContentLoaded', function () { setTimeout(loaded, 0); }, false);


//初始状态,加载数据
function loadAction () {
  var el, li;
  el = document.getElementById('thelist');
  for (i = 0; i < 10; i++) {
    li = document.createElement('li');
    li.innerText = '初始数据--' + (++generatedCount);
    el.appendChild(li, el.childNodes[0]);
  }
  myScroll.refresh();
}


//下拉刷新当前数据
function pullDownAction () {
  setTimeout(function () {
    //这里执行刷新操作

    myScroll.refresh();
  }, 400);
}


//上拉加载更多数据
function pullUpAction () {
  setTimeout(function () {
    var el, li;
    el = document.getElementById('thelist');
    for (i = 0; i < 10; i++) {
      li = document.createElement('li');
      li.innerText = '上拉加载--' + (++generatedCount);
      el.appendChild(li, el.childNodes[0]);
    }
    myScroll.refresh();
  }, 400);
}

效果图如下:

另外,更多内容,参考iScroll的官方Api。

网址:http://www.360doc.com/content/14/0724/11/16276861_396699901.shtml

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值