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

推薦する

CSS3はグラフィックの落下アニメーション効果を実現します

まずは効果を確認実装コード <div class="box box1"&g...

React-Native環境のセットアップと基本的な紹介

環境の準備1. 環境構築React Native 中国語ウェブサイト2. 開発ツール フロントエンド...

CSS ラベルモード表示プロパティの詳細な説明

コードは次のようになります。 <!DOCTYPE html> <html> ...

HTML 9グリッドレイアウトの実装方法

ウェブサイトのレイアウトの多様化は、当社のフロントエンドの得意分野です。最近、UC ブラウザのデフォ...

img usemap 属性 中国地図リンク

HTML img タグ: Web ページに導入される画像を定義します。興味深い usemap 属性も...

MySQL データをエクスポートおよびインポートするための HeidiSQL ツール

場合によっては、SQL へのデータのエクスポートとインポートを容易にするために、特定のツールを使用し...

高並列処理 nginx サーバー向け Linux カーネル最適化構成の説明

デフォルトの Linux カーネル パラメータは最も一般的なシナリオに基づいており、高い同時アクセス...

JavaScriptにおける評価戦略の詳細な説明

目次それを覆う栗パラメータの受け渡し値渡し共同配送要約する拡張機能 - 遅延評価私は最近、JavaS...

自動ロック画面機能を実現するjs

1. 使用シナリオこのような要件があるため、システムが開発されました。ユーザーがデスクトップを離れ...

初心者がHTMLタグを学ぶ(3)

HTML に触れる初心者は、いくつかの HTML タグを学びます。関連記事:初心者が学ぶ HTML...

MySQLの論理アーキテクチャに関する深い理解

MySQL は現在、ほとんどの企業や事業体で使用されているデータベースです。MySQL が使用される...

Dockerでコンテナを作成するときにコンテナIPを指定する実装例

Docker はコンテナを作成するときに、デフォルトでブリッジ ネットワークを使用し、IP アドレス...

HTML ページジャンプのパラメータ渡しの問題

効果は以下のとおりです。ページジャンプボタンをクリックした後 対応する値はページ b で取得できます...

springcloud alibaba nacos linux 設定の詳細なチュートリアル

まず、github から nacos の圧縮パッケージをダウンロードします: https://git...

docker を使用して Redis マスター/スレーブを構築する方法

1. Docker環境を構築する1. Dockerfileを作成する Centos:latest か...