在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

微信小程序中完成瀑布流布局與無限加載

微信小程序中完成瀑布流布局與無限加載

更新時間:2025-10-08 文章作者:未知 信息來源:網絡 閱讀次數:

微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一...
微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創新,經過將近兩年的發展,已經構造了新的小程序開發環境和開發者生態。

瀑布流布局是一種比較流行的頁面布局方式,最典型的就是Pinterest.com,每個卡片的高度不都一樣,形成一種參差不齊的美感。

在HTML5中,我們可以找到很多基于jQuery之類實現的瀑布流布局插件,輕松做出這樣的布局形式。在微信小程序中,我們也可以做出這樣的效果,不過由于小程序框架的一些特性,在實現思路上還是有一些差別的。

今天我們就來看一下如何在小程序中去實現這種瀑布流布局:

小程序瀑布流布局

我們要實現的是一個固定2列的布局,然后將圖片數據動態加載進這兩列中(而加載進來的圖片,會根據圖片實際的尺寸,來決定到底是放在左列還是右列中)。


/* 單個圖片容器的樣式 */.img_item { width: 48%; margin: 1%; display: inline-block; vertical-align: top;
}

我們知道,在HTML中,我們要動態加載圖片的話,通常會使用new Image()創建一個圖片對象,然后通過它來動態加載一個url指向的圖片,并獲取圖片的實際尺寸等信息。而在小程序框架中,并沒有提供相應的JS對象來處理圖片加載。其實我們可以借助wxml中的<image>組件來完成這樣的功能,雖然有點繞,但還是能滿足我們的功能要求的。


<!-- 在頁面上放一個隱藏區域,并用image組件去加載一個或多個圖片資源 --><view style="display:none">
<image wx:for="{{images}}" wx:key="id" id="{{item.id}}" src="{{item.pic}}" bindload="onImageLoad"></image></view>

我們可以在Page中通過數據綁定,來傳遞要加載的圖片信息到wxml中,讓<image>組件去加載圖片資源,然后當圖片加載完成的時候,通過bindload指定的事件處理函數來做進一步處理。

我們來看一下Page文件中定義的onImageLoad函數。在其中,我們可以從傳入的事件對象e上,獲取到<image>組件的豐富信息,包括通過它加載進來的圖片的實際大小。然后我們將圖片按照頁面上實際需要顯示的尺寸,計算出同比例縮放后的尺寸。接著,我們可以根據左右兩列目前累積的內容高度,來決定把當前加載進來的圖片放到哪一邊。

let col1H = 0;let col2H = 0;

Page({    data: {        scrollH: 0,        imgWidth: 0,        loadingCount: 0,        images: [],        col1: [],        col2: []
   },    onLoad: function () {
       wx.getSystemInfo({            success: (res) => {                
       let ww = res.windowWidth;                
       let wh = res.windowHeight;                
       let imgWidth = ww * 0.48;                
       let scrollH = wh;                
       this.setData({                    
       scrollH: scrollH, 
       imgWidth: imgWidth
               });                //加載首組圖片
               this.loadImages();
           }
       })
   },    onImageLoad: function (e) {        
   let imageId = e.currentTarget.id;        
   let oImgW = e.detail.width;         //圖片原始寬度
       let oImgH = e.detail.height;        //圖片原始高度
       let imgWidth = this.data.imgWidth;  //圖片設置的寬度
       let scale = imgWidth / oImgW;        //比例計算
       let imgHeight = oImgH * scale;      //自適應高度

       let images = this.data.images;        let imageObj = null;        
       for (let i = 0; i < images.length; i++) {            let img = images[i];            
       if (img.id === imageId) {
               imageObj = img;                break;
           }
       }

       imageObj.height = imgHeight;        
       let loadingCount = this.data.loadingCount - 1;        
       let col1 = this.data.col1;        
       let col2 = this.data.col2;        //判斷當前圖片添加到左列還是右列
       if (col1H <= col2H) {
           col1H += imgHeight;
           col1.push(imageObj);
       } else {
           col2H += imgHeight;
           col2.push(imageObj);
       }        let data = {            
       loadingCount: loadingCount,            col1: col1,            col2: col2
       };        //當前這組圖片已加載完畢,則清空圖片臨時加載區域的內容
       if (!loadingCount) {
           data.images = [];
       }        this.setData(data);
   },    loadImages: function () {        let images = [
           { pic: "../../images/1.png", height: 0 },
           { pic: "../../images/2.png", height: 0 },
           { pic: "../../images/3.png", height: 0 },
           { pic: "../../images/4.png", height: 0 },
           { pic: "../../images/5.png", height: 0 },
           { pic: "../../images/6.png", height: 0 },
           { pic: "../../images/7.png", height: 0 },
           { pic: "../../images/8.png", height: 0 },
           { pic: "../../images/9.png", height: 0 },
           { pic: "../../images/10.png", height: 0 },
           { pic: "../../images/11.png", height: 0 },
           { pic: "../../images/12.png", height: 0 },
           { pic: "../../images/13.png", height: 0 },
           { pic: "../../images/14.png", height: 0 }
       ];        let baseId = "img-" + (+new Date());       
        for (let i = 0; i < images.length; i++) {
           images[i].id = baseId + "-" + i;
       }        this.setData({            
       loadingCount: images.length,            images: images
       });
   }

})
  if (col1H <= col2H) {
            col1H += imgHeight;
            col1.push(imageObj);
        } else {
            col2H += imgHeight;
            col2.push(imageObj);
        }        let data = {            loadingCount: loadingCount,            col1: col1,            col2: col2
        };        //當前這組圖片已加載完畢,則清空圖片臨時加載區域的內容
        if (!loadingCount) {
            data.images = [];
        }        this.setData(data);
    },    loadImages: function () {        let images = [
            { pic: "../../images/1.png", height: 0 },
            { pic: "../../images/2.png", height: 0 },
            { pic: "../../images/3.png", height: 0 },
            { pic: "../../images/4.png", height: 0 },
            { pic: "../../images/5.png", height: 0 },
            { pic: "../../images/6.png", height: 0 },
            { pic: "../../images/7.png", height: 0 },
            { pic: "../../images/8.png", height: 0 },
            { pic: "../../images/9.png", height: 0 },
            { pic: "../../images/10.png", height: 0 },
            { pic: "../../images/11.png", height: 0 },
            { pic: "../../images/12.png", height: 0 },
            { pic: "../../images/13.png", height: 0 },
            { pic: "../../images/14.png", height: 0 }
        ];        let baseId = "img-" + (+new Date());        
        for (let i = 0; i < images.length; i++) {
            images[i].id = baseId + "-" + i;
        }        this.setData({            loadingCount: images.length,            images: images
        });
    }
})


這里是顯示在兩列圖片的wxml代碼,我們可以看到在<scroll-view>組件上,我們通過使用bindscrolltolower設置了事件監聽函數,當滾動到底部的時候,會觸發loadImages去再加載下一組的圖片數據,這樣就形成了無限的加載:

<scroll-view scroll-y="true" style="height:{{scrollH}}px" bindscrolltolower="loadImages">
  <view style="width:100%">
    <view class="img_item">
      <view wx:for="{{col1}}" wx:key="id">
        <image src="{{item.pic}}" style="width:100%;height:{{item.height}}px"></image>
      </view>
    </view>
    <view class="img_item">
      <view wx:for="{{col2}}" wx:key="id">
        <image src="{{item.pic}}" style="width:100%;height:{{item.height}}px"></image>
      </view>
    </view>
  </view>
</scroll-view>


以上就是微信小程序中實現瀑布流布局和無限加載的詳細內容,更多請關注php中文網其它相關文章!


小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 国产91视频一区| 手机av在线网| 国产在线拍揄自揄拍无码| 国产二区视频在线播放| 老司机午夜网站| 亚洲欧美国产中文| 久久黄色免费看| 成人精品小视频| 国产偷人视频免费| r级无码视频在线观看| 熟女视频一区二区三区| 国产精欧美一区二区三区白种人| 黄色在线视频网| 能在线观看的av网站| 亚洲少妇第一页| 日本中文字幕精品—区二区| 三上悠亚av一区二区三区| 亚洲五月天综合| 污视频网址在线观看| 777视频在线| 污污视频在线免费| www.激情网| 无码aⅴ精品一区二区三区浪潮| 久久成人免费观看| 无码人妻精品一区二区三区66| 成人在线免费播放视频| 色呦色呦色精品| 久久久久久久久久伊人| 久久这里只有精品23| www一区二区www免费| 天天干天天干天天干天天干天天干| 无需播放器的av| 激情六月天婷婷| 国产超级av在线| 三级性生活视频| 欧美成人免费在线观看视频| 久久黄色免费看| 影音先锋男人的网站| 国产精品网站免费| 777一区二区| 日本熟妇人妻xxxx| 久久这里只精品| 99久久国产综合精品五月天喷水| 东京热加勒比无码少妇| 亚洲精品成人在线播放| 缅甸午夜性猛交xxxx| 久久久久久久久久久久91| 九九久久九九久久| 亚洲视频在线a| 2018中文字幕第一页| 一级做a免费视频| 国产美女无遮挡网站| 蜜臀av性久久久久蜜臀av| 又粗又黑又大的吊av| 欧美日韩一级在线| 亚洲欧美日韩一级| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 欧美一级免费在线| www.99av.com| 男女曰b免费视频| 日韩精品在线中文字幕| 三级av免费看| 超碰人人草人人| 91日韩视频在线观看| 99视频在线免费播放| 最新av在线免费观看| 日韩欧美理论片| 香蕉视频999| 天天色综合天天色| 无码内射中文字幕岛国片| 精品久久一二三| 国产高清av在线播放| 久久这里只有精品8| 一道本在线观看视频| 在线观看av免费观看| 午夜福利123| 欧美国产日韩另类 | 四虎永久免费网站| 伊人成人免费视频| 91小视频在线播放| 91成人在线视频观看| 国产欧美自拍视频| 日韩成人手机在线| 精品无码一区二区三区爱欲| 农民人伦一区二区三区| 日韩av片在线看| 免费日韩视频在线观看| 国产一级特黄a大片免费| 中文字幕 91| 大地资源网在线观看免费官网| 神马午夜伦理影院| ww国产内射精品后入国产| 99精品视频在线看| 波多结衣在线观看| 青娱乐国产精品视频| 久久av高潮av| 另类小说第一页| 欧美少妇一区二区三区| 成人av在线播放观看| 午夜精品久久久久久久无码| wwww.国产| 成人在线国产视频| 国产一级特黄a大片免费| 路边理发店露脸熟妇泻火| 天堂8在线天堂资源bt| 国产淫片av片久久久久久| 四虎免费在线观看视频| 国产真实乱子伦| 激情五月五月婷婷| 日批视频在线免费看| 国产三级中文字幕| 99久久国产宗和精品1上映| 日本一二三四区视频| 春日野结衣av| 男女爱爱视频网站| 亚洲精品久久久中文字幕| 免费国产a级片| 欧美日韩午夜爽爽| 欧美一级特黄aaa| 国产一区亚洲二区三区| 欧美一级爱爱视频| 欧洲在线免费视频| 狠狠热免费视频| 日韩免费视频播放| 精品一区二区三区毛片| 黄色手机在线视频| 苍井空浴缸大战猛男120分钟| 国产高清不卡无码视频| 欧洲在线免费视频| 欧美激情第3页| 天天干天天av| 天天操天天爱天天爽| 日本免费黄视频| 久久视频这里有精品| 国产freexxxx性播放麻豆| 国产又粗又猛大又黄又爽| 在线观看国产一级片| www.日本xxxx| 亚洲精品一二三四五区| www黄色av| 99久久国产宗和精品1上映| 久久久久久久久久久久久国产精品 | 狠狠97人人婷婷五月| 欧美极品少妇无套实战| 日本免费黄色小视频| 国产成人亚洲综合无码| 福利视频一区二区三区四区| 成人在线视频一区二区三区 | xxx中文字幕| 超级碰在线观看| 粉嫩av一区二区三区天美传媒| 干日本少妇视频| 日本在线xxx| 又色又爽又高潮免费视频国产| www.欧美日本| 三年中文高清在线观看第6集| 国产手机视频在线观看| 国产美女主播在线| 免费日韩中文字幕| 天天操精品视频| 国产精品专区在线| 无码人妻丰满熟妇区毛片| 国产又黄又猛又粗又爽的视频| 亚欧激情乱码久久久久久久久| www.午夜色| h无码动漫在线观看| 女人另类性混交zo| 26uuu成人| 国产二区视频在线播放| 亚洲精品中文字幕乱码无线| 国产又粗又猛又爽又黄的网站| 人妻精品无码一区二区三区| 手机精品视频在线| 草b视频在线观看| 中文字幕第17页| 一本久道高清无码视频| 九热视频在线观看| www.在线观看av| 久热在线视频观看| 浮妇高潮喷白浆视频| www.桃色.com| 久久人妻精品白浆国产| 中文字幕乱码免费| 91热这里只有精品| 狠狠97人人婷婷五月| 99re99热| 一级片视频免费观看| 日本少妇高潮喷水视频| 日本特级黄色大片| 97超碰成人在线| 成人午夜视频免费在线观看| 久久亚洲a v| 91麻豆天美传媒在线| 午夜两性免费视频| 看欧美ab黄色大片视频免费 | 青青在线视频免费| 精品无码一区二区三区爱欲| 国产精品一区在线免费观看| 在线黄色免费看| 亚洲成人福利在线|