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展開の実装プロセスの分析

推薦する

CSSとJSでロマンチックな流星群アニメーションを実現

1. レンダリング 2. ソースコードhtml < 本文 > < div クラス ...

jQueryはショッピングカートの完全な機能を実現します

この記事では、ショッピングカートの完全な機能を実現するためのjQueryの具体的なコードを参考までに...

MySQLデータベースのマスタースレーブ同期構成と読み取り書き込み分離

MySQL マスター スレーブ レプリケーションを使用する利点は次のとおりです。 1. 安定性を向上...

MySQLのユーザー権限の確認と管理方法の詳細な説明

この記事では、例を使用して、MySQL ユーザー権限を確認および管理する方法を説明します。ご参考まで...

Mysql 5.7.19 無料インストール版 (64 ビット) の設定方法に関する詳細なチュートリアル

公式サイトから mysql-5.7.19-winx64 をダウンロードします。これはシステムの 64...

JavaScript 配列の詳細な概要

目次1. 配列誘導1. 文字列を配列に分割する2. コレクションとマップを新しい配列に変換する3. ...

同じページを動的にロードするための Vue ルーティングリスニングの例

目次シナリオ分析発達要約するシナリオ分析システムでは、1 つのモジュールに 3 つのサブモジュールが...

MySQLログシステムの詳細情報共有

大規模なシステムに取り組んだことがある人なら誰でも、ログの役割を過小評価してはならないことを知ってい...

js、css、htmlはブラウザのさまざまなバージョンを決定します

正規表現を使用してIEブラウザのバージョンを判別するIEブラウザかどうか確認するif (docume...

HTML テーブル タグ チュートリアル (36): テーブル ヘッダーの背景色属性 BGCOLOR

<TH> タグは、テーブル内のヘッダーのプロパティを設定するために使用されます。以下の...

Windows Server 2008 R2 リモート デスクトップのポート 3389 を変更する方法

Windows サーバー リモート デスクトップのデフォルトのポート番号は 3389 です。職場でサ...

MySQL 入門 - SQL 実行プロセス

目次1. プロセス2. コアアーキテクチャ2.1 サーバー層の基本コンポーネントの紹介3. ステート...

js のプロトタイプ、プロトタイプ オブジェクト、プロトタイプ チェーンの包括的な分析

目次プロトタイプを理解するプロトタイプオブジェクトを理解するインスタンスプロパティとプロトタイププロ...

win10環境でDockerをインストールする実装

1. Docker公式サイトにアクセスするまず、Dockerの公式ウェブサイトにアクセスして、最新の...

携帯電話番号の真ん中の4桁を隠すMySQL SQL文の方法

最初のクエリ テーブル構造 (sys_users): sys_users から * を選択します。最...