【微信小程序】布局

单页面高度100% 

Page {
    height: 100%;
    background:white;
}

内联元素下方有一段空白区域

<image class="inline" src="/image/carousel.png"></image>
.inline {
    display: flex;
    flex-direction: column;   
}

内联元素设置line-height失效

<text class="inline">这是文字</text>
.inline {
    display:inline-block;
    height:80rpx;
    line-height:80rpx; 
}

设置box-shadow阴影在真机上无效

<view class="box-shadow"></view>
.box-shadow {
    height: 50px;
    width: 50px;
    box-shadow: 0rpx 10rpx 50rpx 10rpx rgba(85, 85, 85, 0.10);
}

标签文字自动换行

view,
cover-view {
    word-break: keep-all;
    word-wrap: break-word;
    white-space: pre-line;
}

单行文本溢出部分省略号...显示无效

display: block;

text {
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowwrap;
}

组织结构

1. 顶部页头

<scroll-view>让文字过多的时候横向滚动,记住要设置class="text"成white-space:nowrap 这样保证在同一行。

<scroll-view  scroll-x="{{true}}" class="text">
  <text class="crumb" 
    wx:for-items="{{title}}" 
    wx:key='index' 
    data-item="{{item}}" 
    data-index="{{index}}" 
    bindtap="changeCrumb"
  >
    {{item.name}} 

    <!-- 最后一项没有箭头 -->
    <text class="arrow" wx:if="{{title.length -1 != index}}"> > </text>
  </text>
</scroll-view>
title:[
  {name:'首页'},
],

2.底部列表页展示

展示的页面展示名称和手机,但不是每一页都展示手机,所以给手机号和图片添加判断条件wx:if="{{item.phone}}"。使用 show: false 是为了阻止拨打电话确定或取消后触发onShow。同时在onShow中要对设置默认展示的列表 filter_list: this.data.list 。

<view  class="item" 
    wx:for-items="{{filter_list}}" 
    wx:key='index' 
    data-item="{{item}}" 
    bindtap="changeItem"
>
  {{item.name}} 

  <!-- 手机号 -->
  <text wx:if="{{item.phone}}">{{item.phone}}</text>

  <!-- 手机图片 -->
  <van-image 
    data-phone="{{item.phone}}"  
    catchtap="callPhone" 
    width="80rpx" 
    height="40rpx" 
    src="https://xxxxx/phone.svg" 
    wx:if="{{item.phone}}"
  ></van-image>
</view>
list:[
  {
    name:'哈哈哈哈哈1',
    level: 0,
    children:[
      {
        name: '嘻嘻嘻嘻嘻嘻1',
        level: 1,
        children:[
          {
            name: '嘤嘤嘤嘤嘤嘤1',
            level: 1,
            phone:'15952011111'
          },
          {
            name: '嘤嘤嘤嘤嘤嘤2',
            level: 2,
          }
        ]
      },
      {
        name: '嘻嘻嘻嘻嘻嘻1',
        level: 1,
        children:[
          {
            name: '嘤嘤嘤嘤嘤嘤3',
            level: 2,
          },
          {
            name: '嘤嘤嘤嘤嘤嘤4',
            level: 2,
          }
        ]
      }
    ]
  }
],

// 筛选出来的
filter_list:[],

// 阻止刷新onShow
show: true,
​onShow() {
  if(this.data.show == true) {
    this.setData({
      filter_list: this.data.list
    })
  }
}

​
callPhone(e) {
  // 阻止onShow
  this.setData({
    show: false
  })

  // 拨打电话
  if(phone) {
    wx.makePhoneCall({
      phoneNumber: e.currentTarget.dataset.phone
    })
  }
},

3.点击面包屑

获取当前点击的下标index去整个结构遍历,找出符合level == index的下标,然后将顶部面包屑中此下标后面的值清空,将当前层级的list同时也赋值给filter_list。

changeCrumb(e) {
  let index = e.currentTarget.dataset.index
  this.dg(this.data.list, index)
},

dg(list,index) {
  
  list.some((v,k)=>{
    if(v.level == index) {
      
      // 删除当前下标后的所有值
      this.data.title.splice(index + 1, this.data.title.length - 1)
      
      this.setData({
        filter_list: list,
        title: this.data.title,
      })
      return true
    }

    if(v.children && v.children.length > 0) {
      this.dg(v.children,index)
    }
  })
},

4.点击底部列表页

当前的level比顶部的下标少1,所以加上1之后生成的index可以定位顶部。

获取点击的项目和下标。将当前的name添加到顶部,将当前项目的children赋值给筛选列表filter_list.

changeItem(e) {
  let item = e.currentTarget.dataset.item
  let index = item.level + 1
  let data = 'title['+index+'].name'
  if(item.children && item.children.length > 0) {
    this.setData({
      [data]: item.name,
      filter_list: item.children
    })
  }
},

实现效果

<scroll-view  scroll-x="{{true}}" class="text">
  <text class="crumb" wx:for-items="{{title}}" wx:key='index' data-item="{{item}}" data-index="{{index}}" bindtap="changeCrumb">{{item.name}} <text class="arrow" wx:if="{{title.length -1 != index}}"> > </text></text>
</scroll-view>

<view wx:for-items="{{filter_list}}" wx:key='index' class="item" data-item="{{item}}" bindtap="changeItem">
  {{item.name}} 
  <text wx:if="{{item.phone}}">{{item.phone}}</text>
  <van-image data-phone="{{item.phone}}"  catchtap="callPhone" style="z-index:999; position: absolute;" class="ml" width="80rpx" height="40rpx" src="https://mini.yunfangkj.com/datas/fileStore/phone.svg" wx:if="{{item.phone}}"></van-image>
</view>
list:[
  {
    name:'哈哈哈哈哈1',
    level: 0,
    children:[
      {
        name: '嘻嘻嘻嘻嘻嘻1',
        level: 1,
        children:[
          {
            name: '嘤嘤嘤嘤嘤嘤1',
            level: 1,
            phone:'15952011111'
          },
          {
            name: '嘤嘤嘤嘤嘤嘤2',
            level: 2,
          }
        ]
      },
      {
        name: '嘻嘻嘻嘻嘻嘻1',
        level: 1,
        children:[
          {
            name: '嘤嘤嘤嘤嘤嘤3',
            level: 2,
          },
          {
            name: '嘤嘤嘤嘤嘤嘤4',
            level: 2,
          }
        ]
      }
    ]
  }
],

// 筛选出来的
filter_list:[],

// 顶部
title:[
  {name:'首页'},
],

// 阻止刷新onShow
show: true,
onShow() {
  if(this.data.show == true) {
    this.setData({
      filter_list: this.data.list
    })
  }
}

changeCrumb(e) {
  let index = e.currentTarget.dataset.index
  this.dg(this.data.list, index)
},

dg(list,index) {
  
  list.some((v,k)=>{
    if(v.level == index) {
      
      // 删除当前下标后的所有值
      this.data.title.splice(index + 1, this.data.title.length - 1)
      
      this.setData({
        filter_list: list,
        title: this.data.title,
      })
      return true
    }

    if(v.children && v.children.length > 0) {
      this.dg(v.children,index)
    }
  })
},


changeItem(e) {
  let item = e.currentTarget.dataset.item
  let index = item.level + 1
  let data = 'title['+index+'].name'
  if(item.children && item.children.length > 0) {
    this.setData({
      [data]: item.name,
      filter_list: item.children
    })
  }
},


callPhone(e) {
  // 阻止onShow
  this.setData({
    show: false
  })

  // 拨打电话
  if(phone) {
    wx.makePhoneCall({
      phoneNumber: e.currentTarget.dataset.phone
    })
  }
},

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宾果的救星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值