nvue实现高性能接近原生瀑布流列表

简介: nvue实现高性能接近原生瀑布流列表
nvue实现高性能接近原生瀑布流列表

引入uniapp的nvue组件waterfall链 https://uniapp.dcloud.net.cn/component/waterfall.html#waterfall

template代码

<template>
    <waterfall left-gap="0" right-gap="0" class="waterfall" :show-scrollbar="false" column-count="2"  column-gap="0" column-width="auto">
        <header>
        <view class="header">
          <view class="tab">GIF</view>
          <view class="tab" style="background-color: #42b983;">
            <text style="color: #fff">高清</text>
          </view>
          <view class="tab">最新</view>
          <view class="tab">颜色</view>
        </view>
      </header>
      <cell @appear="appear(index)" class="item" v-for="(item,index) in list" :key="item"> 
          <view class="view">
          <image class="image" :src="item"></image>
          <view class="bottom">
            <text class="title">图片{{index}}</text>
            <text class="explan">{{item}}</text>
          </view>
        </view>
        </cell>
      <view style="position: fixed;bottom: 0;width: 100%;background-color: #fff;">
        fixed
      </view>
    </waterfall>
  <!-- <view class="content">
    <div id="waterfall">
      <div class="item" v-for="item in list" :key="item">
        <image :src="item"></image>
      </div>
    </div>
  </view> -->
</template>

script代码

<script>
  export default {
    data() {
      return {
        page:1,
        title: 'Hello',
        list:[]
      }
    },
    onLoad() {
      uni.request({
        url:`https://cn.bing.com/images/async?q=%e9%83%bd%e5%b8%82%e5%a3%81%e7%ba%b8&
        first=${this.page}
        &count=500
        &
        cw=414&ch=896&relp=12&datsrc=I&layout=ColumnBased_Landscape&apc=0&mmasync=1&dgState=c*2_y*985s708_i*13_w*193&IG=1A93531B773D483ABD7A6C17C52CCCB2&SFX=2&iid=images.5258`,
        method:'get',
        success: (res) => {
          console.log(res)
          let arr = res.data.split(";http://")
          let nextList = []
          arr.map(item => {
            let str = 'http://'+item.substr(0,item.indexOf('&'))
            if(str.indexOf('jpg') !== -1) {
              nextList.push('http://'+item.substr(0,item.indexOf('&')))
            }
          })
          this.list = nextList
          console.log(nextList)
        }
      })
    },
    methods: {
      // 下一页
      appear(e) {
        if(e>=this.list.length-2) {
          this.page += 1
          uni.request({
            url:`https://cn.bing.com/images/async?q=%e9%83%bd%e5%b8%82%e5%a3%81%e7%ba%b8&
            first=${this.page}
            &count=500
            &
            cw=414&ch=896&relp=12&datsrc=I&layout=ColumnBased_Landscape&apc=0&mmasync=1&dgState=c*2_y*985s708_i*13_w*193&IG=1A93531B773D483ABD7A6C17C52CCCB2&SFX=2&iid=images.5258`,
            method:'get',
            success: (res) => {
              console.log(res)
              let arr = res.data.split(";http://")
              let nextList = []
              arr.map(item => {
                let str = 'http://'+item.substr(0,item.indexOf('&'))
                if(str.indexOf('jpg') !== -1) {
                  nextList.push('http://'+item.substr(0,item.indexOf('&')))
                }
              })
              this.list = this.list.concat(nextList)
              console.log(nextList)
            }
          })
        }
      }
    }
  }
</script>

css代码

weex不支持scss扩展语言嵌套编写模式

默认是flex布局,所以不需要手动添加 display: flex

<style>
  .waterfall {
    background-color: #ffffff;
    padding:0 20rpx;
  }
  .header {
    margin: auto -25rpx;
    flex-direction: row;
    display: flex;
    background-color: #ffffff;
    padding: 25rpx 0;
  }
  .header .tab {
    border-radius: 5rpx;
    margin: 0rpx 20rpx;
    background-color: #f5f5f5;
    padding: 15rpx 30rpx;
  }
  .item { 
    border-radius: 15rpx;
    /* box-shadow: 0 0 0 1px rgb(0 0 0 / 5%), 0 2px 3px 0 rgb(0 0 0 / 10%); */
    /* -webkit-box-shadow: 0 0 0 1px rgb(0 0 0 / 5%), 0 2px 3px 0 rgb(0 0 0 / 10%); */
    /* margin: 20rpx 0; */
  }
  .item > .view { 
    margin: 8rpx 12rpx;
    border-radius: 6rpx;
    box-shadow: 0 0 5rpx 0 rgba(0, 0, 0, 0.5);
  }
  .item .bottom {
    padding: 10rpx;
  }
  .item .bottom .title {
    font-size: 25rpx;
  }
  .item .bottom .explan {
    margin-top: 5rpx;
    font-size: 16rpx;
    color: #767676;
  }
  .item .image {
    border-radius: 6rpx;
    border-bottom-left-radius: 0;
    border-bottom-right-radius: 0;
    /* width: 100%; */
    height: 100%;
  }
/*  #waterfall {
    column-count: 3;
    column-gap: 20px;
  }
  .item {
    display: inline-block;
    width: 100%;
    margin-bottom: 20px;
    height: 120px;
    width: 50%;
  }
  .item image {
    height: 120px;
    width: 100%;
  } */
</style>


相关文章
|
移动开发 前端开发 小程序
7 款最棒的 React 移动端 UI 组件库 - 特别针对国内使用场景推荐
优秀的 React UI 移动端组件库和模版框架,帮我们节省开发时间,提高开发效率,统一设计语言。更棒的是内置的功能复杂,我们自己很难处理的常用组件,比如表格、表单、富文本编辑器、时间日期选择器、实时拖拽组件等,再进一步,还有帮我们把组件的轮子装好的 React admin 后台管理系统。本文推荐 7 款适用于中文使用者习惯的开源 React 移动端 UI 库,特别针对国内使用场景推荐。
5141 0
|
8月前
|
Web App开发 前端开发 JavaScript
只需一行CSS代码,让长列表网页的渲染性能提升几倍以上!
只需一行CSS代码,让长列表网页的渲染性能提升几倍以上!
|
人工智能 前端开发 搜索推荐
前端布局和兼容
阅读报纸时容易发现,虽然报纸中的内容很多,但是经过合理地排版,版面依然清晰、易读。同样,在 制作网页时,要想使页面结构清晰、有条理,也需要对网页进行“排版”。 “版心”(可视区) 是指网页中主体内容所在的区域。一般在浏览器窗口中水平居中显示,常见的宽度值为 960px、980px、1000px、1200px等。
104 0
|
Web App开发
移动端适配——视口概念
事实上这种方式是不利于我们进行移动的开发的,我们希望的是设置100px,那么显示的就是100px;
170 0
移动端适配——视口概念
Flutter之 横向列表、自定义组件
Flutter之 横向列表、自定义组件
202 0
Flutter之 横向列表、自定义组件
|
API Android开发
Material Design 实战 之 第六弹 —— 可折叠式标题栏(CollapsingToolbarLayout) & 系统差异型的功能实现(充分利用系统状态栏空间)
Material Design 实战 之 第六弹 —— 可折叠式标题栏(CollapsingToolbarLayout) & 系统差异型的功能实现(充分利用系统状态栏空间)
|
前端开发 图形学
Unity中影响UI排序的组件
Unity中影响UI排序的组件
|
缓存 JavaScript 前端开发
自制 移动端 纯原生 Slider滑动插件
在Google搜关键字“slider”或“swiper”能找到一大堆相关插件,自己造轮子是为了能更好的理解其中的原理。