react 上拉加載

ps:適合h5頁(yè)面的滾動(dòng)條插件法梯,支持app內(nèi)嵌頁(yè)面苔货。

1. 下載scroll-pullLoad

? ??npm install --save react-pullload

2.引用

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

3. css 樣式

? ? ? ?*引用插件內(nèi)的樣式

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

? ? ?直接引用插件內(nèi)的樣式可能會(huì)打包是出現(xiàn)問(wèn)題

? ? ? 可以直接用這個(gè):

????????????.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: '松開(kāi)刷新';

????????????}

????????????.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: '沒(méi)有更多';

????????}

????????.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標(biāo)簽包裹

? ??<ReactPullLoad

? ? ? ? ? ? ? ? ? ? downEnough={150}

? ? ? ? ? ? ? ? ? ? ref="reactpullload"

? ? ? ? ? ? ? ? ? ? className="block"

? ? ? ? ? ? ? ? ? ? ?*加上下面注釋的屬性會(huì)出問(wèn)題

? ? ? ? ? ? ? ? ? ? // isBlockContainer={true}

? ? ? ? ? ? ? ? ? ? action={this.state.action}

? ? ? ? ? ? ? ? ? ? handleAction={this.handleAction}

? ? ? ? ? ? ? ? ? ? hasMore={this.state.hasMore}

? ? ? ? ? ? ? ? ? ? style={{paddingTop: 132}}

? ? ? ? ? ? ? ? ? ? distanceBottom={1000}>

? ? ? ? ? ? ? ? ? ? .....? this is list

? ? ? ? ? ? ? ? ? ? </ReactPullLoad>

5.scroll函數(shù)

constructor(props) {

? ? ? ? super(props);

? ? ? ? this.state = {

? ? ? ? ? ? ? // scroll 相關(guān)

? ? ? ? ? ? ? hasMore: true,

? ? ? ? ? ? ? action: STATS.init,

? ? ? ? }

? ? }

// 滾動(dòng)條

? ? 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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市立哑,隨后出現(xiàn)的幾起案子夜惭,更是在濱河造成了極大的恐慌,老刑警劉巖铛绰,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诈茧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捂掰,警方通過(guò)查閱死者的電腦和手機(jī)敢会,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)这嚣,“玉大人鸥昏,你說(shuō)我怎么就攤上這事〗阒悖” “怎么了吏垮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)罐旗。 經(jīng)常有香客問(wèn)我膳汪,道長(zhǎng),這世上最難降的妖魔是什么尤莺? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任旅敷,我火速辦了婚禮,結(jié)果婚禮上颤霎,老公的妹妹穿的比我還像新娘。我一直安慰自己涂滴,他們只是感情好友酱,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著柔纵,像睡著了一般缔杉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搁料,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天或详,我揣著相機(jī)與錄音系羞,去河邊找鬼。 笑死霸琴,一個(gè)胖子當(dāng)著我的面吹牛椒振,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播梧乘,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼澎迎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了选调?” 一聲冷哼從身側(cè)響起夹供,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仁堪,沒(méi)想到半個(gè)月后哮洽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弦聂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年鸟辅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片横浑。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剔桨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出徙融,到底是詐尸還是另有隱情洒缀,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布欺冀,位于F島的核電站树绩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏隐轩。R本人自食惡果不足惜饺饭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望职车。 院中可真熱鬧瘫俊,春花似錦、人聲如沸悴灵。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)积瞒。三九已至川尖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茫孔,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肪获,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓畔濒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親赋朦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子篓冲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容