最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue 折疊展示多行文本組件的實(shí)現(xiàn)代碼

 更新時(shí)間:2021年10月13日 15:53:11   作者:?jiǎn)搪贩? 
這篇文章主要介紹了vue 折疊展示多行文本組件,自動(dòng)根據(jù)傳入的expand判斷是否需要折疊,非常完美,文章通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

折疊展示多行文本組件

折疊展示多行文本組件,自動(dòng)根據(jù)傳入的expand判斷是否需要折疊
兩種模式:展開(kāi)/收起展示全文本(默認(rèn))、popover展示全文本

先上代碼

<template>
  <div class="text-expand" ref="textExpand">
    <div v-if="!(showPopover && showPopoverJudge)">
      <span class="text-expand-content" :style="expandStyle">
        {{ (text === null || text === undefined || text === '') ? '--' : text }}
      </span>
      <div class="expander">
        <span
          v-if="showBtn && showBtnJudge"
        >
          <span
            v-if="!showFull"
            class="action action-expand"
            @click.stop="showFullFn(true)"
          >
            展開(kāi)
            <i v-if="showBtnIcon" class="iconfont iconxiajiantou" />
          </span>
          <span
            v-else
            class="action action-pack"
            @click.stop="showFullFn(false)"
          >
            收起
            <i v-if="showBtnIcon" class="iconfont iconshangjiantou" />
          </span>
        </span>
      </div>
    </div>
    <el-popover
      v-else
      :placement="popoverPlace"
      trigger="hover">
      <div class="popover-content">
        {{ text }}
      </div>
      <span class="text-expand-content" :style="expandStyle" slot="reference">{{ text }}</span>
    </el-popover>
  </div>
</template>
<script>
export default {
  name: "TextExpand",
  props: {
    text: { // 文本內(nèi)容
      type: String,
      default: () => ''
    },
    expand: { // 折疊顯示行數(shù)
      type: Number,
      default: () => 3
    },
    showBtn: { // 展開(kāi)、折疊按鈕
      type: Boolean,
      default: true
    },
    showBtnIcon: { // 展開(kāi)、折疊icon
      type: Boolean,
      default: true
    },
    showPopover: { // popover顯示全文本
      type: Boolean,
      default: false
    },
    popoverPlace: { // popover位置
      type: String,
      default: 'bottom'
    }
  },
  data () {
    return {
      showFull: false, // 是否展示全文本
      expandStyle: '',
      showBtnJudge: false, // 判斷是否需要折疊展示按鈕
      showPopoverJudge: false // 判斷是否需要折疊展示popover
    }
  },
  watch: {
    text: function (val) {
      this.judgeExpand()
    }
  },
  mounted () { 
    this.judgeExpand()
  },
  methods: {
    showFullFn (value) {
      this.expandStyle = value ? '' : `display: -webkit-box;word-break: break-all;-webkit-line-clamp: ${this.expand};-webkit-box-orient: vertical;text-overflow: ellipsis;overflow: hidden;`
      this.showFull = value
    },
    judgeExpand () { // 判斷是否需要折疊
      this.$nextTick(() => {
        const { expand } = this;
        const textExpandStyle = window.getComputedStyle(this.$refs.textExpand)
        const textExpandHeight = parseFloat(textExpandStyle.height) //獲取總高度
        const textExpandLineHeight = parseFloat(textExpandStyle.lineHeight) //獲取行高
        // 計(jì)算行高
        const rects = Math.ceil(textExpandHeight / textExpandLineHeight)
        if (rects <= expand) { // 不需要折疊展示
          this.showBtnJudge = false
          this.showPopoverJudge = false
        } else {
          this.showBtnJudge = true
          this.showPopoverJudge = true
          this.expandStyle = `display: -webkit-box;word-break: break-all;-webkit-line-clamp: ${this.expand};-webkit-box-orient: vertical;text-overflow: ellipsis;overflow: hidden;`
        }
      })
    }

  }
}
</script>
<style lang="less" scoped>
.text-expand{
  &-content{
    word-break: break-all;
    white-space: pre-wrap;
  }
  .expander {
    text-align: left;
    margin-top: 6px;
    .action {
      display: inline-block;
      font-size: 14px;
      color: #0281F0;
      cursor: pointer;
      i {
        display: inline;
        font-size: 12px;
      }
    }
    .action.action-pack {
      margin-left: 0;
    }
  }
}
.popover-content{
  max-width: 40vw;
  max-height: 30vh;
  overflow: hidden;
  word-break: break-all;
  overflow-y: auto;
}
</style>

用法

<text-expand :text="text" :expand="2" />

在這里插入圖片描述

在這里插入圖片描述

<text-expand :text="text" :expand="2" :showBtnIcon="false">

在這里插入圖片描述
在這里插入圖片描述

<text-expand :text="text" :expand="2" :showPopover="true">

在這里插入圖片描述
在這里插入圖片描述

到此這篇關(guān)于vue 折疊展示多行文本組件的文章就介紹到這了,更多相關(guān)vue 折疊展示多行文本組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue-router之路由鉤子函數(shù)應(yīng)用小結(jié)

    vue-router之路由鉤子函數(shù)應(yīng)用小結(jié)

    vue-router提供的導(dǎo)航鉤子主要用來(lái)攔截導(dǎo)航,讓它完成跳轉(zhuǎn)或取消,本文主要介紹了vue-router之路由鉤子函數(shù)應(yīng)用小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 一文帶你搞懂V8垃圾回收系統(tǒng)

    一文帶你搞懂V8垃圾回收系統(tǒng)

    在V8中,JavaScript的內(nèi)存空間分為棧(Stack)和堆(Heap)兩部分,垃圾回收的基本思路是:查找內(nèi)存中的所有變量,看哪些已經(jīng)不再需要,然后釋放這些變量所占用的內(nèi)存,本文就給大家梳理一下V8垃圾回收系統(tǒng),需要的朋友可以參考下
    2023-07-07
  • el?autocomplete支持分頁(yè)上拉加載使用詳解

    el?autocomplete支持分頁(yè)上拉加載使用詳解

    這篇文章主要為大家介紹了el?autocomplete支持分頁(yè)上拉加載使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • vue中process.env的具體使用

    vue中process.env的具體使用

    本文主要介紹了vue中process.env的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Vue.js bootstrap前端實(shí)現(xiàn)分頁(yè)和排序

    Vue.js bootstrap前端實(shí)現(xiàn)分頁(yè)和排序

    這篇文章主要為大家詳細(xì)介紹了Vue.js結(jié)合bootstrap前端實(shí)現(xiàn)分頁(yè)和排序效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 詳解vue3+element-plus實(shí)現(xiàn)動(dòng)態(tài)菜單和動(dòng)態(tài)路由動(dòng)態(tài)按鈕(前后端分離)

    詳解vue3+element-plus實(shí)現(xiàn)動(dòng)態(tài)菜單和動(dòng)態(tài)路由動(dòng)態(tài)按鈕(前后端分離)

    本文需要使用axios,路由,pinia,安裝element-plus,并且本文vue3是基于js而非ts的,這些環(huán)境如何搭建不做描述,需要讀者自己完成,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • 最適應(yīng)的vue.js的form提交涉及多種插件【推薦】

    最適應(yīng)的vue.js的form提交涉及多種插件【推薦】

    這篇文章主要介紹了最適應(yīng)的vue.js的form提交涉及多種插件,涉及到 vue.js動(dòng)態(tài)添加css樣式 ,tab切換 ,touch,表單提交,驗(yàn)證,toast,數(shù)據(jù)雙向綁定等。需要的朋友可以參考下
    2018-08-08
  • Vue中mixin和extends的使用方法詳解

    Vue中mixin和extends的使用方法詳解

    當(dāng)我們談?wù)揤ue的組件擴(kuò)展時(shí),經(jīng)常會(huì)遇到mixin和extends這兩個(gè)關(guān)鍵詞,它們提供了一種有效的方式來(lái)共享和重用組件邏輯,本文將深入探討Vue中mixin和extends的使用方法,并詳細(xì)探討它們的覆蓋邏輯,以便你在實(shí)際項(xiàng)目中能夠更好地應(yīng)用它們
    2023-08-08
  • 如何在vue里添加好看的lottie動(dòng)畫(huà)

    如何在vue里添加好看的lottie動(dòng)畫(huà)

    這篇文章主要介紹了在vue里添加好看的lottie動(dòng)畫(huà)效果的方法,在vue中引入lottie非常簡(jiǎn)單,需要的朋友可以參考下
    2018-08-08
  • vue源碼之批量異步更新策略的深入解析

    vue源碼之批量異步更新策略的深入解析

    這篇文章主要給大家介紹了關(guān)于vue源碼之批量異步更新策略的相關(guān)資料,關(guān)于vue異步更新是我們?nèi)粘i_(kāi)發(fā)中經(jīng)常遇到的一個(gè)功能,需要的朋友可以參考下
    2021-05-05

最新評(píng)論

类乌齐县| 东宁县| 遂宁市| 呼伦贝尔市| 运城市| 上虞市| 乌拉特中旗| 塔河县| 启东市| 茌平县| 甘泉县| 潜江市| 桐梓县| 淅川县| 安溪县| 武功县| 云安县| 正安县| 谷城县| 芦溪县| 托克逊县| 彰化市| 清涧县| 汤阴县| 丰顺县| 台前县| 日土县| 阿拉善盟| 垫江县| 南宫市| 芜湖县| 关岭| 紫金县| 且末县| 濮阳县| 定日县| 洪湖市| 陈巴尔虎旗| 枝江市| 渑池县| 恩施市|