在进行瀑布流布局的时候,需要根据图片的高度进行瀑布流布局,另外一个需求是根据浏览量进行从左到右显示,服务器发送的是根据流量排好序的数据,但是我用bindload方法监听图片的加载情况,但是它不是按照服务器给的数据进行加载的导致,瀑布流的浏览量发生错乱,请问有没有好的方法按序加载
<view style="display:none"> <block wx:for="{{newAddEssays}}" wx:key='d'> <!--商铺文章--> <block wx:if='{{item.shopessayhead}}'> <block wx:if='{{item.shopessaycustom === 1 && item.shopessaycustomhead !==""}}'> <image wx:key="id" id="{{item.shopeid}}-{{index}}" src="{{imgHost}}{{item.shopessaycustomhead}}" bindload="onImageLoad" data-last='{{index === (newAddEssays.length - 1) ? true : false}}'></image> </block> <block wx:else> <image wx:key="id" id="{{item.shopeid}}-{{index}}" src="{{imgHost}}{{item.shopessayhead[0]}}" bindload="onImageLoad" data-last='{{index === (newAddEssays.length - 1) ? true : false}}'></image> </block> </block> <!--商品--> <block wx:if='{{item.head}}'> <block wx:if='{{item.custom === 1 && item.customhead !==""}}'> <image wx:key="id" id="{{item.pid}}-{{index}}" src="{{imgHost}}{{item.customhead}}" bindload="onImageLoad" data-last='{{index === (newAddEssays.length - 1) ? true : false}}'></image> </block> <block wx:else> <image wx:key="id" id="{{item.pid}}-{{index}}" src="{{imgHost}}{{item.head[0]}}" bindload="onImageLoad" data-last='{{index === (newAddEssays.length - 1) ? true : false}}'></image> </block> </block> <block wx:if='{{item.essayhead}}'> <block wx:if='{{item.essaycustom === 1 && item.essaycustomhead !==""}}'> <image wx:key="id" id="{{item.eid}}-{{index}}" src="{{imgHost}}{{item.essaycustomhead}}" bindload="onImageLoad" data-last='{{index === (newAddEssays.length - 1) ? true : false}}'></image> </block> <block wx:else> <image wx:key="id" id="{{item.eid}}-{{index}}" src="{{imgHost}}{{item.essayhead[0]}}" bindload="onImageLoad" data-last='{{index === (newAddEssays.length - 1) ? true : false}}'></image> </block> </block> </block> </view> |
onImageLoad: async function (e) { let isLast = e.currentTarget.dataset.last; console.log("isLast is ", isLast); let imageId = Number(e.currentTarget.id.split('-')[0]); let imageIndex = Number(e.currentTarget.id.split('-')[1]); console.log("imageIndex is ",imageIndex); let oImgW = e.detail.width; //图片原始宽度 let oImgH = e.detail.height; //图片原始高度 let imgWidth = this.data.imageWidth; //图片设置的宽度 let scale = imgWidth / oImgW; //比例计算 let imgHeight = oImgH * scale; //自适应高度 //新请求的文章数据 let images = this.data.newAddEssays; let imageLen = images.length; let imageObj = null; for (let i = 0; i < imageLen; i++) { let img = images[i]; if (img.shopeid && img.shopeid === imageId) { imageObj = img; break; } else if (img.pid && img.pid === imageId) { imageObj = img; } else if (img.eid && img.eid === imageId) { imageObj = img; } } if(imageObj !== null){ imageObj.height = imgHeight; //记录下该图片是第几个被加载的 imageObj.index = imageIndex; console.log("imageObj is ", imageObj); let loadingCount = this.data.loadingCount - 1; let col1 = this.data.col1; let col2 = this.data.col2; //只要第一列的列高度小于第二列就往第一列放,否则往第二列放 if (this.data.col1H <= this.data.col2H) { this.data.col1H += imgHeight; col1.push(imageObj); } else { this.data.col2H += imgHeight; col2.push(imageObj); } console.log("col1 is ", col1); console.log("col1H is ", this.data.col1H); console.log("col2 is ", col2); console.log("col2H is ", this.data.col2H); this.setData({ col1H: this.data.col1H, col2H: this.data.col2H }) let data = { loadingCount: loadingCount, col1: col1, col2: col2, loadOver: true }; if (!loadingCount) { data.images = []; } await this.setData(data, () => { wx.hideLoading(); }); if (isLast) { console.log("col1 is ", col1); console.log("col2 is ", col2); //渲染完图片之后将新加的文章添加到文章列表中去 // this.data.dataArray.push(...this.data.newAddEssays); //对col1的每个元素进行排序和col2的每个元素进行排序 // this.setData({ // col1 : this.data.col1, // col2 : this.data.col2, // loadOver : true // },()=>{ // wx.hideLoading(); // }) } } }, |
