一级片大奶子_色又黄又爽18禁免费视频_热久久久久久久_久久久精品一区二区_日韩av不卡在线播放_精品国内自产拍在线观看视频

商城系統(tǒng) 注冊(cè)

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

2020-09-27|HiShop
導(dǎo)讀:瀑布流布局是目前很普遍的布局形式,那么小程序瀑布流要如何實(shí)現(xiàn)解決,網(wǎng)上能搜到的小程序瀑布流解決方案,要么代碼復(fù)雜、邏輯混亂,要么實(shí)現(xiàn)不了業(yè)務(wù)功能,所以把我在項(xiàng)目中的實(shí)現(xiàn)方...

瀑布流布局是目前很普遍的布局形式,那么小程序瀑布流要如何實(shí)現(xiàn)解決,網(wǎng)上能搜到的小程序瀑布流解決方案,要么代碼復(fù)雜、邏輯混亂,要么實(shí)現(xiàn)不了業(yè)務(wù)功能,所以把我在項(xiàng)目中的實(shí)現(xiàn)方案給大家分享下。

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

最簡(jiǎn)單的實(shí)現(xiàn)方案,不適用有分頁(yè)的場(chǎng)景。

這個(gè)方案簡(jiǎn)單的原因是因?yàn)閮H僅使用了css的屬性。 
使用column-count 屬性可以指定頁(yè)面顯示的列數(shù),一般瀑布流都是2列,所以可以定義class

.list-masonry {
  column-count: 2; //2列
  column-gap: 20rpx; //列間距
}

 

界面定義也很簡(jiǎn)單

<view class='list-masonry'>
 <block wx:for="{{goodsList}}" wx:key="{{item.id}}">
 <template is='goodsCard' data="{{data:item}}" />
 </block>
</view>

 

其中,goodsList為頁(yè)面展示的數(shù)據(jù),goodsCard為瀑布流的卡片,這個(gè)很容易理解。

注意,瀑布流的卡片需要css屬性 display: inline-block; 將卡片設(shè)置為 內(nèi)聯(lián)元素。image 組件設(shè)置縮放模式 mode="widthFix" 來(lái)保持圖片寬高比。

column-count 屬性默認(rèn)是以列的形式來(lái)填充數(shù)據(jù)的。比如我們有20條數(shù)據(jù),1 ~ 10 條數(shù)據(jù)會(huì)展示在左邊第一列,11 ~ 20 條數(shù)據(jù)會(huì)展示在第二列。 
如果有分頁(yè),再往數(shù)組中增加20條數(shù)據(jù)后,就會(huì)變成 1 ~ 20 條數(shù)據(jù)會(huì)在左邊,21 ~ 40 條數(shù)據(jù)會(huì)展示在右邊。用戶體驗(yàn)非常差。 
由于 column-fill: balance; 填充屬性無(wú)效,無(wú)法指定填充順序?yàn)樾械男问健?nbsp;
所以這種實(shí)現(xiàn)方案只能一下加載完所有數(shù)據(jù),不適用于分頁(yè)。 
Component實(shí)現(xiàn)瀑布流,功能強(qiáng)大,滑動(dòng)流暢

通過(guò)自定義組件,用自己的思路實(shí)現(xiàn)瀑布流。然后在需要瀑布流的地方直接調(diào)用,方便復(fù)用。

沒(méi)有Demo!! 跟著我的步驟一步一步來(lái),就能輕松實(shí)現(xiàn)。

  1. 首先創(chuàng)建瀑布流自定義組件文件。

建議在項(xiàng)目根目錄創(chuàng)建文件夾component,然后在該目錄下創(chuàng)建文件夾WaterFallView,最后在WaterFallView下創(chuàng)建component。(鼠標(biāo)右鍵->新建->Component)。

 


2. 設(shè)計(jì)瀑布流的wxml。

瀑布流的結(jié)構(gòu)簡(jiǎn)單,只有左右2列。所以在設(shè)計(jì)UI的時(shí)候,布局很簡(jiǎn)單。

<view class='fall-container'>
 <!-- 左邊一列 -->
 <view class='fall-left'>
 <block wx:for="{{leftList}}" wx:key="{{item.id}}">
 <!--瀑布流內(nèi)容卡片-->
 <template is='goodsCard' data="{{data:item}}" />
 </block>
 </view>
 <!--右邊一列 -->
 <view class='fall-right'>
 <block wx:for="{{rightList}}" wx:key="{{item.id}}">
 <!--瀑布流內(nèi)容卡片-->
 <template is='goodsCard' data="{{data:item}}" />
 </block>
 </view>

</view>

左右兩邊,一邊一個(gè)View。通過(guò)這兩個(gè)View 來(lái)展示瀑布流的兩列。每個(gè)View對(duì)應(yīng)一個(gè)數(shù)據(jù)源,由此可見(jiàn),這套思路的重點(diǎn)是這個(gè)兩個(gè)數(shù)據(jù)源的處理。每個(gè)View中的template 為瀑布流中的卡片,就不介紹了。 
超過(guò)兩列的瀑布流比較少見(jiàn),本篇不考慮,但可用本篇的思路來(lái)實(shí)現(xiàn)。

  1. css樣式
.fall-container {
  width: 100%;
  display: flex;
}

.fall-left {
  display: flex;
  flex-direction: column;
}

.fall-right {
  display: flex;
  flex-direction: column;
  margin-left: 20rpx;
}

 

  1. 具體實(shí)現(xiàn)邏輯

根據(jù)上面的 wxml 結(jié)構(gòu),這個(gè)組件的核心邏輯就是如何把要展示的數(shù)據(jù)item 放入leftList、rightList這兩個(gè)數(shù)組中。

如何分配數(shù)據(jù)item?這個(gè)簡(jiǎn)單,我們可以定義2個(gè)變量 leftHight、rightHight,來(lái)分別記錄leftList、rightList數(shù)組中圖片的高度(可以理解為左邊View、右邊View的高度,其實(shí)只是圖片的高度,但已滿足瀑布流的的需求)。當(dāng)leftHight 大于 rightHight時(shí),把數(shù)據(jù)放入rightList,并讓rightHight疊加數(shù)據(jù)中圖片的高度。當(dāng)rightHight大于 leftHight 時(shí),把數(shù)據(jù)放入leftList,并讓leftHight 疊加數(shù)據(jù)中圖片的高度。

if (leftHight == rightHight) { //第1個(gè)item放左邊
  leftList.push(tmp);
  leftHight = leftHight + tmp.itemHeight;
} else if (leftHight < rightHight) {
  leftList.push(tmp);
  leftHight = leftHight + tmp.itemHeight;
} else {
  rightList.push(tmp);
  rightHight = rightHight + tmp.itemHeight;
}

 

瀑布流展示圖片的時(shí)候,需要知道圖片的寬高,然后根據(jù)圖片的寬高比來(lái)設(shè)置 image組件的寬高。所以如果你們的數(shù)據(jù)沒(méi)有寬高或?qū)捀弑龋茈y實(shí)現(xiàn)瀑布流。雖然可以通過(guò)代碼獲得圖片寬高,但會(huì)對(duì)性能以及用戶體驗(yàn)有很大影響,不推薦這么做。可以和后臺(tái)同學(xué)商量下,看如何加上寬高數(shù)據(jù)。

 

Component有自己生命周期方法,甚至可以象Page一樣,當(dāng)做一個(gè)單獨(dú)的頁(yè)面使用。可以在他的生命周期方法中獲得到瀑布流的寬度,以及圖片的最大高度。

attached: function () { //第一個(gè)生命周期方法
    wx.getSystemInfo({
      success: (res) => {
 let percentage = 750 / res.windowWidth; //750rpx/屏幕寬度
 let margin = 20 / percentage; //計(jì)算瀑布流間距
        itemWidth = (res.windowWidth - margin) / 2; //計(jì)算 瀑布流展示的寬度
        maxHeight = itemWidth / 0.8 //計(jì)算瀑布流的最大高度,防止長(zhǎng)圖霸屏
 }
 });
 },

 

拿到瀑布流的寬度后,就可以根據(jù)圖片的寬高比,計(jì)算出 image 組件的寬高。

let tmp = listData[i]; //單條數(shù)據(jù)
tmp.width = parseInt(tmp.width); //圖片寬度
tmp.height = parseInt(tmp.height); //圖片高度
tmp.itemWidth = itemWidth    //image 寬度
let per = tmp.width / tmp.itemWidth; //圖片寬高比
tmp.itemHeight = tmp.height / per; //image 高度
if (tmp.itemHeight > maxHeight) {
    tmp.itemHeight = maxHeight; //image 高度,不超過(guò)最大高度
}

 

在template中,image的寬高需要聲明下。單位是px,不是rpx

 <image 
 class='card-img' 
 mode='aspectFill' 
 style='width:{{data.itemWidth}}px;height:{{data.itemHeight}}px;' 
 src='{{data.img}}' 
 lazy-load>
</image> 

 

  1. 所有JS代碼
/**
 * 瀑布流組件
 */

var leftList = new Array();//左側(cè)集合
var rightList = new Array();//右側(cè)集合
var leftHight = 0, rightHight = 0, itemWidth = 0, maxHeight = 0;

Component({
  properties: {},
  data: {
    leftList: [],//左側(cè)集合
    rightList: [],//右側(cè)集合
 },

  attached: function () {
    wx.getSystemInfo({
      success: (res) => {
 let percentage = 750 / res.windowWidth;
 let margin = 20 / percentage;
        itemWidth = (res.windowWidth - margin) / 2;
        maxHeight = itemWidth / 0.8
 }
 });
 },

  methods: {
 /**
     * 填充數(shù)據(jù)
     */
    fillData: function (isPull, listData) {
 if (isPull) { //是否下拉刷新,是的話清除之前的數(shù)據(jù)
        leftList.length = 0;
        rightList.length = 0;
        leftHight = 0;
        rightHight = 0;
 }
 for (let i = 0, len = listData.length; i < len; i++) {
 let tmp = listData[i];
        tmp.width = parseInt(tmp.width);
        tmp.height = parseInt(tmp.height);
        tmp.itemWidth = itemWidth
 let per = tmp.width / tmp.itemWidth;
        tmp.itemHeight = tmp.height / per;
 if (tmp.itemHeight > maxHeight) {
          tmp.itemHeight = maxHeight;
 }

 if (leftHight == rightHight) {
          leftList.push(tmp);
          leftHight = leftHight + tmp.itemHeight;
 } else if (leftHight < rightHight) {
          leftList.push(tmp);
          leftHight = leftHight + tmp.itemHeight;
 } else {
          rightList.push(tmp);
          rightHight = rightHight + tmp.itemHeight;
 }
 }

 this.setData({
        leftList: leftList,
        rightList: rightList,
 });
 },
 }
})

 

  1. 使用瀑布流

a. 注冊(cè)自定義組件 
在使用自定義組件的Page的json文件中聲明要使用的組件

{
 ....
 "usingComponents": {
 "waterFallView": "../../component/WaterFallView/WaterFallView"
 }
}

 

b. 在 wxml 中添加組件,并加上 id

<waterFallView id='waterFallView'>
</waterFallView>
c. 在JS中找到組件,并調(diào)用fillData() 方法。下拉刷新時(shí) isFull 傳 true。

  fillData: function (isFull,goods){
    let view = this.selectComponent('#waterFallView');
    view.fillData(isFull, goods);
  },

電話咨詢 預(yù)約演示 0元開(kāi)店
主站蜘蛛池模板: 国产大学生粉嫩无套流白浆|老司机久久99久久精品播放免费|日本国产三级|久久久久久久久久久久久久久久久久=av|欧美日本精品|涩涩91 | 欧美激情视频一区|欧美9999|各种少妇正面bbw撒尿|黄视频网站在线|97综合在线|一本大道在线无码一区 | 成人极品影院|久久综合亚洲色hezyo国|www.在线视频|奇米777四色精品综合影院|土壤污染状况调查|人人草人人插 | 爱福利视频导航|一级=a=a=a级毛片午夜在线播放|国产真实情侣MV|欧美三级视频在线观看|午夜人成免费视频|www.99爱 | 天天爽天天草|久久成人一区二区|国语对白露脸XXXXXX|黄色片视频在线免费观看|川上优在线|中国黄色免费 | 99精品视频99|麻豆水蜜桃|极品美女高潮呻吟国产剧情91|午夜一区一品日本|一个色综合久久|国产欧美久久久久久久久 | 99精品免费在线|能在线观看的一区二区三区|69国产盗摄一区二区三区五区|精品国产一二区|亚洲最新=av网址|日本丰满岳乱妇在线观看 | 亚州一级|国产精品毛片视频|成人免费视频播放|综合免费视频|女人体1963|欧美人与动牲交视频在线观看 | 国产精品久久久久久久浪潮网站|亚洲青草视频|乌克兰18极品XX00喷水|#NAME?|亚洲综合在线一区二区三区|国产超碰人人做人人爱ⅴ=a 91精品一区二区三区在线|情侣偷拍在线一区|天堂网在线.www天堂|成人=a毛片免费全部播放|日本国产一区二区|美女被日在线观看 | 亚洲妇女多毛撒尿XXXⅩ|黄色毛片黄色毛片|公和我做好爽添厨房|日本韩国最新免费观看|日本=a∨精品中文字幕在线|国产免费拔擦拔擦8X高清在线 | 成人字幕网zmw|日本一区高清视频|#NAME?|麻豆播放|麻豆传媒作品|国产高清在线观看一区 | 美女视频黄=a视频免费全程软件=axs|忘忧草在线影院两性视频|久久人妻内射无码一区三区|亚洲精品一区在线观看|日韩精品国产一区二区|中文字幕久精品免 | 中文字幕中文字幕1区|www.久艹|阿v视频免费在线观看|日本三级免费|日本最新一区二区|久久九九爱 | 久久毛片免费看一区二区三区|国产毛多水多高潮高清|一级黄色毛片|久久久久久久网|国产精品美女久久久久=av爽李琼|天天摸天天摸色综合舒服网 | 大内密探零性|国产美女自拍小视频|久久久久久久综合狠狠综合|九九热免费精品|性=a毛片|午夜免费啪啪 | 国内精品久久国产|国产一区二区三区内射高清|一二三四视频在线社区中文字幕2|大地资源在线观看中文免费|午夜精品免费观看|无码成人18禁动漫网站 | 日韩精品三区|国产成人精品=a视频免费福利|色中色综合|国产成人精品一区二区三区四区|国产一级毛片精品完整视频版|国产字幕在线看 | 青青手机在线视频|18男女无套免费视频|国产亚洲1区2区3区|日韩欧美在线综合网|疯狂的欧美乱大交|www四虎 | 亚洲v天堂v手机在线|午夜成年视频|FREEZEFR=aME丰满少妇|日本天堂网站|亚洲热综合|欧美V=a亚洲V=a在线观看日本 | 狠狠色成人一区二区三区|国语对白二区|性猛交xxxx|jαpαnesehd熟女熟妇伦|午夜影院免费版|国产精品自在线拍国产手青青机版 | 6996网站免费观看|麻豆传媒免费在线观看|欧美多p视频|老司机午夜在线|亚洲国产高清理论片|国产在线高清观看 | 人人干人人看|一二三四观看视频社区在线|精选=av|老少妇人妻无码专区视频大码|2015www永久免费观看播放|怡红院日韩 | 亚洲=aV综合=a国产=aV中文|亚洲涩88|久久99精品久久久久久狂牛|无遮挡h肉动漫在线观看|国产亚洲棕合欧美视频|中文字幕在线观 | 精品久久久久国产|欧美日在线|国产18一19sex性护士|不卡国产视频|j=ap=anese36hdxxxx日韩|欧美BBWHD老太大 | 国产精品大全|韩国精品视频一区二区在线播放|啦啦啦www日本高清免费观看|大柠檬导航香蕉导航巨人导航|中国黄色一级|国产成人一卡2卡3卡4卡 | 国产精品视频专区|国产在线国产|精品一区二区三区成人精品|国产不卡在线观看免费视频|蜜桃综合|欧美精品日韩一区 | h黄视频在线观看|日韩精品=a=a=a|高h喷水荡肉爽文np肉色学男男|99精品中文字幕|C=aOPORN成人免费公开|久热久爱 | 欧美成人性生活片|在线不卡一区二区三区|久久伦理影院|欧洲LV尺码大精品久久久|中文字幕无码=a片久久|最新中文字幕一区 | 国产极品粉嫩馒头一线天=av|日韩在线观看|国产第一毛片|少妇又紧又粗又硬又爽视频|欧美人与动zozo|#NAME? | 一区二区三区精液|成人二区三区|99精品国产99久久久久久97|久久久久久高清毛片|亚洲啊啊啊啊啊|亚洲人成亚洲精品 | 全黄h全肉边做边吃奶流浪汉|#NAME?|日本高清二区视频久二区|国模少妇一区两区三区|2018中文字幕在线视频|亚洲=aV国产精品无码 | 久久精品国产精品青草色艺|国产亚洲欧美在线另类|女被啪到深处喷水视频网站|天天看高清特色大片|#NAME?|四虎影像 | 亚洲免费福利|亚洲性夜夜时|亚洲第二页|日本羞羞视频在线观看|私人影院在线|热久久99热 | 不够善良的我们在线观看|亚洲国产欧美在线成人=a=a=a=a|欧美视频一区在线观看|日日干=av|91亚洲精品久久久|九9热这里真品2 | 久久精品国产清高在天天线|天堂在线观看www|毛片=av在线免费观看|精品国产欧美一区二区五十路|老熟女草BX×|人妻慢慢放弃抵抗开始迎合 | #NAME?|久久精品一二三影院|91看剧|欧美性色欧美=a在线视频|五月婷婷激情六月|成人免费一级=a久久 | 无码免费婬=aV片在线观看|免费黄色小视频在线观看|eeuss鲁丝片=aV无码|国产精品videossexohd|亚洲欧美成人一区二区在线|久久www免费人成网站 | 青青草免费在线视频播放|欧美国产一区二区三区|久久综合站|国产=aV视频一区二区|国产精品色在线免费|大片免免费观看视频播放器在线观看 | 日本三级日本三级韩国三级视|国产精品国产自线拍免费|CHIN=a男男互插网站|女邻居丰满的奶水在线观看|免费国产v=a在线观看|国产乱子伦无套一区二区三区 | 性日本少妇|无码粉嫩小泬无套在线观看|一级片九九|99国产精品久久久久久久成人|国产综合片|从大树开始的进化动漫免费观看 | 中文区中文字幕免费看|欧美亚洲网站|luluhei噜噜嘿在线视频|成人xxxxx|#NAME?|精品午夜熟女人妻视频毛片 |