美文网首页Weex专栏weex社区
Weex组件<waterfall>瀑布流和GridV

Weex组件<waterfall>瀑布流和GridV

作者: 安卓搬砖小曾 | 来源:发表于2019-06-21 17:59 被阅读23次

    最近项目有点忙,weex学习更新稍微慢了些。近期给自己列了一个学习计划表,想用weex做一个App,目前觉得列表比较好做,同时weex原生组件使用起来都很方便,就是一些自定义的组件在使用的时候,在引用上有一些坑需要注意。

    前几天我准备使用<waterfall>在页面上做一个快捷入口,开始以为<waterfall>只能做瀑布流,看来我是小看他的功能了,其实<waterfall>是在<list>的基础上封装的,它是列表功能的核心组件,拥有平滑的滚动和高效的内存管理,具有回收和复用的能力,可以大幅优化内存占用和渲染性能。话不多少,下面看看具体的使用吧:

    1. 和<list>相似,里面的子控件只能是cell

    <waterfall column-count="4" column-width="auto" class="grildView_cellType">
        <cell v-for="num in homeQuickList" :key="num.iconCopywriting">
          <div class="grildViewType" >
            <image class="itemPhoto" :src="num.imageUrl"/>
            <text class="grildViewType_tv">{{num.iconCopywriting}}</text>
          </div>
        </cell>
      </waterfall>
    

    使用起来是不是觉得和<list>很相似呢

    2. 如何让瀑布流变成规则的GridView(重点)

    在官网上可以看到demo里设置的宽高都是自适应,也就是说<waterfall>会根据其Cell里的item高度,变成高度不一样的瀑布流。那么,要是我们把item的宽高都设定成固定的宽高,是不是就可以变成像GridView一样规则的横向列表了呢?

    那下面我们就来设置一下试试看:

    .itemPhoto{
      width: 88px;
      height: 88px;
    }
    .grildViewType{
      justify-content: center;
      flex-direction: column;
      padding-top: 30px;
      align-items: center;
    }
    .grildViewType_tv{
      font-size: 26px;
      color: #333;
      margin-top: 20px;
    }
    .grildView_cellType{
      margin-left: 25px;
      margin-right: 25px;
      justify-content: center;
    }
    

    以上是我设置<waterfall>的样式,那么我们运行看看效果:

    运行之后的效果图

    这样一个完成weex原生组件<waterfall>做出来GridView的效果了,其中要特别注意item的样式要居中,如果对weex样式还不是很熟练的小伙伴就要边写样式边看Flex 布局教程了,我这里推荐一个图文并茂,容易理解的:Flex 布局教程

    最后我把完整的代码贴上,有需要的小伙伴可以尝试一下:

    <template>
    <scroller class="scroller">
    <div class="homeFragmentType">
      <slider class="sliderType" interval="3000" auto-play="true" >
          <div class="sliderDivType" v-for="img in imageNewList" :key="img.adId">
            <image class="imageType" resize="cover" :src="img.iconUrl"/>
          </div>
          <indicator class="indicator"></indicator>
      </slider>
      <!-- <homeAutoVerticalTextView  class="homeTextView" ref="homeAutoVerticalTextView"/> -->
      <div class="line"></div>
      <waterfall column-count="4" column-width="auto" class="grildView_cellType">
        <cell v-for="num in homeQuickList" :key="num.iconCopywriting">
          <div class="grildViewType">
            <image class="itemPhoto" :src="num.imageUrl"/>
            <text class="grildViewType_tv">{{num.iconCopywriting}}</text>
          </div>
        </cell>
      </waterfall>
      <div class="canClickTitleType" @click="lazyTitleClick">
             <div class="floor">
              <text class="mainHeadingType">懒人计划</text>
              <text class="subheadingType">乐轻松,从一键委托开始</text>
             </div>
             <div>
               <text class="moreType">更多</text>
             </div>
            </div>
    
             <customViewComponent  class="textViewType" ref="customViewComponent"/>
    
            <div class="canClickTitleType" @click="lazyTitleClick2">
             <richText num="18738523758" class="richType" >手机号</richText>
            </div>
            <div class="canClickTitleType" @click="lazyTitleClick2">
             <weexDialogView  class="richType" />
            </div>
            </div>
       </scroller>     
    </template>
    <script>
    const modal = weex.requireModule("modal");
    import { GET } from "@/utils/requistUrl";
    import { GET2 } from "@/utils/requistUrl2";
    export default {
      data: function() {
        return {
          imageNewList: [],
          notifyList: [],
          homeQuickList:[],
          replaceList:[],
        };
      },
      created: function() {
        var self = this;
        // this.$refs.weexTestComponent.focus2();
        weex
          .requireModule("weexTestModule")
          .changeBackground("#DE1E7C", "首页", true);
        // weex.requireModule('weexTestComponent').focus2();
        self.homeBanranMethod();
        self.homeNotifice();
        self.homeQuick();
      },
      mounted: function() {
        this.$refs.customViewComponent.focus2("黎明", "男", "25");
        // self.$refs.homeAutoVerticalTextView.transmitData("肯定到这里了");
      },
      methods: {
        lazyTitleClick() {
          // weex.requireModule('weexTestModule').showToast();
          weex
            .requireModule("weexTestModule")
            .changeBackground("#DE1E7C", "关于聚有财", false);
        },
        homeBanranMethod() {
          var self = this;
          GET("content/bannerList?", { position: "8" }, function(res) {
            if (res.success != 1) {
              modal.toast({ message: "轮播图请求错误!", duration: 2 });
            } else {
              self.imageNewList = res.datas.result || [];
              // self.imageNewList = self.imageNewList.concat(res.datas.result);
            }
          });
        },
        homeNotifice() {
          var self = this;
          GET2(
            "public/system/information?",
            { type: "0", pageNum: "1", pageSize: "6" },
            function(res) {
              if (!res.success) {
                modal.toast({ message: "公告请求错误!", duration: 2 });
              } else {
                self.notifyList = res.datas.result || [];
                self.$refs.homeAutoVerticalTextView.transmitData(
                  JSON.stringify(res)
                );
              }
            }
          );
        },
        homeQuick(){
          var self=this;
          GET2(
            "app/quickentry?",
            {  },
            function(res) {
              if (!res.success) {
                modal.toast({ message: "快捷入口请求错误!", duration: 2 });
              } else {
                // self.replaceList=res.datas.result||[];
                // self.homeQuickList = self.replaceList.slice(0,4);
                self.homeQuickList = res.datas.result||[];
              }
            }
          );
        }
      }
    };
    </script>
    
    <style scoped>
    .scroller{
      width: 750px;
      height: 2000px;
      background-color: #fff
    }
    .homeFragmentType {
      width: 750px;
      height: 2000px;
    }
    .canClickTitleType {
      flex-direction: row;
      background-color: #fff;
      direction: ltr;
      margin-bottom: 1px;
    }
    .mainHeadingType {
      font-size: 40px;
      text-align: left;
      padding-top: 25px;
      margin-left: 30px;
      font-weight: bold;
      padding-bottom: 15px;
    }
    .subheadingType {
      font-size: 24px;
      text-align: left;
      color: #999999;
      margin-left: 30px;
      padding-bottom: 15px;
    }
    .richType {
      width: 400px;
      height: 200px;
    }
    .textViewType {
      width: 750px;
      margin-top: 10px;
      height: 400px;
      background-color: #fff;
    }
    .sliderType {
      width: 750px;
      height: 436px;
    }
    .sliderDivType {
      width: 750px;
      height: 436px;
      position: relative;
    }
    .imageType {
      width: 750px;
      height: 436px;
    }
    .indicator {
      position: absolute;
      left: 0;
      right: 0;
      bottom: 0;
      height: 40px;
      background-color: rgba(0, 0, 0, 0);
      item-color: #ddd;
      item-selected-color: rgb(0, 180, 255);
    }
    .homeTextView {
      width: 750px;
      height: 100px;
      background-color: #fff;
    }
    .itemPhoto{
      width: 88px;
      height: 88px;
    }
    .grildViewType{
      justify-content: center;
      flex-direction: column;
      padding-top: 30px;
      align-items: center;
    }
    .grildViewType_tv{
      font-size: 26px;
      color: #333;
      margin-top: 20px;
    }
    .grildView_cellType{
      margin-left: 25px;
      margin-right: 25px;
      justify-content: center;
    }
    .line {
      background-color: #ebebeb;
      width: 750px;
      height: 2px;
    }
    </style>
    

    相关文章

      网友评论

        本文标题:Weex组件<waterfall>瀑布流和GridV

        本文链接:https://www.haomeiwen.com/subject/rduuqctx.html