小程序瀑布流布局(js實(shí)現(xiàn))

前言

瀑布流 - 小程序中數(shù)據(jù)列表或者圖片展示難免高度不一,而我們一般固定寬度耙蔑,讓其高度自適應(yīng)泄朴,并無(wú)縫對(duì)接蔬顾。如下圖:


瀑布流.jpg

瀑布流的兩種做法:

  • css:
    在父元素上使用column-count: 2也可以做到兩列排版。但column-count: 2是左右兩列排版昭齐,如果碰巧出現(xiàn)左邊累計(jì)高度過(guò)多大于右邊累計(jì)高度的話尿招,右邊會(huì)出現(xiàn)大片空白區(qū)域。點(diǎn)擊前往
  • js(推薦):
    判斷左右兩邊的累計(jì)高度阱驾,那邊的高度小就谜,便往那邊添加(需要?jiǎng)討B(tài)獲取節(jié)點(diǎn)元素的高度進(jìn)行計(jì)算)。下面用的就是此種方法:

準(zhǔn)備工作

我們需要用到 await 里覆,而使用 await 需要在本地配置中開(kāi)啟增強(qiáng)編譯丧荐。如下圖:


開(kāi)啟增強(qiáng)編譯.jpg

實(shí)現(xiàn)代碼

此方法采用左右兩列布局,判斷兩邊高度喧枷。如果左<右篮奄,填充到左邊,否則填充到右邊
(list不建議一次請(qǐng)求過(guò)多數(shù)據(jù)割去,過(guò)多的數(shù)據(jù)可能會(huì)造成加載慢窟却,可用圖片懶加載優(yōu)化)

  • test.wxml
<!--pages/test/test.wxml-->
<view class="container">
  <view id="left">
    <view wx:for="{{leftList}}" wx:key>
      <image src="{{item.url}}" mode='widthFix'></image>
      <text>{{item.title}}</text>
    </view>
  </view>
  <view id="right">
    <view wx:for="{{rightList}}" wx:key>
      <image src="{{item.url}}" mode='widthFix'></image>
      <text>{{item.title}}</text>
    </view>
  </view>
</view>
  • test.wxss
/* pages/test/test.wxss */
#left, #right{
  width: 48%;
  margin: 0 1%;
  float: left;
}
#left image, #right image{
  width: 100%;
}
  • test.js
//test.js
let leftHeight = 0, rightHeight = 0; //分別定義左右兩邊的高度
let query;
Page({
  data: {
    list: [{
        title: '1',
        url: 'http://zq.jhcms.cn/attachs/photo/201711/20171130_176CFE51B6710715B1BBBEF2F86ACB0C.jpg',
      }, {
        title: '2',
        url: 'http://img3.imgtn.bdimg.com/it/u=1417732605,3777474040&fm=26&gp=0.jpg',
      },{
        title: '3',
        url: 'http://f10.baidu.com/it/u=121654667,1482133440&fm=72',
      },{
        title: '4',
        url: 'http://img3.imgtn.bdimg.com/it/u=1417732605,3777474040&fm=26&gp=0.jpg',
      },{
        title: '5',
        url: 'http://zq.jhcms.cn/attachs/photo/201711/20171130_9E39DA252E3946BE36218D85876C4AB4.jpg',
      },{
        title: '6',
        url: 'http://img3.imgtn.bdimg.com/it/u=1417732605,3777474040&fm=26&gp=0.jpg',
      },{
        title: '7',
        url: 'http://img3.imgtn.bdimg.com/it/u=1417732605,3777474040&fm=26&gp=0.jpg'
      },{
        title: '8',
        url: 'http://img3.imgtn.bdimg.com/it/u=1417732605,3777474040&fm=26&gp=0.jpg',
      },{
        title: '9',
        url: 'http://f10.baidu.com/it/u=121654667,1482133440&fm=72'
      },{
        title: '7',
        url: 'http://img4.imgtn.bdimg.com/it/u=2748975304,2710656664&fm=26&gp=0.jpg'
      },{
        title: '8',
        url: 'http://img2.imgtn.bdimg.com/it/u=1561660534,130168102&fm=26&gp=0.jpg'
      },{
        title: '9',
        url: 'http://img3.imgtn.bdimg.com/it/u=1417732605,3777474040&fm=26&gp=0.jpg'
      },{
        title: '10',
        url: 'http://zq.jhcms.cn/attachs/photo/201711/20171130_176CFE51B6710715B1BBBEF2F86ACB0C.jpg',
      }],
    leftList: [],
    rightList: []
  },
  onLoad() {
    this.isLeft();
  },
  async isLeft() {
    const { list, leftList, rightList } = this.data;
    query = wx.createSelectorQuery();
    for (const item of list) {
      leftHeight <= rightHeight ? leftList.push(item) : rightList.push(item); //判斷兩邊高度,來(lái)覺(jué)得添加到那邊
      await this.getBoxHeight(leftList, rightList);
    }
  },
  getBoxHeight(leftList, rightList) { //獲取左右兩邊高度
    return new Promise((resolve, reject) => {
      this.setData({ leftList, rightList }, () => {
        query.select('#left').boundingClientRect();
        query.select('#right').boundingClientRect();
        query.exec((res) => {
          leftHeight = res[0].height; //獲取左邊列表的高度
          rightHeight = res[1].height; //獲取右邊列表的高度
          resolve();
        });
      });
    })
  }
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呻逆,一起剝皮案震驚了整個(gè)濱河市夸赫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咖城,老刑警劉巖茬腿,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宜雀,死亡現(xiàn)場(chǎng)離奇詭異切平,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)辐董,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門悴品,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人简烘,你說(shuō)我怎么就攤上這事苔严。” “怎么了孤澎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵届氢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我覆旭,道長(zhǎng)退子,這世上最難降的妖魔是什么岖妄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮寂祥,結(jié)果婚禮上衣吠,老公的妹妹穿的比我還像新娘。我一直安慰自己壤靶,他們只是感情好缚俏,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著贮乳,像睡著了一般忧换。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上向拆,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天亚茬,我揣著相機(jī)與錄音,去河邊找鬼浓恳。 笑死刹缝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颈将。 我是一名探鬼主播梢夯,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼晴圾!你這毒婦竟也來(lái)了颂砸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤死姚,失蹤者是張志新(化名)和其女友劉穎人乓,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體都毒,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡色罚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了账劲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戳护。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖涤垫,靈堂內(nèi)的尸體忽然破棺而出姑尺,到底是詐尸還是另有隱情竟终,我是刑警寧澤蝠猬,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站统捶,受9級(jí)特大地震影響榆芦,放射性物質(zhì)發(fā)生泄漏柄粹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一匆绣、第九天 我趴在偏房一處隱蔽的房頂上張望驻右。 院中可真熱鬧,春花似錦崎淳、人聲如沸堪夭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)森爽。三九已至,卻和暖如春嚣镜,著一層夾襖步出監(jiān)牢的瞬間爬迟,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工菊匿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留付呕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓跌捆,卻偏偏與公主長(zhǎng)得像徽职,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子佩厚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344