亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

web頁面和微信小程序頁面實現瀑布流效果

2020-03-21 16:10:03
字體:
來源:轉載
供稿:網友

小程序實現瀑布流效果,和web頁面差不多,都要經過以下步驟:

1)、加載圖片,獲取圖片的寬高度;

2)、根據頁面需要顯示幾列計算每列的寬度;

3)、根據圖片真實寬度和每列的寬度比,計算出圖片需要顯示的高度;

4)、重新對圖片進行定位

  1、web頁面瀑布流效果,先看效果圖(瀑布流+無限滾動加載):

web頁面,微信小程序,瀑布流

 頁面代碼:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8">  <meta charset='utf-8′> <!--聲明文檔使用的字符編碼-->  <title>瀑布流_左浮動</title> <style type="text/css">  *{margin:0;padding:0;}  .container {   width: 1200px; height: auto; margin: 50px auto;   position: relative;  }  .box{   padding: 5px; box-shadow: 0 0 10px purple; border-radius: 5px;   float: left; margin: 10px;  }  .box img { width: 200px; height: auto; } </style></head><body> <div class="container">  <div class="box"><img src="../img/0.jpg"/></div>  <div class="box"><img src="../img/1.jpg"/></div>  <div class="box"><img src="../img/2.jpg"/></div>  <div class="box"><img src="../img/3.jpg"/></div>  <div class="box"><img src="../img/4.jpg"/></div>  <div class="box"><img src="../img/5.jpg"/></div>  <div class="box"><img src="../img/6.jpg"/></div>  <div class="box"><img src="../img/7.jpg"/></div>  <div class="box"><img src="../img/8.jpg"/></div>  <div class="box"><img src="../img/9.jpg"/></div>  <div class="box"><img src="../img/10.jpg"/></div>  <div class="box"><img src="../img/11.jpg"/></div>  <div class="box"><img src="../img/12.jpg"/></div>  <div class="box"><img src="../img/13.jpg"/></div>  <div class="box"><img src="../img/14.jpg"/></div>  <div class="box"><img src="../img/15.jpg"/></div>  <div class="box"><img src="../img/16.jpg"/></div> </div> <script type="text/javascript">  var boxsHeight = []; //盒子高度存儲數組  var boxWidth = 230, boxHeight = 230;  window.onload = function(){   var boxs = document.getElementsByClassName('box');   var cols = Math.floor(1200.0/boxWidth); //最多幾列   //offsetWidth: 包括元素的內容寬度+padding+border寬度   //存儲第一行的每個盒子的高度到數組里面   for (var i = 0; i < cols; i++){    var obj = boxs[i]; //元素節點    if (i < cols){     boxsHeight.push(obj.offsetHeight);    }   }   updateBoxFrame(cols); //從第二行開始更新元素的位置   window.onscroll = pageScroll; //設置頁面滾動監聽函數   pageScroll(); //先調用一次  }  //獲取數組中最小值的索引  function getMinHeightIndex(arr){   var minHeight = Math.min.apply(null, arr);   for (var i = 0; i < arr.length; i++){    if (arr[i] == minHeight){     return i;    }   }  }  //監聽頁面滾動  function pageScroll(){   var parentEle = document.getElementsByClassName('container')[0];   var subEleCount = parentEle.childElementCount; //子元素個數   var lastBox = parentEle.lastElementChild; //最后一個元素   //判斷是否滾動到底部   var doc = document.documentElement||document.body;   console.log('滾動監聽', doc.scrollTop+",", lastBox.offsetTop+", " + doc.clientHeight);   if (doc.scrollTop+doc.clientHeight > lastBox.offsetTop){    //表示該新添加元素了    addBox();    //更新新添加元素的位置    updateBoxFrame(subEleCount);   }  }  //新添加子元素  function addBox(){   var parentEle = document.getElementsByClassName('container')[0];   var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];   for (var i = 0; i < arr.length; i++){    var index = parseInt(Math.random()*100%arr.length);    var imgNum = arr[index];    var div = document.createElement('div');    div.setAttribute('class', 'box');    div.innerHTML = '<img src="../img/' + imgNum + '.jpg"/>'    parentEle.appendChild(div);    arr.splice(index, 1)   }  }  //更新新添加元素的位置  function updateBoxFrame(startIndex){   var boxs = document.getElementsByClassName('box');   for (var i = startIndex; i < boxs.length; i++){    var obj = boxs[i];    //獲取數組中最小高度的索引    var minHeightIndex = getMinHeightIndex(boxsHeight);//     console.log(boxsHeight);//     console.log(minHeightIndex + ", " +boxsHeight[minHeightIndex]);    var boxTop = boxsHeight[minHeightIndex] + 20;    var boxLeft = minHeightIndex * boxWidth;    console.log(i + ', boxTop: ' + boxTop + ", boxLeft: " + boxLeft);    //設置元素的定位樣式    obj.style = 'position: absolute; top:' + boxTop + "px;left:" + boxLeft+"px";    boxsHeight[minHeightIndex] = boxTop + obj.offsetHeight;   }  } </script></body></html>

  2、小程序實現瀑布流,大致流程差不多。只不過小程序的圖片的寬高度的獲取沒有web頁面那么方便。

大概實現過程:1)、獲取圖片數據,頁面渲染;

      2)、給圖片綁定加載load事件,存儲每個圖片的寬高度;

      3)、計算每個圖片的定位,重新渲染

先看小程序的效果圖(瀑布流+無限循環加載):

web頁面,微信小程序,瀑布流

wxml頁面代碼:

<scroll-view class='main' scroll-y='true' style="height:{{windowHeight}}px" bindscrolltolower='loadMoreImages'> <image wx:for='{{dataList}}' wx:key='item' src='{{item.src}}' style='position: absolute; top: {{item.top}}px; left: {{item.left}}px; width: {{imgWidth}}px; height: {{item.height}}px' bindload='loadImage' data-index='{{index}}' bindtap='previewImg'/></scroll-view>

js頁面代碼:

// pages/discover/waterfall_flow/waterfall_flow.jsPage({ /** * 頁面的初始數據 */ data: { dataList: [], //數據源 windowWidth: 0, //頁面視圖寬度 windowHeight: 0, //視圖高度 imgMargin: 6, //圖片邊距: 單位px imgWidth: 0, //圖片寬度: 單位px topArr: [0, 0], //存儲每列的累積top }, /** * 生命周期函數--監聽頁面加載 */ onLoad: function (options) { wx.showLoading({  title: '加載中...', }) var that = this; //獲取頁面寬高度 wx.getSystemInfo({  success: function (res) {  console.log(res)  var windowWidth = res.windowWidth;  var imgMargin = that.data.imgMargin;  //兩列,每列的圖片寬度  var imgWidth = (windowWidth - imgMargin * 3) / 2;  that.setData({   windowWidth: windowWidth,   windowHeight: res.windowHeight,   imgWidth: imgWidth  }, function () {   that.loadMoreImages(); //初始化數據  });  }, }) }, //加載圖片 loadImage: function (e) { var index = e.currentTarget.dataset.index; //圖片所在索引 var imgW = e.detail.width, imgH = e.detail.height; //圖片實際寬度和高度 var imgWidth = this.data.imgWidth; //圖片寬度 var imgScaleH = imgWidth / imgW * imgH; //計算圖片應該顯示的高度 var dataList = this.data.dataList; var margin = this.data.imgMargin; //圖片間距 //第一列的累積top,和第二列的累積top var firtColH = this.data.topArr[0], secondColH = this.data.topArr[1]; var obj = dataList[index]; obj.height = imgScaleH; if (firtColH < secondColH) { //表示新圖片應該放到第一列  obj.left = margin;  obj.top = firtColH + margin;  firtColH += margin + obj.height; } else { //放到第二列  obj.left = margin * 2 + imgWidth;  obj.top = secondColH + margin;  secondColH += margin + obj.height; } this.setData({  dataList: dataList,  topArr: [firtColH, secondColH], }); }, //加載更多圖片 loadMoreImages: function () { var imgs = [  'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=1409185525,4059560780&fm=26&gp=0.jpg',  'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=4076355782,2436939971&fm=15&gp=0.jpg',  'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=777075993,2126273204&fm=11&gp=0.jpg',  'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=57777155,3251523579&fm=11&gp=0.jpg',  'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=3825727093,2830650732&fm=11&gp=0.jpg',  'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2379065095,654347953&fm=26&gp=0.jpg',  'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=2749679283,2472217536&fm=11&gp=0.jpg',  'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=677128138,409184861&fm=11&gp=0.jpg',  'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1884091074,3049103326&fm=26&gp=0.jpg',  'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=1600363417,3661952978&fm=11&gp=0.jpg',  'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2069544162,3090555174&fm=11&gp=0.jpg',  'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=3328655038,3143543956&fm=26&gp=0.jpg',  'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3953624046,2332872335&fm=26&gp=0.jpg',  'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=717009955,687560133&fm=26&gp=0.jpg',  'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=4243037288,2388509769&fm=26&gp=0.jpg',  'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2644451528,4180971732&fm=26&gp=0.jpg',  'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2658655215,924706045&fm=26&gp=0.jpg',  'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=400545645,1325440240&fm=26&gp=0.jpg',  'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=2735743532,3162562682&fm=11&gp=0.jpg',  'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2357555025,1781222560&fm=26&gp=0.jpg',  'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1604156508,3282489713&fm=26&gp=0.jpg',  'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=380663325,2271064034&fm=26&gp=0.jpg',  'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=174537541,3462862985&fm=26&gp=0.jpg',  'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1752649241,364583051&fm=26&gp=0.jpg',  'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=2890516059,4166188770&fm=27&gp=0.jpg',  'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2435144503,200941795&fm=11&gp=0.jpg',  'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=877833827,2847590581&fm=26&gp=0.jpg',  'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=894452177,2810600152&fm=11&gp=0.jpg',  'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4053642431,248486335&fm=27&gp=0.jpg',  'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2914607659,905736210&fm=11&gp=0.jpg',  'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1629456501,1514429218&fm=26&gp=0.jpg', ]; var tmpArr = []; for (let i = 0; i < 22; i++) {  var index = parseInt(Math.random() * 100) % imgs.length;  var obj = {  src: imgs[index],  height: 0,  top: 0,  left: 0,  }  tmpArr.push(obj);  imgs.splice(index, 1); } var dataList = this.data.dataList.concat(tmpArr) this.setData({ dataList: dataList }, function(){  wx.hideLoading() }); }, /**預覽圖片 */ previewImg: function (e) { var index = e.currentTarget.dataset.index; var dataList = this.data.dataList; var currentSrc = dataList[index].src; // var srcArr = dataList.map(function (item) { // return item.src; // }); wx.previewImage({  urls: [currentSrc], }) },})

wxss頁面代碼:

.main{ width: 100%; height: 100%; position: relative; }.main image { box-shadow: 0 0 10rpx red; border-radius: 8rpx;}

DEMO下載:https://github.com/xiaotanit/Tan_HtmlDemo

web瀑布流頁面地址:https://github.com/xiaotanit/Tan_HtmlDemo/blob/master/JS/%E7%80%91%E5%B8%83%E6%B5%81_%E5%B7%A6%E6%B5%AE%E5%8A%A8.html

小程序瀑布流頁面地址:https://github.com/xiaotanit/Tan_HtmlDemo/tree/master/wxMini/pages/discover/waterfall_flow

總結

以上所述是小編給大家介紹的web頁面和微信小程序頁面實現瀑布流效果 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久亚洲精品小早川怜子66| 欧美精品久久久久久久| 8x海外华人永久免费日韩内陆视频| 欧美激情在线狂野欧美精品| 奇米四色中文综合久久| 日韩中文字幕在线精品| 欧美激情伊人电影| 国产91精品黑色丝袜高跟鞋| 欧美理论电影网| 国产噜噜噜噜久久久久久久久| 国产精品video| 欧美激情国内偷拍| 成人黄色大片在线免费观看| 国内精品国产三级国产在线专| 欧美黑人性猛交| 日韩精品免费观看| 久久这里只有精品视频首页| 国产精品久久久久久久电影| 欧美高清在线播放| 亚洲色图狂野欧美| 亚洲激情视频在线| 久久这里只有精品视频首页| www日韩欧美| 啊v视频在线一区二区三区| 国产精品吹潮在线观看| 欧美激情第1页| 欧美激情视频在线观看| 色综合亚洲精品激情狠狠| 亚洲va欧美va在线观看| 欧美一区二粉嫩精品国产一线天| 国产精品一区av| 韩国日本不卡在线| 成人高h视频在线| 久久影视三级福利片| 国产日产亚洲精品| 黄色一区二区在线观看| 97在线观看视频| 欧美精品日韩www.p站| 欧美极品少妇xxxxⅹ免费视频| 久久久久国色av免费观看性色| 欧美韩国理论所午夜片917电影| 一区二区在线视频| 日韩av综合中文字幕| 91国产精品视频在线| 欧美主播福利视频| 亚洲精品wwww| 国产亚洲a∨片在线观看| 中文欧美在线视频| 成人两性免费视频| 精品偷拍一区二区三区在线看| 亚洲欧美自拍一区| 亚洲最大在线视频| 成人av番号网| 亚洲国产精品久久久久秋霞不卡| 中文字幕在线视频日韩| 国产欧美日韩91| 国产精品视频资源| 亚洲乱码国产乱码精品精| 92国产精品久久久久首页| 国产成人精品亚洲精品| 精品免费在线观看| 中文.日本.精品| 久久成年人视频| 欧美另类69精品久久久久9999| 亚洲黄页网在线观看| 日韩一区二区久久久| 日韩av电影中文字幕| 欧日韩不卡在线视频| 亚洲国产欧美一区二区三区同亚洲| 国外视频精品毛片| 欧美体内谢she精2性欧美| 8050国产精品久久久久久| 久久久久久香蕉网| 亚洲欧美在线x视频| 欧美色欧美亚洲高清在线视频| 久久久久久国产精品久久| 中文字幕日韩专区| 国产成人一区二区三区电影| 一区二区欧美激情| 麻豆国产精品va在线观看不卡| 久久久精品中文字幕| 亚洲va久久久噜噜噜| 欧美日韩亚洲一区二区三区| 国产成人精品久久二区二区| 国产精品视频网| 亚洲成人久久久| 日韩在线精品视频| 伊人激情综合网| 国产成人精品免费视频| 国产一区二区三区高清在线观看| 富二代精品短视频| www.美女亚洲精品| 欧美日韩在线视频观看| 欧美大片免费观看在线观看网站推荐| 日韩电影中文字幕在线观看| 久久99视频精品| 国产成人精品日本亚洲| 国产成人综合一区二区三区| 精品小视频在线| 国产精品一区二区三区久久| 日韩av片永久免费网站| 久久艹在线视频| 国产精品白丝av嫩草影院| 91久久精品国产91性色| 免费不卡在线观看av| 日韩美女主播视频| 欧美专区第一页| 91午夜理伦私人影院| 国产日韩综合一区二区性色av| 视频一区视频二区国产精品| 91在线观看欧美日韩| 日韩中文字幕网| 在线观看日韩专区| 成人亚洲激情网| 国产一区二区视频在线观看| 黑人精品xxx一区一二区| 精品国产31久久久久久| 成人国产在线激情| 亚洲伊人久久大香线蕉av| 国内精品久久久久久影视8| 欧美亚洲成人精品| 色偷偷噜噜噜亚洲男人的天堂| 91精品啪aⅴ在线观看国产| 国产精品十八以下禁看| 日韩av一区二区在线观看| 国产精品永久免费视频| 奇米一区二区三区四区久久| 色悠悠久久88| 久久国产精品久久国产精品| 欧美劲爆第一页| 亚洲a在线播放| 国产成人精品国内自产拍免费看| 亚洲免费视频在线观看| 中文字幕精品一区二区精品| 日韩av一卡二卡| 久久久精品久久久久| 亚洲老板91色精品久久| 久久久亚洲国产天美传媒修理工| 亚洲精品美女在线观看| 国产精品精品视频一区二区三区| 精品视频在线播放色网色视频| 亚洲国产成人精品久久久国产成人一区| 日韩成人性视频| 亚州av一区二区| 91亚洲精品在线| 欧美日韩在线免费| 久久综合伊人77777| 国产精品精品视频一区二区三区| 不卡av电影在线观看| 国产欧美在线观看| 国产狼人综合免费视频| 国产69精品久久久久9999| 热久久这里只有| 久久av在线看| 日韩精品在线电影| 美日韩精品视频免费看| 在线观看免费高清视频97| 97精品国产97久久久久久| 精品国偷自产在线| 久久精品人人做人人爽| 国产精品综合久久久| 91精品国产综合久久香蕉的用户体验| 国产精品一区二区三区免费视频| 久久免费在线观看|