el-tree での不完全なテキスト表示の解決策

el-tree での不完全なテキスト表示の解決策

要素 ui の el-tree コンポーネントを使用すると、次のような問題がよく発生します。

el-tree をレンダリングすると、テキスト コンテンツの長さが不一致になり、長すぎるテキスト全体を表示できなくなります。

試してみた結果、次の 3 つの解決策が見つかりました。方法 3 が推奨されます。

方法1: 水平スクロールバーを設定する最も簡単な方法

効果:

現在のツリーノードのspanタグにスタイルを設定します

オーバーフロー:自動;
// または overflow-x: auto;

質問:

オーバーフローが最も内側のスパン レイヤーに設定されている場合にのみ、余分な部分の表示を効果的に制御できるため、テキストの複数の非常に長い部分に水平スクロール バーが表示され、少し見苦しくなります。上のラベルレイヤーにオーバーフローを追加しても、まだ見苦しいままです。つまり問題は解決されないのです。次

方法2(新規):ドラッグバーを追加して外側のコンテナの幅を変更する

効果:

コード:

4 つの部分の ID バインディングで十分であることに注意してください。

<el-container id="dept">
    <el-aside width="220px" id="drag-dept-left">
    </el-aside>
    <div id="dragBar-dept" class="dragBar"></div>
    <el-main id="drag-dept-right" class="drag-right">
    </el-main>
</el-コンテナ>

cssは参考用です。幅のコントロールは自分で変更してください。

.ドラッグバー{
  幅: 3px;
  高さ: 100%;
  背景: #01e4fd;
  カーソル: e-resize;
}
.右ドラッグ{
  右パディング: 0px;
  幅: calc(100% - 213px);
}

js呼び出し

マウントされた(){
    // 対応するメソッド入力(スライダー ID、左 ID、右 ID、外側 ID)を使用してズーム スライダーをマウントします。
    this.$_comFun.bindResize('dragBar-dept', 'drag-dept-left', 'drag-dept-right', 'dept')
  },

js グローバル変数

デフォルトの新しいVuex.Storeをエクスポートします({
    州: {
      // スクロールバーをドラッグして内側の div の幅を変更します dragBar: false
    },
    突然変異:
    },
    アクション: {
    },
    モジュール:
    }
})

js パブリックメソッド

'../index' からストアをインポートします

// スケールバーをドラッグして左のdivの幅を変更します。メソッドbindResize(barID, leftID, rightID, docID){
    // フラグを移動するかどうかを設定します。let removeFlag = false
    // 左側のスケールされた div オブジェクトを取得します。let bar = document.getElementById(barID)
    左ドラッグ = document.getElementById(leftID).style
    右ドラッグ = document.getElementById(rightID).style
    doc = document.getElementById(docID) とします。
    let x = 0 // マウスのX軸とY軸の座標 // マウスイベントをマウント bar.addEventListener('mousedown', moveDownMouse, false)
    // 移動とマウスのフォーカス喪失イベントは DOM にバインドする必要があることに注意してください。バーにのみバインドされている場合は、バー上でフォーカスが移動\喪失したときにのみ有効になります。doc.addEventListener('mousemove', mouseMove, false)
    doc.addEventListener('mouseup', mouseUp, false)

    関数moveDownMouse(e) {
      削除フラグ = true
      // 要素を押した後の現在のマウスとオブジェクトの座標を計算します x = e.clientX - bar.offsetWidth - dragLeft.width.replace('px', '')
      // setCapture がサポートされている場合はフォーカスをキャプチャします // イベントを設定します // イベントをバインドします if (bar.setCapture) {
        bar.setCapture()
        bar.onmousemove = 関数 (ev) {
          マウス移動(ev || イベント)
        }
        bar.onmouseup = マウスアップ
      } それ以外 {
        // bar.addEventListener('mousemove', mouseMove, false)
        // bar.addEventListener('mouseup', mouseUp, false)
      }
      // デフォルトイベントの発生を防ぐ e.preventDefault()
      store.state.dragBar = false
    }
    //移動イベント関数mouseMove(e) {
      if (フラグを削除) {
        // 宇宙は操作上無敵です。let width = e.clientX - x
        幅<200の場合{
          ドラッグ左幅 = '200px'
        } それ以外の場合 (幅 > 400) {
          ドラッグ左幅 = '400px'
        } それ以外 {
          dragLeft.width = 幅 + 'px'
        }
        // 右の幅が計算されていない場合、ドラッグバーは圧縮されます dragRight.width = 'calc(100% - ' + dragLeft.width + ')'
      }
    }
    //イベント関数mouseUp()を停止{
      削除フラグ = false
      // releaseCapture がサポートされている場合 // フォーカスを解放 // 削除イベント // アンインストールイベント if (bar.releaseCapture) {
        bar.releaseCapture()
        bar.onmousemove = bar.onmouseup = null
      } それ以外 {
        // bar.removeEventListener('mousemove', mouseMove, false)
        // bar.removeEventListener('mouseup', mouseUp, false)
      }
      store.state.dragBar = true
    }
}

方法2(旧):ドラッグバーを追加して外側のコンテナの幅を変更する

効果:

ドラッグバーを追加する

<div id="ドラッグバー"></div>

現在のコンポーネントがロードされた後、ドラッグバーにイベントをバインドします

  マウントされた(){
    // 対応するメソッド入力(ドラッグ バー オブジェクト、左の div の ID)を使用してズーム ドラッグ バーをマウントします。
    this.bindResize(document.getElementById('dragBar'), 'menu')
  },
  メソッド: {
   // スケールバーをドラッグして左のdivの幅を変更します。メソッドbindResize(bar, menu){
     /* eslint を無効にする */
     // 左側のスケールされた div オブジェクトを取得します。let els = document.getElementById(menu).style
     let x = 0 // マウスのX座標とY座標 jQuery(bar).mousedown(function (e) {
       // 要素を押した後、現在のマウスとオブジェクトの座標を計算します x = e.clientX - bar.offsetWidth - jQuery('#' + menu).width()
       // setCapture がサポートされている場合はフォーカスをキャプチャします // イベントを設定します // イベントをバインドします if (bar.setCapture) {
         bar.setCapture()
         bar.onmousemove = 関数 (ev) {
           マウス移動(ev || イベント)
         }
         bar.onmouseup = マウスアップ
       } それ以外 {
         jQuery(ドキュメント).bind('mousemove', mouseMove).bind('mouseup', mouseUp)
       }
       // デフォルトイベントの発生を防ぐ e.preventDefault()
     })
     //移動イベント関数mouseMove(e) {
       // 宇宙は超無敵の計算中 els.width = e.clientX - x + 'px'
     }
     //イベント関数mouseUp()を停止{
       // releaseCapture がサポートされている場合 // フォーカスを解放 // 削除イベント // アンインストールイベント if (bar.releaseCapture) {
         bar.releaseCapture()
         bar.onmousemove = bar.onmouseup = null
       } それ以外 {
         jQuery(document).unbind('mousemove', mouseMove).unbind('mouseup', mouseUp)
       }
     }
     /* eslint を有効にする */
   }
  }

質問:

方法は良いのですが、少し面倒です。単純に表示したいだけで、ドラッグしたくない場合はどうすればいいでしょうか?次

方法3: ...を使用して、マウスを移動したときにフルネームが表示されることを示します。

効果:

プロセス:

これは問題に遭遇したときに最初に思い浮かぶ解決策ですが、正しい方向にたどり着くまでに多くの回り道をする必要がありました。

element uiの公式el-treeドキュメントには、ノードにtitleタグを挿入する手順が書かれていなかったので、ソースコードを開いて、該当ノードのspanタグにtitle="node.name"と無理やり書いてみたのですが、ダメでした。

カスタム ノード コンテンツを確認するまでは、公式の例を使用してノードを挿入および削除していましたが、クリック イベントをホバー イベントに変換して、ノード テキストの完全なコンテンツを表示できました。

次に、スコープ スロットを挿入することを選択すると、次のようになります。

ついにこの問題は終わりました。

コード:

el-tree コンポーネントを次のように使用します。

<el-tree ref="tree" :data="treeMenus" :props="multiProps" :show-checkbox="true" :node-key="nodeId">
 <span class="span-ellipsis" slot-scope="{ ノード、データ }">
  <span :title="node.label">{{ node.label }}</span>
 </span>
</el-tree>

テキストが完全には表示されないことを示すために ... を使用して、span タグにスタイルを追加します。

.span-ellipsis {
  幅: 100%;
  オーバーフロー: 非表示;
  空白: ラップなし;
  テキストオーバーフロー: 省略記号;
}

追加メモ:

.span-ellipsis スタイル設定が無効な場合は、display: ブロックを追加する必要があります。つまり、次のようになります。

.span-ellipsis {
  幅: 100%;
  オーバーフロー: 非表示;
  空白: ラップなし;
  テキストオーバーフロー: 省略記号;
  表示: ブロック;
}

要素 ui の el-tree コンポーネントを使用しているため、span の外側のスタイルはデフォルトで display: flex; に設定されており、span の display プロパティを設定する必要はありません。

el-tree テキストの不完全な表示の問題の解決に関するこの記事はこれで終わりです。el-tree テキストの不完全な表示に関する関連コンテンツの詳細については、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 要素ツリーコントロールは、ドロップダウンメニューとアイコンを統合します(ツリー+ドロップダウン+入力)
  • 面接では、Set 実装クラス: TreeSet について質問する必要があります。
  • 完全なコードによる KDTree の C++ 実装
  • JDK コレクション ソースコード解析 TreeMap (パート 2)
  • JDK コレクション ソースコード解析 TreeMap (I)
  • ConcurrentHashMap の解析: 赤黒木プロキシ クラス (TreeBin)
  • antd ツリーと親子コンポーネント間の値転送問題について (React のまとめ)
  • C# TreeNode ケーススタディ

<<:  Linuxでファイルを削除してもスペースが解放されない問題の対処方法

>>:  mysql 8.0.18.zip のインストールと構成方法のグラフィック チュートリアル (Windows 64 ビット)

推薦する

ECMAscript の新機能の紹介

目次1. 関数パラメータのデフォルト値1.1 関数パラメータのデフォルト値の指定1.2 分離割り当て...

MySQL 時間統計方法の概要

データベースの統計を行う場合、多くの場合、年、月、日に基づいてデータを収集し、echart を使用し...

VMware で VMware ツールをインストールしてもインストール ファイルが表示されない問題を解決する方法

VMware ツールは VMware の使用に非常に便利です。そのため、VMware ツールをインス...

Linux ブートシステム方式の分析

この記事では、Linux システムを起動する方法について説明します。ご参考までに、詳細は以下の通りで...

データベースの水平セグメンテーションを実装するための2つのアイデア

導入インターネット アプリケーションの普及に伴い、膨大なデータの保存とアクセスがシステム設計における...

Linuxシステムはポート3306、8080などを外部に開放します。ファイアウォール設定の詳しい説明

多くの場合、Linux システムに Web サービス アプリケーション (Tomcat、Apache...

CentOS7 は rpm パッケージを使用して mysql 5.7.18 をインストールします

例示するこの記事は、2017 年 5 月 20 日に MySQL-5.7.18 を使用して作成されま...

MySQL の on と where における左結合設定条件の使用法の違いの分析

この記事では、MySQL の左結合における on 条件と where 条件の使用法の違いを例を使って...

Docker は Python Flask+ nginx+uwsgi コンテナを構築します

Nginxをインストールするまずcentosイメージをプルしますdocker pull centos...

JS ES6 スプレッド演算子の魔法のような使い方

目次1. 属性を追加する2. 複数のオブジェクトを結合する3. オブジェクトのプロパティを削除する4...

CSS の 6 つの重要なセレクター (3 秒で覚える)

出典: https://blog.csdn.net/qq_44761243/article/deta...

MySQL の自動増分主キーに関する詳細な説明

目次特徴保存戦略自己増加の決定自動増分値の変更実行プロセス問題点自動増分ロックロック戦略バッチ挿入の...

画像をクリックして切り替えるJavaScript

クリックして画像を切り替えることは、日常生活で非常によく行われることです。今日の練習は、画像を切り替...

Jenkins でユーザー ロールの権限を設定する方法

Jenkinsのユーザーロール権限の設定には、ロール戦略プラグインのインストールが必要です。 1.ロ...

SQL ステートメント実行の詳細な説明 (MySQL アーキテクチャの概要 -> クエリ実行プロセス -> SQL 解析順序)

序文:私はずっと、SQL 文がどのように、どのような順序で実行されるのかを知りたいと思っていました。...