在线看毛片视频-国产免费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>
  • 天堂av在线8| 妺妺窝人体色777777| 9l视频自拍9l视频自拍| 久久亚洲中文字幕无码| 久久出品必属精品| 欧美日韩亚洲一二三| 日韩中文字幕亚洲精品欧美| 国产自偷自偷免费一区 | 亚洲久久中文字幕| 大陆极品少妇内射aaaaa| 日本久久高清视频| 亚洲av无日韩毛片久久| 亚洲xxxx2d动漫1| 国产成人久久777777| 日韩avxxx| 玩弄中年熟妇正在播放| 日韩人妻无码精品久久久不卡| 国产日韩视频在线播放| 性欧美在线视频| 激情图片中文字幕| 亚洲av无日韩毛片久久| 日本一二三区在线| 99re精彩视频| 天天色天天综合网| 欧美激情第一区| www.午夜色| 男人草女人视频| 久操手机在线视频| 97超碰在线人人| 那种视频在线观看| 日韩欧美xxxx| 天天综合天天添夜夜添狠狠添| 在线观看国产一级片| 黄色片免费网址| 91九色国产ts另类人妖| 日韩国产小视频| 黄页网站在线观看视频| 国产免费一区二区三区视频| 北条麻妃视频在线| 一本一道久久a久久综合蜜桃| 一区二区三区欧美精品| 国产精品久久成人免费观看| 国产精品免费看久久久无码| 蜜臀av色欲a片无码精品一区| 欧美大片在线播放| 日本人视频jizz页码69| 亚洲精品国产久| 拔插拔插海外华人免费| 久久久免费视频网站| 亚洲天堂av一区二区| 屁屁影院ccyy国产第一页| 欧美亚洲一二三区| 欧美成人手机在线视频| 中文精品无码中文字幕无码专区 | 日本特黄在线观看| 国产乱子伦农村叉叉叉| 夜夜夜夜夜夜操| 成年人网站国产| 中文字幕第38页| 男女激情免费视频| 午夜视频在线网站| 国产精品后入内射日本在线观看| 久久久久久久久久久久91| 四虎精品欧美一区二区免费| 九色在线视频观看| www.-级毛片线天内射视视| 国模无码视频一区二区三区| www.色.com| 在线免费观看av的网站| 欧美极品少妇无套实战| 制服丝袜中文字幕第一页| 北条麻妃69av| 国产欧美精品aaaaaa片| 欧美精品久久久久久久久25p| 分分操这里只有精品| 一区二区三区日韩视频| 免费看污黄网站| 中文字幕乱码人妻综合二区三区| 久久久无码中文字幕久...| 日本黄色福利视频| 日韩免费高清在线| 国产免费黄色小视频| 久久久天堂国产精品| 日本网站在线看| 亚洲黄色小视频在线观看| 黄色一级片黄色| 欧美h视频在线观看| 欧美日韩中文不卡| 人人干人人视频| 成人三级视频在线播放| 美女日批免费视频| 精品少妇人妻av免费久久洗澡| 欧美做暖暖视频| 波多野结衣与黑人| 大荫蒂性生交片| 日本wwwcom| 免费在线a视频| 波多野结衣家庭教师视频| 国产精品va无码一区二区| 激情文学亚洲色图| 国产人妻人伦精品| 自拍偷拍视频在线| 欧美日韩在线不卡视频| www.午夜av| 日韩欧美亚洲另类| 久久久久国产精品熟女影院| 日韩精品在线观看av| 国产精品三级一区二区| 成年丰满熟妇午夜免费视频| 九九热精品在线播放| 日本xxxx黄色| 三级黄色片播放| 欧美黄色免费影院| japanese在线播放| 成人在线观看你懂的| 亚洲熟妇无码另类久久久| 缅甸午夜性猛交xxxx| 国产视频一区二区视频| 91极品视频在线观看| 好色先生视频污| 分分操这里只有精品| av无码精品一区二区三区| 亚洲精品久久久久久宅男| 色撸撸在线观看| 黄色免费福利视频| 又色又爽又高潮免费视频国产| 日韩成人av免费| 2019日韩中文字幕mv| 日日碰狠狠丁香久燥| 蜜臀av.com| 天天爽人人爽夜夜爽| 少妇久久久久久被弄到高潮| 狠狠热免费视频| 成人av在线播放观看| 网站一区二区三区| 成人国产在线看| 18岁视频在线观看| 国产一级大片免费看| www.精品在线| 成人在线免费在线观看| 色中文字幕在线观看| 青青在线视频免费| 国产特级淫片高清视频| 一本之道在线视频| 国产一伦一伦一伦| 动漫av网站免费观看| 成人免费a级片| 亚洲精品中文字幕乱码无线| aⅴ在线免费观看| 精品久久久久久久久久中文字幕| 永久免费黄色片| 在线观看亚洲色图| 国产极品美女高潮无套久久久 | 国产精品又粗又长| 中文字幕第50页| 天天干天天色天天干| 日韩黄色片视频| 日韩精品视频在线观看视频| 日本一区二区免费高清视频| 婷婷免费在线观看| 一区二区三区网址| 搡女人真爽免费午夜网站| 国产特级淫片高清视频| 欧美无砖专区免费| 青草视频在线观看视频| 91精品国产毛片武则天| 精品91一区二区三区| 红桃视频一区二区三区免费| 中文字幕一区二区在线观看视频| www.久久久精品| 亚洲精品久久久久久宅男| 久久久久久久久久久99| 激情综合网婷婷| 天天摸天天舔天天操| 加勒比av中文字幕| 美脚丝袜脚交一区二区| 热这里只有精品| 国产又黄又猛又粗又爽的视频| 久久婷婷中文字幕| 久久午夜夜伦鲁鲁一区二区| 91社在线播放| 三日本三级少妇三级99| 国产精品12345| 亚洲激情免费视频| 欧美午夜小视频| 亚洲精品一二三四五区| 又粗又黑又大的吊av| 日韩在线xxx| 午夜两性免费视频| 裸体大乳女做爰69| 欧美成人三级在线视频| 妺妺窝人体色www在线观看| 天天久久综合网| 韩日视频在线观看| 天天色综合社区| 男人天堂成人网| 欧美日韩亚洲第一| 国产精品无码乱伦| 中文字幕无码不卡免费视频| 国产精品v日韩精品v在线观看|