全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

H5基于iScroll实现下拉刷新和上拉加载更多

前言

      前一段有个手机端的项目需要用到下拉刷新和上拉加载更多的效果,脑海里第一反映就是微博那种效果,刚开始的理解有些偏差,以为下拉也是追加数据,上拉也是追加数据,后请教同事后发现其实下拉只是刷新最新数据而已,上拉是追加数据。

使用技巧

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

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

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

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

效果图

 

实现方法

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);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# H5  # iScroll  # 下拉刷新  # 上拉加载  # 基于iscroll.js实现下拉刷新和上拉加载效果  # 基于HTML5上使用iScroll实现下拉刷新  # 上拉加载更多  # IScroll5实现下拉刷新上拉加载的功能实例  # 加载  # 完成后  # 自定义  # 自己的  # 加载中  # 有个  # 在这个  # 分页  # 刚开始  # 时就  # 脑海里  # 绑定  # 最关键  # 翻页  # 使用技巧  # 大家多多  # 前一段  # 时需  # 事后  # 这时候 


相关文章: 浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  西安大型网站制作公司,西安招聘网站最好的是哪个?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  如何在云服务器上快速搭建个人网站?  相册网站制作软件,图片上的网址怎么复制?  网站微信制作软件,如何制作微信链接?  网站制作公司排行榜,抖音怎样做个人官方网站  宿州网站制作公司兴策,安徽省低保查询网站?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  平台云上自主建站:模板化设计与智能工具打造高效网站  网站按钮制作软件,如何实现网页中按钮的自动点击?  营销式网站制作方案,销售哪个网站招聘效果最好?  c++ stringstream用法详解_c++字符串与数字转换利器  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  制作企业网站建设方案,怎样建设一个公司网站?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  如何快速生成橙子建站落地页链接?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  建站之星后台管理系统如何操作?  如何选择高性价比服务器搭建个人网站?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何挑选优质建站一级代理提升网站排名?  如何通过免费商城建站系统源码自定义网站主题与功能?  定制建站哪家更专业可靠?推荐榜单揭晓  广州建站公司哪家好?十大优质服务商推荐  香港服务器部署网站为何提示未备案?  如何设计高效校园网站?  北京网站制作的公司有哪些,北京白云观官方网站?  如何生成腾讯云建站专用兑换码?  如何通过NAT技术实现内网高效建站?  C++如何编写函数模板?(泛型编程入门)  装修招标网站设计制作流程,装修招标流程?  如何在阿里云通过域名搭建网站?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  山东云建站价格为何差异显著?  如何使用Golang安装API文档生成工具_快速生成接口文档  公司门户网站制作流程,华为官网怎么做?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  如何快速搭建支持数据库操作的智能建站平台?  建站主机系统SEO优化与智能配置核心关键词操作指南  建站之星后台密码如何安全设置与找回?  存储型VPS适合搭建中小型网站吗?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  如何制作网站标识牌,动态网站如何制作(教程)?  如何快速上传自定义模板至建站之星?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  东莞市网站制作公司有哪些,东莞找工作用什么网站好? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。