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

上拉或者下拉刷新的需求在移动端是非常常见的需求,大部分情况下,实现这个效果都使用网上现有的解决方案,例如有人使用swiper这个插件, 也有人使用iScroll这个滚动插件。本文的示例是利用iscroll实现的下拉刷新效果。

iScroll简介

iScrool是目前最成熟的自定义滚动解决方案之一,在移动端和PC有很好的兼容性。iScroll官方提供了5个不同的版本:

  • iscroll.js 通用版 包含了大部分公共特性
  • iscroll-lite.js 缩减版 削减了一些功能特性,例如:滚动条,鼠标滚轮等等
  • iscroll-probe.js 探索版 此版本可以满足你获取滚动条位置的需求。
  • iscroll-zoom.js 滚动缩放版
  • iscroll-infinite.js 无限制版

根据不同的需求,选择相应的版本,当前的示例中,我们选择的是iscroll-probe.js版。
Gitbook地址:iScroll API 中文版

详细使用

代码思路则是:利用监听滚动条的scroll事件,判断下拉或者上拉的距离,做上触发距离标记,当scrollEnd事件触发时,执行数据加载。让我们看核心部分代码:

HTML代码结构

<div id="MyScroller" class="main">
    <div class="warpper">
        <div id="PullDown" class="scroller-pullDown" style="display: none;">
            <img style="width: 20px; height: 20px;" src="rolling.svg" />
            <span id="pullDown-msg" class="pull-down-msg">下拉刷新</span>
        </div>
        <ul id="Content" class="dropdown-list">
        </ul>
        <div id="PullUp" class="scroller-pullUp" style="display: none;">
            <img style="width: 20px; height: 20px;" src="rolling.svg" />
            <span id="pullUp-msg" class="pull-up-msg">上拉刷新</span>
        </div>
    </div>
</div>

CSS样式

.scroller {
    position: relative;
    width: 100%;
    height: 100%;
}

.scroller .warpper {
    position: absolute;
    width: 100%;
}

.scroller-pullDown, .scroller-pullUp {
    width: 100%;
    height: 30px;
    padding: 10px 0;
    text-align: center;
}

.dropdown-list {
    padding: 0;
    margin: 0;
}

.dropdown-list li {
    width: 100%;
    background: #ddd;
    line-height: 45px;
    text-align: center;
    color: #FFF;
    border-bottom: 1px solid #FFF;
}

javascript

var pullDown = document.querySelector("#PullDown"),
    pullUp = document.querySelector("#PullUp"),
    isPulled = false; // 拉动标记

var myScroll = new IScroll(‘#MyScroller‘, {
    probeType: 3,
    mouseWheel: true,
    scrollbars: true,
    preventDefault: false,
    fadeScrollbars: true
});

myScroll.on(‘scroll‘, function() {
    var height = this.y,
        bottomHeight = this.maxScrollY - height;

    // 控制下拉显示
    if (height >= 60) {
        pullDown.style.display = "block";
        isPulled = true;
        return;
    }
    else if (height < 60 && height >= 0) {
        pullDown.style.display = "none";
        return;
    }

    // 控制上拉显示
    if (bottomHeight >= 60) {
        pullUp.style.display = "block";
        isPulled = true;
        return;
    }
    else if (bottomHeight < 60 && bottomHeight >= 0) {
        pullUp.style.display = "none";
        return;
    }
})

myScroll.on(‘scrollEnd‘, function() { // 滚动结束
    if (isPulled) { // 如果达到触发条件,则执行加载
        isPulled = false;
        appendContent(getContents());
        myScroll.refresh();
    }
});

完整的demo请看:

http://wewoor.github.io/js-lab/iscroll-pulldown-load/index.html

原文地址:

http://imziv.com/blog/article/read.htm?id=73

时间: 2024-10-26 18:36:45

使用iScroll实现上拉或者下拉刷新的相关文章

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

ListView装上拉电阻下拉刷新

主要用到了这个几个文件.MainActivity是界面的Activity,MyAdapter是ListView的自己定义适配,MyListView是自己定义带头部LIistView,假设仅仅须要上拉载入就不须要:activity_main.xml是住界面.item.xml是ListView的子布局里面仅仅有一个TextView,listview_footer.xml是listview的载入很多其它的底部布局,listview_header.xml是listview的头部布局. MainActiv

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

#Java Web累积#关于MUI的上滑和下拉加载

其实按照MUI的文档去写,也没什么问题: JSP中: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html><head> <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scal

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

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

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

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

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-

理解:浮空的时候外部一定要带上上拉或者下拉电阻,否则可能导致中断不断触发

浮空的时候外部一定要带上上拉或者下拉电阻,否则可能导致中断不断触发 为什么呢? 浮空,相当于此端口在默认情况下什么都不接,呈高阻态.(IO 输入状态,没接pin) IO输入状态,不接pin就可以不断产生中断,可以这样理解吗? 不可以. IO输入状态检测到上升或下降沿触发中断 因为IO输入状态,又没有接Pin,电平可能随机变化的.变化就有上升沿或下降沿. 磁场感应导致的还是? 不一定,芯片内部状态也有可能导致.