摘要:使用實現(xiàn)瀑布流并不實用,因為實現(xiàn)的瀑布流都是以列來排列的,這里記錄下用實現(xiàn)瀑布流,以及微信小程序中使用左右兩列來實現(xiàn)瀑布流效果圖原生實現(xiàn)瀑布流文件圖片可以自己找點替換下就可以了文件添加陰影的時候,加上會顯得更加有點懸浮感文件計算圖片列數(shù)
使用css實現(xiàn)瀑布流并不實用,因為css實現(xiàn)的瀑布流都是以列來排列的,這里記錄下用js實現(xiàn)瀑布流,以及微信小程序中使用左右兩列來實現(xiàn)瀑布流1.效果圖 2.原生js實現(xiàn)瀑布流
html文件
圖片可以自己找點替換下就可以了
css文件
*{ margin: 0; padding: 0; } #root{ position: relative; } .item{ float: left; padding: 5px; } /* 添加陰影的時候,加上border會顯得更加有點懸浮感 */ .itemImg{ padding: 5px; border: 1px solid #ccc; box-shadow: 0 0 5px #ccc; border-radius: 5px; } .itemImg img{ width: 230px; height: auto; }
js文件
window.onload = function () { /* 計算圖片列數(shù)及獲取最小高度圖片 */ generateImg("root", "item"); /* 對窗口大小改變進行監(jiān)聽,大小改變則重新布局 */ window.addEventListener("resize", function() { generateImg("root", "item") }); /* 圖片對象 */ let imgData = { images: [ { "src":"23.png" }, { "src":"22.png" }, { "src":"2.jpg" }, { "src":"4.jpg" }, { "src":"7.jpg" } ] }; /* 對滾動監(jiān)聽 */ window.addEventListener("scroll", function() { if(checkIsScroll()) { let rootElement = document.getElementById("root"); /* 利用documentFragment來創(chuàng)建 */ // let documentFragment = document.createDocumentFragment(); let length = imgData.images.length; /* 循環(huán)創(chuàng)建圖片組 */ for(let i = 0; i < length; i++) { let itemElement = document.createElement("div"); itemElement.className = "item"; rootElement.appendChild(itemElement); let itemImgElement = document.createElement("div"); itemImgElement.className = "itemImg"; itemElement.appendChild(itemImgElement); let itemImg = document.createElement("img"); itemImg.style.cssText = "opacity: 0; transform:scale(0)"; itemImg.src = "../images/" + imgData.images[i].src; itemImgElement.appendChild(itemImg); // documentFragment.appendChild(itemElement); /* 在1秒后讓圖片顯示出來 */ (function(img){ setTimeout(function(){ img.style.cssText="opacity:1;transform:scale(1)"; },1000); })(itemImg); } // rootElement.appendChild(documentFragment); generateImg("root", "item"); } }); }; /* 計算圖片列數(shù)及獲取最小高度圖片 */ function generateImg(parent, content) { /* 獲取父元素及其所以節(jié)點內(nèi)容 */ let parentElement = document.getElementById(parent); let childContent = getChildElement(parentElement, content); /* 獲取圖片寬度 */ let imgWidth = childContent[0].offsetWidth; /* 獲取一行圖片形成的列數(shù) */ let imgColumn = Math.floor(document.documentElement.clientWidth / imgWidth); /* 重新設置父級容器的寬度 */ parentElement.style.cssText = "width:" + imgColumn * imgWidth + "px;margin:0 auto"; /* 存儲每個圖片的高度,以此來找到最小圖片高 */ let imgHeightArray = []; let length = childContent.length; for(let i = 0; i < length; i++) { /* i3.微信小程序中實現(xiàn)瀑布流scrollTopSpace + clientHeight) { return true; } } /* 獲取子節(jié)點的所有內(nèi)容 */ function getChildElement(parentElement, content) { /* 存儲元素信息 */ let elementArray = []; /* 獲取父元素下的所有節(jié)點信息 */ let allElement = parentElement.getElementsByTagName("*"); let length = allElement.length; for (let i = 0; i < length; i++) { /* 找到對應的類名 */ if (allElement[i].className === content) { elementArray.push(allElement[i]); } } return elementArray; } /* 獲取圖片最小高度 */ function getMinImgHeight(heightArray) { let length = heightArray.length; let minHeight = heightArray[0]; for(let i = 0; i < length; i++) { minHeight = Math.min(minHeight, heightArray[i]); } return minHeight; } /* 獲取圖片最小高度的索引值 */ function getMinHeightIndex(heightArray, minHeight) { let length = heightArray.length; for(let i = 0; i < length; i++) { if(heightArray[i] == minHeight) { return i; } } }
效果圖
wxml文件
{{item.title}} {{item.title}}
wxss文件
page{ background: #f6f6f6; } /* 最外層 */ .cateCommodity { display: flex; padding: 20rpx 28rpx 8rpx; box-sizing: border-box; font-size: 28rpx; } /* 左右兩個容器 */ .leftContainer{ display: flex; margin-right: 22rpx; flex-direction: column; } .rightContainer{ display: flex; flex-direction: column; } /* 圖片容器 */ .cateItem { margin-bottom: 20rpx; } .item{ padding: 20rpx 22rpx; width: 335rpx; box-sizing: border-box; background: #fff; border-radius: 6rpx; } .itemImg{ margin-bottom: 14rpx; width: 100%; vertical-align: middle; border-radius: 6rpx; } .title{ display: -webkit-box; overflow: hidden; -webkit-line-clamp: 2; -webkit-box-orient: vertical; line-height: 1.5; } /* 返回頂部 */ .skipTop { position: fixed; bottom: 30rpx; right: 20rpx; width: 90rpx; height: 90rpx; } .skipTop image { width: 100%; height: 100%; vertical-align: middle; }
js文件
Page({ data: { imageArray: [ { id: 1, src: "../../images/avatar.jpeg", title: "現(xiàn)代新中式創(chuàng)意陶瓷簡約擺件客廳家居玄關(guān)軟裝飾品家居酒柜盤子" }, { id: 1, src: "../../images/avatar3.jpg", title: "秋冬季新款2018休閑運動服套裝女士韓版金絲絨衛(wèi)衣加絨加厚兩件套" }, { id: 1, src: "../../images/avatar4.jpeg", title: "女童床上用品四件套公主房1.2m床品純棉女孩1.8兒童床單三件套1.5" }, { id: 1, src: "../../images/avatar7.jpg", title: "嬰兒床圓床蚊帳落地款寶寶橢圓床蚊帳支架款兒童床蚊帳BB床小蚊帳" }, { id: 1, src: "../../images/avatar9.jpeg", title: "包郵動感158T速滑鞋輪滑鞋競速鞋高端碳纖鞋 固定碼 專業(yè)定制" }, { id: 1, src: "../../images/logo7.jpg", title: "Infanton落地嬰兒床蚊帳帶支架兒童床蚊帳寶寶蚊帳嬰童蚊帳" }, { id: 1, src: "../../images/logo6.jpg", title: "老A輪滑 米高seba hl碳纖版SEBA HL CARBON 平花鞋剎車鞋全能鞋" }, { id: 1, src: "../../images/logo.jpeg", title: "洋洋法代 sandro 17秋冬 一??垩蛎L款大衣外套EKIN M9575H" }, ], showTopImage: false, }, onPageScroll(event) { /* 利用兩個條件,防止重復的進行setData操作 */ if (event.scrollTop > 300 && this.data.showTopImage == false) { this.setData({ showTopImage: true }) } else if (event.scrollTop < 300 && this.data.showTopImage == true) { this.setData({ showTopImage: false }) } }, skipTop() { /* 返回頂部 */ wx.pageScrollTo({ scrollTop: 0, duration: 300 }); this.setData({ showTopImage: false }); }, onReachBottom: function () { let temporaryArray = this.data.imageArray; temporaryArray.push(...this.data.imageArray); this.setData({ imageArray: temporaryArray }) }, })
左右兩列實現(xiàn)瀑布流其實就是對同一數(shù)組進行了兩次渲染,只是把其中的一半給隱藏了
正在努力學習中,若對你的學習有幫助,留下你的印記唄(點個贊咯^_^)
往期好文推薦:
判斷iOS和Android及PC端
純css實現(xiàn)瀑布流(multi-column多列及flex布局)
實現(xiàn)單行及多行文字超出后加省略號
微信小程序之購物車和父子組件傳值及calc的注意事項
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/99911.html
摘要:近些天有接觸到框架,使用軟件進行編譯,能生成多端項目文件,如微信百度支付寶小程序及和端,記錄遇到的問題條件編譯我覺得比較突出的一點功能,就是這個條件編譯,指定對應的代碼執(zhí)行在對應的一端僅在某平臺存在除了某平臺均存在如只在微信小程序中才執(zhí)行 近些天有接觸到uni-app框架,使用HBuilderX軟件進行編譯,能生成多端項目文件,如微信、百度、支付寶小程序及Android和ios端,記錄...
摘要:實際效果如下這樣就實現(xiàn)了一個微信小程序下的瀑布流。實際效果可以打開微信,掃描左邊二維碼,直接體驗。或者微信小程序搜索拍照大全。 1、什么是瀑布流 1.1、瀑布流,又稱瀑布流式布局。是比較流行的一種網(wǎng)站頁面布局,圖片的寬度是固定的,高度自動。視覺表現(xiàn)為參差不齊的多列布局,隨著頁面滾動條向下滾動,這種布局還會不斷加載數(shù)據(jù)塊并附加至當前尾部。 2、h5下實現(xiàn)一個瀑布流的基本思路 2.1、定義...
摘要:實際效果如下這樣就實現(xiàn)了一個微信小程序下的瀑布流。實際效果可以打開微信,掃描左邊二維碼,直接體驗?;蛘呶⑿判〕绦蛩阉髋恼沾笕? 1、什么是瀑布流 1.1、瀑布流,又稱瀑布流式布局。是比較流行的一種網(wǎng)站頁面布局,圖片的寬度是固定的,高度自動。視覺表現(xiàn)為參差不齊的多列布局,隨著頁面滾動條向下滾動,這種布局還會不斷加載數(shù)據(jù)塊并附加至當前尾部。 2、h5下實現(xiàn)一個瀑布流的基本思路 2.1、定義...
閱讀 740·2021-11-17 09:33
閱讀 3771·2021-09-01 10:46
閱讀 1762·2019-08-30 11:02
閱讀 3290·2019-08-29 15:05
閱讀 1407·2019-08-26 11:39
閱讀 2283·2019-08-23 17:04
閱讀 1982·2019-08-23 15:43
閱讀 1379·2019-08-23 14:12