前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAUI-瀑布流改版(grid)

SAUI-瀑布流改版(grid)

原创
作者头像
ss-lgh
修改2020-07-31 17:28:50
1.4K0
修改2020-07-31 17:28:50
举报
文章被收录于专栏:saui

哈哈 我又来了~~~~

在上一版结束之后,还是不满意。又折腾了几天,今天终于推上来了。

这一次的瀑布流,是真的瀑布流形式,上一版只是看起来像而已。

通过css的grid与js配合,就可以快速形成瀑布流的形式了。不过呢,有点小问题,就是间距(grid-gap),有点小偏差,但是整体不影响。还有一点要注意的grid层最好不要有padding或box-sizing: border-box等

代码语言:javascript
复制
//css部分
.demo-list{
  width: 100%;
  height: auto;
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-gap: 12px 12px;
  grid-auto-flow: row dense;
  justify-items: start;
  align-items: start;
  --vsb: hidden;
}
.demo-list-item{
  width: 100%;
  visibility: var(--vsb);  //这个属性的有一点的重要性,可以在渲染时让item先占位
}
代码语言:javascript
复制
//组件部分
  lifetimes: {
    attached: function() { //节点树完成,可以用setData渲染节点,但无法操作节点
      let properties = this.properties
      this.$$id = properties.dataSource.$$id || 'waterfall'
      let list = {
        data: adpater(properties.dataSource.data),
        footer: {
          title: '数据正在加载,请稍后...',
          itemClass: 'waterfall-load-tips'
        },
        header: {
          title: {
            title: ' ',
            itemClass: 'icon-loading'
          },
          itemClass: 'water-loading-page'
        },
        listClass: 'demo-list',
        itemClass: 'demo-list-item',
      }
      this.setData({
        scrollCfg: properties.dataSource.scrollCfg,
        $list: list
      })
      this.orginData = properties.dataSource.data
      this.loadedStatus = false     //判断是否已经显示了加载完成的状态
    },
    ready: function() {
      let query = wx.createSelectorQuery().in(this)
      const that = this
      this.hooks.once('compute-items-rect', function() {
        setTimeout(() => {
          query.selectAll('.wrap-list >>> .demo-list-item').boundingClientRect(ret=>{
            if (ret.length) {
              let styleStr = '';
              ret.forEach((ele, ii) => {
                let height = ele.height
                let span = parseInt((height + 12) / 12)
                styleStr += `--item-row-span-${ii}: auto / span ${span};`
              })
              styleStr += `--vsb: visible ;`
              that.setData({ '$list.listStyle': styleStr, '$list.header': {title: ' ', itemClass: ' '}})
            }
          }).exec()
        }, 1000)
      })
      this.hooks.emit('compute-items-rect')
    }
  }
代码语言:javascript
复制
//业务部分
//wxml
  
//js
const data = [
  {
    img: 'http://www.agzgz.com/imgs/appstorecover-1.jpg',
    title: '带你体验猪一样的幸福生活, 寻味佛山顺德两天一夜的...',
  },
  {
    img: 'http://www.agzgz.com/imgs/fruit.jpg',
    title: '3网易严选多功能私享头',
  }
...
]  
    data: {
      list: {
        $$id: 'waterfallx',   //实例id
        scrollCfg: {         //scroll配置
          'scroll-y': true,
          'lower-threshold': 100,
          bindscrolltolower: 'bindscrolltolower',
          'enable-back-to-top': true
        },
        listClass: 'demo-list',
        itemClass: 'demo-list-item',
        data: data
      }
    }

使用方法也是很简单的一件事,引入组件,传入数据。查看效果,或源码展示可扫以下两个小程序码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档