Vue 折りたたみ表示の複数行テキスト コンポーネントの実装コード

Vue 折りたたみ表示の複数行テキスト コンポーネントの実装コード

折りたたみ表示の複数行テキストコンポーネント

複数行のテキスト コンポーネントを折りたたんで表示し、展開に応じて折りたたむかどうかを自動的に決定します。2 つのモード: 展開/折りたたみで全文を表示 (デフォルト)、ポップオーバーで全文を表示

まず、コード

<テンプレート>
  <div class="text-expand" ref="textExpand">
    <div v-if="!(showPopover && showPopoverJudge)">
      <span class="text-expand-content" :style="expandStyle">
        {{ (text === null || text === 未定義 || text === '') ? '--' : テキスト }}
      </span>
      <div class="expander">
        <span
          v-if="showBtn && showBtnJudge"
        >
          <span
            v-if="!showFull"
            クラス="アクションアクション展開"
            @click.stop="showFullFn(true)"
          >
            展開<i v-if="showBtnIcon" class="iconfont iconxiajiantou" />
          </span>
          <span
            v-else
            クラス="アクションアクションパック"
            @click.stop="showFullFn(false)"
          >
            非表示 <i v-if="showBtnIcon" class="iconfont iconshangjiantou" />
          </span>
        </span>
      </div>
    </div>
    <el-popover
      v-else
      :placement="ポップオーバー場所"
      トリガー="ホバー">
      <div class="popover-content">
        {{ 文章 }}
      </div>
      <span class="text-expand-content" :style="expandStyle" slot="reference">{{ テキスト }}</span>
    </el-popover>
  </div>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
  名前: "TextExpand",
  小道具: {
    text: { // テキストコンテンツタイプ: 文字列、
      デフォルト: () => ''
    },
    expand: { // 折り返して行数を表示する type: Number,
      デフォルト: () => 3
    },
    showBtn: { // 展開、折りたたみボタンタイプ: ブール値、
      デフォルト: true
    },
    showBtnIcon: { // 展開、折りたたみアイコン
      タイプ: ブール値、
      デフォルト: true
    },
    showPopover: { // ポップオーバーに全文を表示 type: Boolean,
      デフォルト: false
    },
    popoverPlace: { // ポップオーバーの位置タイプ: 文字列、
      デフォルト: '下'
    }
  },
  データ () {
    戻る {
      showFull: false, // 全文を表示するかどうか expandStyle: '',
      showBtnJudge: false, //ボタンを折りたたんで表示するかどうかを判断 showPopoverJudge: false //ポップオーバーを折りたたんで表示するかどうかを判断
    }
  },
  時計:
    テキスト: 関数 (val) {
      this.judgeExpand()
    }
  },
  マウントされた(){ 
    this.judgeExpand()
  },
  メソッド: {
    showFullFn (値) {
      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 = 値
    },
    judgeExpand () { //折りたたむかどうかを判断します。$nextTick(() => {
        const {展開} = this;
        定数 textExpandStyle = window.getComputedStyle(this.$refs.textExpand)
        const textExpandHeight = parseFloat(textExpandStyle.height) // 合計の高さを取得します const textExpandLineHeight = parseFloat(textExpandStyle.lineHeight) // 行の高さを取得します // 行の高さを計算します const rects = Math.ceil(textExpandHeight / textExpandLineHeight)
        if (rects <= expand) { // 折りたたんで表示する必要はありません this.showBtnJudge = false
          this.showPopoverJudge = false
        } それ以外 {
          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;`
        }
      })
    }

  }
}
</スクリプト>
<style lang="less" スコープ>
.text-expand{
  &-コンテンツ{
    単語区切り: 全区切り;
    空白: 事前ラップ;
  }
  .エキスパンダー{
    テキスト配置: 左;
    上マージン: 6px;
    。アクション {
      表示: インラインブロック;
      フォントサイズ: 14px;
      色: #0281F0;
      カーソル: ポインタ;
      私 {
        表示: インライン;
        フォントサイズ: 12px;
      }
    }
    .action.アクションパック{
      左マージン: 0;
    }
  }
}
.ポップオーバーコンテンツ{
  最大幅: 40vw;
  最大高さ: 30vh;
  オーバーフロー: 非表示;
  単語区切り: 全区切り;
  オーバーフロー-y: 自動;
}
</スタイル>

使用法

<text-expand :text="テキスト" :expand="2" />

ここに画像の説明を挿入

ここに画像の説明を挿入

<text-expand :text="テキスト" :expand="2" :showBtnIcon="false">

ここに画像の説明を挿入
ここに画像の説明を挿入

<text-expand :text="テキスト" :expand="2" :showPopover="true">

ここに画像の説明を挿入
ここに画像の説明を挿入

これで、vue 折りたたみ表示複数行テキスト コンポーネントに関するこの記事は終了です。vue 折りたたみ表示複数行テキスト コンポーネントに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue2.0 折りたたみ可能なリスト v-for ループ表示例
  • Vueはキー表示のショートカットキー効果を取得する入力コンポーネントを実装します
  • Vue+elementUI コンポーネントは、折りたたみ可能な動的レンダリングのマルチレベル サイドバー ナビゲーションを再帰的に実装します。
  • Vue.js の再帰コンポーネントを使用して折りたたみ可能なツリー メニューを実装する (デモ)

<<:  XHTML の一般的な構造タグ

>>:  Dockerイントラネット侵入FRP展開の実装プロセスの分析

推薦する

Linux でショートカットアイコンを設定する方法

序文Linux でショートカットを作成すると、アプリケーションをより速く開くことができます。ここで、...

MySQLで全角文字と半角文字を保存する場合の違い

残念ながら、社内の IM のテスト中に MYSQL_DATA_TRUNCATED エラーが再び発生し...

mysql8.0.11をインストールしてrootパスワードを変更し、navicat for mysqlに接続するアイデアの詳細な説明

1.1. ダウンロード:公式ウェブサイトから zip パッケージをダウンロードします。私は 64 ビ...

Windows 10 での Tomcat のインストールと展開に関する詳細なチュートリアル

目次1 Java環境の設定2 tomcatのインストールと展開Tomcat をインストールして展開す...

MySql で、存在しない場合は挿入し、存在する場合は更新する方法

まとめシナリオによっては、レコードがない場合は挿入し、レコードがある場合は更新するという要件がある場...

WeChatミニプログラム開発のためのコンポーネント設計仕様

WeChat ミニプログラム コンポーネント設計仕様コンポーネントベースの開発という考え方は、私の開...

解決策 - BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 権限が不十分です

1) jdkファイルが保存されているフォルダパスを入力します私はここにいますusr/local/jd...

シンプルなタブバー切り替えケースを実現するJavaScript

この記事では、タブバーの切り替え効果を簡単に実現するためのJavaScriptの具体的なコードを参考...

ボタンを使用してフォームを送信する代わりに、画像を使用してフォームを送信します。

コードをコピーコードは次のとおりです。 <フォームメソッド="post" ...

Vue3 はメッセージコンポーネントの例を実装します

目次コンポーネント設計最終的なコンポーネントAPIの定義コンポーネント構造の定義テンプレートとスタイ...

DockerはClickHouseをインストールし、データテストを初期化します

クリックハウスの紹介ClickHouse は、SQL クエリを使用して分析データ レポートをリアルタ...

CSS の inline-block の最小幅値の詳細な説明

序文最近、私は夜に時間を取って「CSS World」という本を読んでいます。この本は非常に興味深く、...

最初のReactページを作成する方法

目次Rractとは何ですか?背景React スキャフォールディングJSXとは何かRractとは何です...

vueプロジェクトのマルチ環境設定(.env)の実装

目次マルチ環境構成とは何ですか? また、なぜそれが必要なのですか? .env ファイルはどこで設定さ...

Linux入力サブシステムフレームワーク原理の分析

入力サブシステムフレームワークLinux 入力サブシステムは、上から下に向かって、入力サブシステム ...