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 ビット)

ブログ    

推薦する

一般的でない js 演算演算子の概要

目次2. カンマ演算子3. JavaScript Null 結合演算子 (??) 4. JavaSc...

ダウンロードにおすすめの氷と雪のフォント 33 種類 (個人用および商用)

01 ウィンターフレーク(個人のみ) 02 スノートップキャップ(業務用) 03 モディウス「フリ...

JavaScript 関数の高度な説明

目次関数定義方法関数呼び出し(6種類)これは問題を指摘している厳密モード高階関数閉鎖再帰: 自分自身...

デザインのヒント: きっと気に入っていただけると思います

<br />このタイトルを見ると、見覚えがあるかもしれません。多くのウェブサイトが同様の...

CSS3 変換によって子要素の固定位置を絶対位置に変更する方法

この記事では、CSS3 の transform を使用して子要素の固定配置を絶対配置に変更する方法を...

MySQL データベース分離レベルと MVCC の詳細な説明

目次1. 分離レベルコミットされていない読み取りREAD COMMITED (コミット読み取り/非反...

CSS の div の下の同じ行にある複数の要素を右揃えにする

方法1:フロート:右さらに、フローティングにするとレイアウトがよりコンパクトになります(隙間がなくな...

win10 での mysql 8.0.16 winx64 インストールの最新グラフィック チュートリアル

このデータベースをダウンロードするには、多くの時間とトラフィックがかかります。踏み込んだ落とし穴で時...

Dockerコンテナレイヤーの概念の詳細な説明

目次01 コンテナの一貫性02 レイヤーの概念03 レイヤードデザインの利点今日はコンテナ レイヤー...

MySQL 5.7.16 ZIP パッケージのインストールと設定のチュートリアル

この記事では、MySQL 5.7.16 ZIPパッケージのインストールと設定のチュートリアルを参考ま...

Vueはスクロールロードテーブルを実装します

目次成果を達成する転がり荷重知識備蓄コンポーネントのパッケージ1. コンポーネントの命名2. 小道具...

MySQLシリーズのMariaDBサーバーのインストール

目次チュートリアルシリーズ1. yumパッケージマネージャーを使用してMariaDBサーバーをインス...

CSS属性のデフォルト値width: autoとwidth: 100%の違いの詳細な説明

幅: 自動子要素(コンテンツ+パディング+境界線+余白を含む)は、親要素のコンテンツ領域全体を埋めま...

Linux\Nginx 環境での仮想ドメイン名の設定とテスト検証

Nginx 仮想ドメイン名設定を使用すると、ドメイン名を購入せずに特定のドメイン名を介してローカル ...

MySQLからHiveにさらにデータをインポートするためのソリューション

元の派生コマンド: bin/sqoop インポート -connect jdbc:mysql://19...