标签超过两行折叠,可展开(淘宝搜索历史记录折叠效果)(vue)

问题:

有时,碰到很多行标签,需要展示的篇幅比较大,例如淘宝搜索的历史记录标签行,如果一下子全部展示很影响美观,我们就有必要使用折叠效果,达到用户需要展开查看全部时再查看。

解决:

1. 获取父容器所有的子节点,然后进行遍历操作,根据子节点的offsetLeft属性进行判断。

2. 因为最左边的那个节点的offsetLeft永远是0,所以可以判断出现了几行,超过2行截断数据。

3.根据自己需要展示的行数,截断数据数组,展开时恢复所有标签(以下代码根据两行做展示)

代码: 

<div id="tagList" class="tagList fss fw">
    <div v-for="(item, index) in qwCorpTagOld" :key="item.id + index" class="fs26">
      {{ item.name }}
    </div>
    <div v-if="showBtnZK && showDivZK" class=" fs26 iconfont iconjiantouxia" @click="restoreTags" />
    <div v-else class=" iconfont iconjiantoushang" @click="cuttingTags" />
</div>
// 恢复所有标签
restoreTags(){
  this.qwCorpTagOld = objDeepCopy(this.qwCorpTag)
  this.showBtnZK = false
},
// 切割标签
// 获取父容器所有的子节点,然后进行遍历操作,根据子节点的offsetLeft属性进行判断,
// 因为最左边的那个节点的offsetLeft永远是0,所以可以判断出现了几行,超过2行截断数据。
cuttingTags(){
  let idx = 0;
  let count = 0;
  let iIndex0 = 0;
  this.$nextTick(() => {
      // 获取所有标签节点
    let childTags = document.querySelector('#tagList').childNodes
    childTags.forEach((item,index) => {
        // 把第一个标签的左偏移保存
        // if(index === 0){
        //   // console.log(3333333333333, item.offsetLeft);
        //   iIndex0 = item.offsetLeft
        // }
        // 把第一个标签的左偏移保存,且如果第一个没有值,取下一个
      iIndex0 = iIndex0 ? iIndex0 : item.offsetLeft
      // 判断有几个标签在最左边,iIndex0判断第一个要不要作为标准来判断
      if(iIndex0 && item.offsetLeft === iIndex0){
        count++
        if(count === 3){
          idx = index - 1
          this.showDivZK = true
          this.showBtnZK = true
        }
      }
    })
    // 如果idx有值了,就对数组进行切割
    if(idx > 0) {
      this.qwCorpTagOld = [...new Set(this.qwCorpTagOld)].slice(0,idx)
    }
  })
},

效果图: 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值