微信小程序——用Lin UI實現(xiàn)瀑布流和觸底加載

總之先上效果圖


image.png

瀑布流是使用Lin UI實現(xiàn)的所以要先安裝Lin UI

數(shù)據(jù)請求與處理

原始的api有兩個參數(shù)

  • start 獲取記錄的起始序號
  • count 一次獲取記錄的條數(shù)

這是封裝后的函數(shù)之后會用到

static async getLatestSpu(start, count)

這是請求到的數(shù)據(jù)格式

{
"total":1,  // 數(shù)據(jù)總條數(shù)
    "count":10, // 每頁展示條數(shù)
    "page":0,   // 頁碼
    "total_page":1, // 總頁數(shù)
    "items":[
        {
            "title":"ins復(fù)古翠綠NoteBook",
            "subtitle":"林白默默的掏出小本本殃饿,將她說的話一次不漏的記了下來。",
            "img":"",
            "price":"29.99",
            "discount_price":"27.8",
            "description":null,
            "tags":"林白推薦"   // 標(biāo)簽以$分割
        }
    ]
}

瀑布流組件的使用方法

Lin UI中的瀑布流組件使用了小程序中抽象節(jié)點(diǎn)l-water-flow-item中傳入一個組件作為瀑布流中的單元格,之后通過wx.lin.renderWaterFlow(data, refresh, success)函數(shù)進(jìn)行渲染其中data參數(shù)需要一個數(shù)組是瀑布流中所需要的數(shù)據(jù),refresh參數(shù)為是否刷新數(shù)據(jù)(刪除之前已經(jīng)加載的數(shù)據(jù)),success渲染成功后的回調(diào)函數(shù)

編寫瀑布流需要的組件

先新建一個組件蹋盆。
根據(jù)需求Lin UI中的card組件tag組件和price組件很適合用來編寫需要的瀑布流單元格先把他們在json文件中引入

{
  "component": true,
  "usingComponents": {
    "l-card": "/miniprogram_npm/lin-ui/card/index",
    "l-tag": "/miniprogram_npm/lin-ui/tag/index",
    "l-price": "/miniprogram_npm/lin-ui/price/index"
  }
}

這是組件的js文件

Component({
  properties: {
    data: Object,   // 接收瀑布流數(shù)組元素
    showBasePrice: { // 顯示原價
      type: Boolean,
      value: false
    }
  },
  data: {
    tags: []  // 標(biāo)簽數(shù)組
  },
  lifetimes: {
    attached() {
      const tags = this.properties.data.tags.split('$');  // 將標(biāo)簽分割成數(shù)組
      this.setData({tags});
    }
  }
});

有的地方瀑布流不需要顯示原價showBasePrice屬性可以用來控制是否顯示原價
接下來是wxml文件

<l-card type="cover" image="{{data.img}}" title="{{data.title}}" image-mode="widthFix"
        l-class="card-container" l-img-class="card-img" l-title-class="card-title">
    <view class="content-text">
        <view class="tag-container">
            <block wx:for="{{tags}}">
                <l-tag wx:if="{{item}}" bg-color="#DCEBE6" font-color="#557862" l-class="tag-item">{{item}}</l-tag>
            </block>
        </view>
        <view class="price">
<!--            需要顯示原價且有優(yōu)惠價-->
            <block wx:if="{{showDiscount && data.discount_price}}">
                <l-price unit="¥" value="{{data.discount_price}}" unit-color="#557862" value-color="#557862" size="36" bold="600"/>
                <l-price unit="¥" wx:if="{{data.price}}" unit-color="#666" value="{{data.price}}" deleted value-color="#666" del-color="#666"/>
            </block>
<!--            不需要顯示原價-->
            <l-price unit="¥" wx:elif="{{data.discount_price}}" value="{{data.discount_price}}" unit-color="#557862" value-color="#557862" size="36" bold="600"/>
            <l-price unit="¥" wx:else value="{{data.price}}" unit-color="#557862" value-color="#557862" size="36" bold="600"/>
        </view>
        <text class="describe">{{data.subtitle}}</text>
    </view>
</l-card>

wxml中用到的組件用法參考
card組件文檔
tag組件文檔
price組件文檔

wxss文件就不貼了

觸底加載

小程序中因為有onReachBottom()函數(shù)觸底加載比較好實現(xiàn),分頁的控制比較麻煩,所以我寫了一個PageBean用來控制分頁

export class PageBean {
    count;  // 每頁條數(shù)
    start;  // 開始位置
    total;  // 總數(shù)據(jù)條數(shù)
    isEnd = false;  // 是否是最后一頁
    
    // 初始化
    constructor(count = 6) {
        this.start = 0;
        this.count = count;
    }

    // 將pageBean的屬性改到下一頁
    nextPage() {
        if (!this.total || (this.start + this.count) < this.total) {
            this.start += this.count;
        } else {
            this.isEnd = true;
        }
    }
}

下面是觸底翻頁的代碼

async onReachBottom() {
    // 判斷本頁不是最后一頁且沒有在加載
    if (!this.page.isEnd && !this.data.onLoad) {
        // 設(shè)置狀態(tài)正在加載
        this.setData({
            onLoad: true
        });
        const spuList = await Spu.getLatestSpu(this.page.start, this.page.count);
        wx.lin.renderWaterFlow(spuList.items, false, () => {
            this.page.nextPage();
            // 設(shè)置狀態(tài)為加載完畢
            this.setData({
                onLoad: false
            })
        });
    } else if (this.page.isEnd) {
        this.setData({
            isEnd: true
        });
    }
}

page是PageBean的實例化對象友扰,在第一次加載數(shù)據(jù)時設(shè)置page對象的total值,這樣可以保證加載到最后一條后不再加載庶柿。onLoad是表示是否正在加載isEnd表示是否加載到最后一頁

交互反饋

觸底加載需要提示用戶加載狀態(tài)這個微信的wx.showToast()可以做到但是感覺太low了村怪,Lin UI有一個Loadmore組件可以做底部提示

RW5CNX.jpg

是這樣用的

<view>
    <l-water-flow generic:l-water-flow-item="r-goods-water"/>
    <l-loadmore show="{{onLoad}}" type="loading" loading-text="正在加載" line/>
    <l-loadmore show="{{isEnd}}" type="end" end-text="到底了" line/>
</view>

用到的屬性的含義
show:是否顯示頁底提示
type:頁底提示類型
loading-text:加載中狀態(tài)的文案
end-text:加載完成狀態(tài)的文案
line:是否顯示分割線

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市浮庐,隨后出現(xiàn)的幾起案子甚负,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梭域,死亡現(xiàn)場離奇詭異斑举,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)病涨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門富玷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人没宾,你說我怎么就攤上這事凌彬。” “怎么了循衰?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵铲敛,是天一觀的道長。 經(jīng)常有香客問我会钝,道長伐蒋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任迁酸,我火速辦了婚禮先鱼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奸鬓。我一直安慰自己焙畔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布串远。 她就那樣靜靜地躺著宏多,像睡著了一般。 火紅的嫁衣襯著肌膚如雪澡罚。 梳的紋絲不亂的頭發(fā)上伸但,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機(jī)與錄音留搔,去河邊找鬼更胖。 笑死,一個胖子當(dāng)著我的面吹牛隔显,可吹牛的內(nèi)容都是我干的却妨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼荣月,長吁一口氣:“原來是場噩夢啊……” “哼管呵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哺窄,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤捐下,失蹤者是張志新(化名)和其女友劉穎账锹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坷襟,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奸柬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了婴程。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片廓奕。...
    茶點(diǎn)故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖档叔,靈堂內(nèi)的尸體忽然破棺而出桌粉,到底是詐尸還是另有隱情,我是刑警寧澤衙四,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布铃肯,位于F島的核電站,受9級特大地震影響传蹈,放射性物質(zhì)發(fā)生泄漏押逼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一惦界、第九天 我趴在偏房一處隱蔽的房頂上張望挑格。 院中可真熱鬧,春花似錦沾歪、人聲如沸漂彤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽显歧。三九已至,卻和暖如春确镊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背范删。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工蕾域, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人到旦。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓旨巷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親添忘。 傳聞我的和親對象是個殘疾皇子采呐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評論 2 354

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

  • 因新工作主要負(fù)責(zé)微信小程序這一塊,最近的重心就移到這一塊搁骑,該博客是對微信小程序整體的整理歸納以及標(biāo)明一些細(xì)節(jié)點(diǎn)斧吐,初...
    majun00閱讀 7,341評論 0 9
  • 連接連接 大哥大法官
    禾楓沐雨閱讀 354評論 0 0
  • 今天你在意的一切又固,困住你的枷鎖,所有的煤率、明天都將不復(fù)存在仰冠。 你在意什么,就會為什么所困蝶糯。
    墨跡未染閱讀 259評論 0 0
  • 聽著一曲《紅豆》安慰著入夢洋只,詞那么動容,王菲唱的那么情真昼捍,似幻影中點(diǎn)點(diǎn)滴滴的相思夢…… 忍不住拿起手機(jī)识虚,敲打起心中...
    上善若水菇?jīng)?/span>閱讀 283評論 0 0