react 上拉加载

ps:适合h5页面的滚动条插件,支持app内嵌页面。

1. 下载scroll-pullLoad

    npm install --save react-pullload

2.引用

    import ReactPullLoad, { STATS } from "react-pullload";

3. css 样式

       *引用插件内的样式

        import "node_modules/react-pullload/dist/ReactPullLoad.css";

     直接引用插件内的样式可能会打包是出现问题

      可以直接用这个:

            .pull-load {

                      position: relative;

                      overflow-y: scroll;

                      -webkit-overflow-scrolling: touch;

            }

            .pull-load-head {

                      position: absolute;

                      transform: translate3d(0px, -100%, 0px);

                      width: 100%;

            }

            .state-refreshing .pull-load-head,

            .state-refreshed .pull-load-head {

                      position: relative;

                      transform: none;

            }

            .pull-load-body {

                      position: relative;

            }

            .state-refreshing .pull-load-body {

                      transition: transform 0.2s;

            }

            .state-reset .pull-load-body {

                      transition: transform 0.2s;

            }

            .pull-load-head-default {

                      text-align: center;

                      font-size: 12px;

                      line-height: 0.8rem;

                      color: #7676a1;

            }

            .state-pulling .pull-load-head-default:after {

                      content: '下拉刷新';

            }

            .state-pulling.enough .pull-load-head-default:after {

                      content: '松开刷新';

            }

            .state-refreshing .pull-load-head-default:after {

                      content: '正在刷新...';

            }

            .state-refreshed .pull-load-head-default:after {

                      content: '刷新成功';

            }

            .state-pulling .pull-load-head-default {

                      opacity: 1;

            }

            .state-pulling .pull-load-head-default i {

                  display: inline-block;

                  font-size: 0.3rem;

                  margin-right: .6em;

                  margin-top: -3px;

                  vertical-align: middle;

                  height: 0.3rem;

                  border-left: 1px solid;

                  position: relative;

                  transition: transform .3s ease;

            }

            .state-pulling .pull-load-head-default i:before,

            .state-pulling .pull-load-head-default i:after {

                  content: '';

                  position: absolute;

                  font-size: .5em;

                  width: 1em;

                  bottom: 0px;

                  border-top: 1px solid;

            }

            .state-pulling .pull-load-head-default i:before {

                  right: 1px;

                  transform: rotate(50deg);

                  transform-origin: right;

            }

            .state-pulling .pull-load-head-default i:after {

                  left: 0px;

                  transform: rotate(-50deg);

                  transform-origin: left;

            }

            .state-pulling.enough .pull-load-head-default i {

                  transform: rotate(180deg);

            }

            .state-refreshing .pull-load-head-default i {

                  margin-right: 10px;

                  margin-top: -3px;

                  display: inline-block;

                  vertical-align: middle;

                  font-size: 0.3rem;

                  width: 0.3rem;

                  height: 0.3rem;

                  border: 2px solid #9494b6;

                  border-top-color: #fff;

                  border-radius: 100%;

                  animation: circle .8s infinite linear;

            }

            .state-refreshed .pull-load-head-default {

                  opacity: 1;

                  transition: opacity 1s;

            }

            .state-refreshed .pull-load-head-default i {

                display: inline-block;

                box-sizing: content-box;

                vertical-align: middle;

                margin-right: 10px;

                margin-top: -3px;

                font-size: 14px;

                height: 1em;

                width: 1em;

                border: 2px solid;

                border-radius: 100%;

                position: relative;

         }

         .state-refreshed .pull-load-head-default i:before {

               content: '';

              position: absolute;

              top: -2px;

              left: 4px;

              height: 11px;

              width: 5px;

              border: solid;

              border-width: 0 2px 2px 0;

              transform: rotate(40deg);

        }

        .pull-load-footer-default {

              text-align: center;

              font-size: 12px;

              line-height: 0.8rem;

              color: #7676a1;

       }

        .state-loading .pull-load-footer-default:after {

              content: '加载更多';

        }

        .pull-load-footer-default.nomore:after {

              content: '没有更多';

        }

        .state-loading .pull-load-footer-default i {

              margin-right: 10px;

              margin-top: -3px;

              display: inline-block;

              vertical-align: middle;

              font-size: 0.3rem;

              width: 0.3rem;

              height: 0.3rem;

              border: 2px solid #9494b6;

              border-top-color: #fff;

              border-radius: 100%;

              animation: circle .8s infinite linear;

        }

        @keyframes circle {

             100% {

                    transform: rotate(360deg);

              }

        }

4.pullLoad标签包裹

    <ReactPullLoad

                    downEnough={150}

                    ref="reactpullload"

                    className="block"

                     *加上下面注释的属性会出问题

                    // isBlockContainer={true}

                    action={this.state.action}

                    handleAction={this.handleAction}

                    hasMore={this.state.hasMore}

                    style={{paddingTop: 132}}

                    distanceBottom={1000}>

                    .....  this is list

                    </ReactPullLoad>

5.scroll函数

constructor(props) {

        super(props);

        this.state = {

              // scroll 相关

              hasMore: true,

              action: STATS.init,

        }

    }

// 滚动条

    handleAction = (action) => {

      if(action === this.state.action ||

        action === STATS.refreshing && this.state.action === STATS.loading ||

        action === STATS.loading && this.state.action === STATS.refreshing){

        return false

      }

      if(action === STATS.refreshing){//刷新

          setTimeout(()=>{

                  //refreshing complete

                下拉刷新

          }, 1000)

      } else if(action === STATS.loading){//加载更多

        this.setState({

          hasMore: true

        });

        setTimeout(()=>{

                  if(this.state.index === this.state.curPage){

                         this.setState({

                                 action: STATS.reset,

                                  hasMore: false

                           });

                        } else{

                                    上拉加载....

                          }

            }, 1000)

      }

      this.setState({

        action: action

      })

    }


        这是react-pullLoad作者npm插件地址:https://www.npmjs.com/package/react-pullload

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348

推荐阅读更多精彩内容