微信小程序实现tab及瀑布流页面

一、效果

 二、代码

复制代码可以直接用

1、json代码

{
  "usingComponents": {},
  "navigationStyle": "custom"
}

2、xml代码

<!--pages/find_module/findPage.wxml-->
<view class="container_serach">
  <!-- 搜索模块 -->
  <!-- 头部搜索 -->
  <view class="title_search">
    <view class="seeck_md" bindtap="finish_back">
      <!--消息-->
      <view class="msg" bindtap="open_msg">
        <image class="msg_ic" src="/images/titelsearch/search_msg.png">
        </image>
        <text class="msg_txt">消息</text>
        <view class="msg_tag" hidden="{
   
   {noNewMsgs}}" />
      </view>
      <!--头标-->
      <view class="ahead_md" bindtap="searchtopage">
        <image class="title_icon_ss" hidden="true" src="/images/tabars/person_select.png">
        </image>
        <!--搜索-->
        <view class="search_md">
          <image class="seeck_ic" src="/images/titelsearch/search_icon.png">
          </image>
          <image class="vioce_icon" src="/images/titelsearch/search_vioce.png">
          </image>
        </view>
      </view>
      <!-- 退出 -->
      <view class="logout" hidden="true">
        <image class="logout_ic" src="/images/titelsearch/search_logout.png">
        </image>
        <text class="logout_txt">退出</text>
      </view>
    </view>
  </view>
  <!-- 头部搜索 -->
  <!-- Tab布局 推荐 营养 跌倒-->
  <!-- 导航栏navigationbar -->
  <scroll-view class="scroll-view_H" scroll-x="true" bindscroll="scroll" style="width: 100% ; background:white">
    <view class='navBox'>
      <block wx:for="{
   
   {dataHubList}}" wx:key="index" wx:id="index" wx:for-item="itemName">
        <view class='titleBox' id="{
   
   {index}}" bindtap='tabTitleClick' data-idx='0'>
          <text class="{
   
   {index == currentIndex ? 'fontColorBox' : ''}}">{
   
   {itemName.name}}</text>
          <hr class="{
   
   {index == currentIndex ? 'lineBox' : 'notLineBox'}}" />
        </view>
      </block>
    </view>
  </scroll-view>

  <!-- body -->
  <!-- 内容布局 -->
  <swiper class='swiperTtemBox' bindchange='pagechange' duration="300" current='{
   
   {currentIndex}}'>
    <block wx:for="{
   
   {4}}" wx:key="parent_index" wx:id="parent_index" wx:for-item="parent_itemName">
      <!--健康知识列表 catchtouchmove='onTouchMove' -->
      <swiper-item class='swiperTtemBox'>
        <!-- 列表 -->
        <scroll-view class='scbg' scroll-y='true'>
          <!-- 轮播图 -->
          <view class="page-section" style="margin-top: 30rpx;">
            <swiper indicator-dots="{
   
   {true}}" autoplay="{
   
   {true}}" circular="{
   
   {true}}" vertical="{
   
   {false}}" interval="{
   
   {3200}}" duration="{
   
   {200}}" previous-margin="{
   
   {0}}px" next-margin="{
   
   {0}}px">
              <block wx:for="{
   
   {deal}}" wx:key="index" wx:for-item="itemName">
                <swiper-item style="border-radius: 10rpx;background-color: transparent;">
                  <image class="swiper-item" src="{
   
   {itemName.url}}"></image>
                  <text class="swiper_txt">{
   
   {itemName.name}}</text>
                </swiper-item>
              </block>
            </swiper>
          </view>

          <!-- 列表 -->
          <view class="list_title">{
   
   {dataHubList[currentIndex].name}}</view>
          <view class="waterfall">
            <block wx:for="{
   
   {list}}" wx:key="index" wx:for-index="id" wx:for-item="itemName">
              <view class="item">
                <image class="list_item_pic" mode='scaleToFill' src="{
   
   {itemName.url}}">
                </image>
                <text class="item_conn_des">{
   
   {itemName.name}}</text>
              </view>
            </block>
          </view>
        </scroll-view>
      </swiper-item>
    </block>
  </swiper>

</view>

3、css代码

/* pages/find_module/findPage.wxss */

/* 页面全局样式设置 */
page {
  background: #eeecec;
  left: 0rpx;
  right: 0rpx;
}

/* scroll-view去掉滚动条 */
scroll-view ::-webkit-scrollbar {
  display:none;
  width:0;
  height:0;
  color:transparent;
}

.container_serach {
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 91%;
  left: 0rpx;
  right: 0rpx;
  top: 0rpx;
  overflow: hidden;
}

/* 头部搜索 */

/* 搜索标题 */
.title_search {
  background: linear-gradient(to right, #0455a7, #62c8ec);
  height: 170rpx;
  width: 100%;
  display: flex;
  flex-direction: row;
  align-items: flex-end;
  justify-content: flex-start;
}

/* 搜索模块样式 */
.seeck_md {
  display: flex;
  flex-direction: row;
  width: 100%;
  justify-content: space-between;
  align-items: flex-end;
}

/* 头部头像样式 */
.ahead_md {
  display: flex;
  flex-direction: row;
  width: 100%;
  margin-bottom: 20rpx;
}

.title_icon_ss {
  height: 70rpx;
  width: 70rpx;
  background-color: white;
  border-radius: 35rpx;
  margin-left: 20rpxrpx;
}

/* 消息提示 */
.msg_tag {
  position: absolute;
  background-color: #ff6162;
  width: 14rpx;
  height: 14rpx;
  border-radius: 7rpx;
  margin-bottom: 72rpx;
  margin-left: 24rpx;
}

/* 搜索部分bg*/
.search_md {
  background-color: #69ccf1;
  margin-left: 10rpx;
  height: 70rpx;
  width: 390rpx;
  border-radius: 35rpx;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
}

/* 搜索 */
.seeck_ic {
  height: 46rpx;
  width: 46rpx;
  margin-left: 20rpx;
  border-radius: 23rpx;
}

/* 语音 */
.vioce_icon {
  height: 46rpx;
  width: 46rpx;
  border-radius: 23rpx;
  margin-right: 20rpx;
}

/* 消息 */
.msg {
  width: 100rpx;
  height: 90rpx;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  margin-right: 0rpx;
  margin-left: 30rpx;
}

/* 消息图片标记 */
.msg_ic {
  height: 44rpx;
  width: 48rpx;
  margin-right: 2rpx;
  margin-right: 10rpx;
}

/* 消息文本 */
.msg_txt {
  font-size: 24rpx;
  height: 40rpx;
  width: 60rpx;
  margin-bottom: 20rpx;
  align-items: flex-start;
  color: #fff;
  display: flex;
  justify-content: flex-start;
}

/* 退出 */
.logout {
  width: 100rpx;
  height: 90rpx;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  margin-right: 30rpx;
}

/* 退出页面按钮样式 */
.logout_ic {
  height: 44rpx;
  width: 48rpx;
  margin-right: 2rpx;
}

/* 退出页面文本描述样式 */
.logout_txt {
  font-size: 24rpx;
  height: 40rpx;
  width: 60rpx;
  margin-bottom: 20rpx;
  align-items: flex-start;
  color: #fff;
  display: flex;
  justify-content: flex-start;
}

/* 搜索标题 */
/* 头部搜索  */

/* 轮播图 */
.page-body {
  padding-top: 60rpx;
}

.page-section {
  width: 100%;
  margin-bottom: 40rpx;
  box-sizing: border-box;
  padding-left: 30rpx;
  padding-right: 30rpx;
}

.swiper-item {
  height: 150px;
  width: 100%;
  border-radius: 10rpx;
}

/* 轮播图内容标题txt */
.swiper_txt {
  color: #666666;
  font-size: 30rpx;
  width: 240rpx;
  font-weight: bolder;
  position: relative;
  bottom: 70rpx;
  margin-left: 20rpx;
  white-space: nowrap;
  text-overflow: ellipsis;
  align-items: flex-start;
  display: -webkit-box;
  overflow: hidden;
}

/* 轮播图 */

/* tab标签模块 */
.navBox {
  width: 100%;
  height: 80rpx;
  background: white;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
}

/* 子iten */
.titleBox {
  /* 未选中文字的样式 */
  color: rgb(168, 170, 175);
  font-size: 30rpx;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  width: 200rpx;
  height: 100%;
}

.fontColorBox {
  /* 文字默认颜色 */
  color: #00c6ac;
}

.lineBox,
.notLineBox {
  /* 选中及未选中底线共同样式 */
  width: 60rpx;
  height: 4rpx;
  margin-top: 16rpx;
  border-radius: 4rpx;
}

.lineBox {
  /* 选中底线样式 */
  background: #00c6ac;
  width: 180rpx;
  height: 4rpx;
  margin-top: 16rpx;
  border-radius: 4rpx;
}

#aiding,
#aidfinish {
  margin-left: 0rpx;
}

/* tab标签模块 */


/* 列表部分 */
/* 列表页面 */
.swiperTtemBox {
  height:calc(100vh - 360rpx);
  overflow: scroll;
  margin: 0rpx 0rpx;
  background: #f0f0f0;
  font-size: 28rpx;
}

/* scrollview */
.scbg {
  background-color: #f0f0f0;
  width: 100%;
  height: calc(100vh - 360rpx);
  left: 0rpx;
  right: 0rpx;
  top: 0rpx;
  padding-bottom: 20rpx;
}

/* 列表标题 */
.list_title {
  background-color: transparent;
  margin-right: 30rpx;
  margin-left: 30rpx;
  margin-bottom: 20rpx;
  color: #000;
  font-weight: 800;
  font-size: 36rpx;
}

/* item */
.waterfall {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-gap: 0.5em;
  grid-auto-flow: row dense;
  grid-auto-rows: 15px;
  margin-left: 30rpx;
  margin-right: 30rpx;
}

.waterfall .item {
  width: 100%;
  background: #f0f0f0;
  color: #ddd;
}

.waterfall .item:nth-of-type(2n+1) {
  grid-row: auto / span 7;
  border-radius: 10rpx;
}

.waterfall .item:nth-of-type(2n+2) {
  grid-row: auto / span 5;
  border-radius: 10rpx;
}

/* .waterfall .item:nth-of-type(3n+3) {
  grid-row: auto / span 12;
  border-radius: 10rpx;
} */

/* item图片 */
.list_item_pic {
  height: 100%;
  width: 100%;
  border-radius: 10rpx;
}

/* item文本 */
.item_conn_des {
  color: #666666;
  font-size: 26rpx;
  width: 240rpx;
  font-weight: bolder;
  position: relative;
  bottom: 70rpx;
  margin-left: 10rpx;
  white-space: nowrap;
  text-overflow: ellipsis;
  align-items: flex-start;
  display: -webkit-box;
  overflow: hidden;
}

/* 列表部分 */

4、js代码

说明下js文件中的dataurl为图片地址,打不开的可以自行百度换一个图片替代

  {

      name: '面包',

      num: '1',

      title: '面包',

      url: 'http://183.214.193.179:9000/zykj-cloud-prod/undefined/2022/04/14/b0fe4413-9055-4b6c-861d-88f38860eff5.png',

    },

// pages/find_module/findPage.ts
Page({

  data: {
    deal:[{name: '裤子',url:'http://183.214.193.179:9000/zykj-cloud-prod/undefined/2022/04/14/cb643adf-0653-4e25-82c9-e27c99ef2a4e.png'},{name:'鞋子',url:'http://183.214.193.179:9000/zykj-cloud-prod/undefined/2022/06/24/da9c497c-c822-45ad-89da-3ad8b50e6ed3.png'},{name:'外套',url:'http://183.214.193.179:9000/zykj-cloud-prod/undefined/2022/04/14/b0fe4413-9055-4b6c-861d-88f38860eff5.png'}],
    list: [{
      name: '电视',
      num: '1',
      title: '测试数据测试测试测试测测试数据测试测试测试测测试数据测试测试测试测测试数据测试测试测试测',
      url: 'http://183.214.193.179:9000/zykj-cloud-prod/undefined/2022/04/14/cb643adf-0653-4e25-82c9-e27c99ef2a4e.png',
    },
    {
      name: '家电',
      num: '1',
      title: '测试数据测试测试测试测测试数据测试测试测试测测试数据测试测试测试测测试数据测试测试测试测',
      url: 'http://183.214.193.179:9000/zykj-cloud-prod/undefined/2022/06/24/da9c497c-c822-45ad-89da-3ad8b50e6ed3.png',
    },
    {
      name: '鞋子',
      num: '1',
      title: '鞋子',
      url: 'http://183.214.193.179:9000/zykj-cloud-prod/undefined/2022/04/14/b0fe4413-9055-4b6c-861d-88f38860eff5.png',
    },
    {
      name: '水果',
      num: '1',
      title: '水果',
      url: 'http://183.214.193.179:9000/zykj-cloud-prod/undefined/2022/04/14/cb643adf-0653-4e25-82c9-e27c99ef2a4e.png',
    },
    {
      name: '水桶',
      num: '1',
      title: '水桶',
      url: 'http://183.214.193.179:9000/zykj-cloud-prod/undefined/2022/04/14/b0fe4413-9055-4b6c-861d-88f38860eff5.png',
    },
    {
      name: '饮料',
      num: '1',
      title: '饮料',
      url: 'http://183.214.193.179:9000/zykj-cloud-prod/undefined/2022/06/24/da9c497c-c822-45ad-89da-3ad8b50e6ed3.png',
    },
    {
      name: '生鲜',
      num: '1',
      title: '生鲜',
      url: 'http://183.214.193.179:9000/zykj-cloud-prod/undefined/2022/04/14/b0fe4413-9055-4b6c-861d-88f38860eff5.png',
    },
    {
      name: '肉类',
      num: '1',
      title: '肉类',
      url: 'http://183.214.193.179:9000/zykj-cloud-prod/undefined/2022/04/14/cb643adf-0653-4e25-82c9-e27c99ef2a4e.png',
    },
    {
      name: '面包',
      num: '1',
      title: '面包',
      url: 'http://183.214.193.179:9000/zykj-cloud-prod/undefined/2022/04/14/b0fe4413-9055-4b6c-861d-88f38860eff5.png',
    },
    {
      name: '大米',
      num: '1',
      title: '大米',
      url: 'http://183.214.193.179:9000/zykj-cloud-prod/undefined/2022/04/14/cb643adf-0653-4e25-82c9-e27c99ef2a4e.png',
    }
    ],
    dataHubList:[
      {
        name:'推荐',
        id:0
      },
      {
        name:'营养',
        id:1
      },
      {
        name:'跌倒',
        id:2
      },
      {
        name:'应急',
        id:3
      }
    ],
    currentIndex:0,
    findChoose: true,//选中标记
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad() {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  // tab事件监听
  tabTitleClick:function(e:any){
    //  console.log("===当前选择tabid==="+JSON.stringify(e.currentTarget.id));
     var that = this;
     that.setData({
       //拿到当前索引并动态改变
       currentIndex: e.currentTarget.id
     })

  },

  // 页面事件
  pagechange:function(e:any){
    // console.log("===sankni==="+JSON.stringify(e));
    var that = this;
    that.setData({
      //拿到当前索引并动态改变
      currentIndex: e.detail.current
    })
  },

  // 列表滑动切换事件监听
  onTouchMove:function(){
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

   // 打开消息页面
   open_msg: function () {
    wx.navigateTo({
      url: '/pakagemsg/pages/msg/msg'
    })
  },

    // 搜索
    finish_back: function () {
      wx.showToast({
        title: '暂无可搜索数据...',
        icon: 'loading',
        mask: true,
        duration: 1000
      })
      // wx.navigateTo({
      //   url: "/pages/healthyhead/searchmodule/searchapge"
      // })
    },
  
    // 健康页
    first_select: function () {
      wx.redirectTo({
        url: "/pages/home/healthypage"
      })
    },
  
    // 服务
    four_select: function () {
      wx.redirectTo({
        url: '/pages/services/servicespage'
      })
    },
  
    //我的
    five_select: function () {
      wx.redirectTo({
        url: '/pages/personal/myinfo'
      })
    },

  //拨号
  three_select: function () {
    wx.showModal({
      content: '是否发起一键呼救?',
      confirmText: '确定',
      cancelText: '取消',
      success(res) {
        if (res.confirm) {
          wx.makePhoneCall({
            phoneNumber: '120',
            success: function () {
              console.log("拨打电话成功!")
            },
            fail: function () {
              console.log("拨打电话失败!")
            }
          })
          console.log('用户点击确定')
        } else if (res.cancel) {
          console.log('用户点击取消')
        }
      }
    })
  },

})

猜你喜欢

转载自blog.csdn.net/shi450561200/article/details/131169600