Reactコンポーネントをフルスクリーンにする方法

Reactコンポーネントをフルスクリーンにする方法

導入

この記事は、 React + antdをベースにして、完全な全屏demoを紹介します。

その理由は、開発者がsql編輯器輸入框が比較的小さく、ズームインをサポートしていないため、あまり便利ではないからです。全画面表示ができればいいなと思い、今後必要になるかもしれないと思い、勉強して録画しました。

実はそんなに小さいとは思ってないんです(orz)

全画面表示

ウェブページで全屏ボタンを見たことがあるでしょう。それをクリックすると、ページがフルスクリーンになります。代碼編輯器でよく表示されます。

上の写真は、メニューやその他の內容を省略した、全画面での LeetCode の効果を示しています。

フルスクリーンディスプレイにも很多種ようですが、私の考えを述べてみます。

  • Leetcodeはフルスクリーンページです
  • F11 F11を押すとフルスクリーンモードになります。これはChromeに組み込まれており、コードを変更する必要はありません。
  • DOMを変更することは実際には最初の方法と同じですが、ブラウザコンテンツの一部が非表示になります。

上の写真に示すように、瀏覽器シェルはなくなりました。

フルスクリーンの使用

フルスクリーンに関しては、看電影と同じように、読書に投入たいときに必要になることが多いようです。主にコンポーネント放大、大量のタイピングや読み取りをより快適にします。

react-full-screenをインストールする

// yarn を追加して react-full-screen
npm インストール react-full-screen --save

yarn または npm を使用してこのライブラリをインストールします。公式ウェブサイトではいくつかのデモが公開されています。リンクはこちらです。

シンプルなコンポーネントを書く

ここにコードを直接示します。代碼が多くなく、理解しやすいです。

React をインポートし、{useState} を "react" から取得します。
「react-dom」からReactDOMをインポートします。
"antd/dist/antd.css"をインポートします。
「./index.css」をインポートします。
"@ant-design/icons" から { FullscreenOutlined、FullscreenExitOutlined } をインポートします。
"antd" から { Tooltip、Card、Col、Row } をインポートします。
「react-full-screen」から FullScreen、useFullScreenHandle } をインポートします。

定数App = () => {
  // フルスクリーンと非フルスクリーンのスタイルと互換性のある full 変数を定義します。たとえば、full の高さは 200 で、非フルスクリーンの高さは 100 です。
  const [full, setFull] = useState(false);
  // フルスクリーンハンドルを作成する
  定数ハンドル = useFullScreenHandle();

  戻る (
    <div スタイル = {{ 背景: "#ececec", 高さ: 500 }}>
      <行間隔={[8, 8]}>
        <列スパン={8}>
          <Card style={{ height: 500 }}>左のカード</Card>
        </Col>
        <列スパン={16}>
          <フルスクリーン
            ハンドル={ハンドル}
            onChange={setFull}
            スタイル={{ 背景: "#ffffff" }}
          >
            <カードスタイル={{ 高さ: 500 }}>
              <div>
                <ツールチップタイトル="全画面">
                  <フルスクリーンアウトライン
                    スタイル={{ フォントサイズ: 16 }}
                    クリックすると{() => {
                      // クリックして full を true に設定し、ハンドルの enter メソッドを呼び出して全画面モードに入ります setFull(true);
                      ハンドルを入力します。
                    }}
                  />
                </ツールチップ>
                <Tooltip title="全画面表示を終了">
                  <全画面終了アウトライン
                    スタイル={{ フォントサイズ: 16, marginLeft: 16 }}
                    // フルスクリーンモードを終了し、full を false に設定する
                    クリックすると{() => {
                      設定Full(false);
                      ハンドルを終了します。
                    }}
                  />
                </ツールチップ>
              </div>
              <div>これはエディターであると仮定します</div>
            </カード>
          </フルスクリーン>
        </Col>
      </行>
    </div>
  );
};

ReactDOM.render(<App />, document.getElementById("コンテナ")); 

こんな感じです。コードに注釋が追加されているので、見るだけでも大丈夫です。 codesandboxではサポートされていないため、効果を示すために antd pro プロジェクトに配置しました。

このようにして、編輯器のみを拡大し、他の重要でない部分(左側の部分)を非表示にする効果を実現しました。

問題

これはまだ十分ではありません。優化詳細がまだいくつか残っています。

  • デフォルトの背景は黒ですが、ユーザーフレンドリーではありません。スタイルを設定する必要があります。
  • フルスクリーンモードではエディターの高さを大きくする必要があります
  • 暗い穴もありますが、それについては後で話します

一人ずつ倒す

背景色

使用するライブラリは、デフォルトでグローバルdivをラップします。フルスクリーンの場合、クラスは.fullscreen.fullscreen-enabledになり、フルスクリーンでない場合はfullscreenになります。

したがって、グローバル/コンポーネント スタイルで次の CSS を記述できます。

.fullscreen.fullscreen-enabled {
  背景: #fff;
  パディング: 24px;
}

このスタイルが生效ことがわかります。また、カード擠到邊上見えないようにパディングが追加されています。

高い

以前に full 変数を設定しているので、full に基づいて高さを決定するようにコードを変更します。

ボックスの高度変わったことがわかります。

拡張機能

これで終わりだと思ったら大錯特錯です。次に、ダークピットについてお話しましょう。

antd コンポーネントでは、modal/drawer/message などはすべて body 内に生成される DOM 要素なので、遇到什么問題呢か?

全屏模式では、ダイアログ ボックスやメッセージ プロンプトなどが表示されません。

しかし好在antd dom のマウント要素を制御するための対応するパラメータを提供します。

モーダル

モーダルは次のように解決できます。まず、 full_screen id を設定します。

この ID は FullScreen コンポーネント内にある必要があることに注意してください。

次に、Modal.info と Modal コンポーネントに次のパラメータを追加します。

注: ここでのモーダルはデモには含まれておらず、拡張部分に属します。モーダル コンポーネントの作成は複雑ではないので、自分で試してみることができます。

Modal.info API

モーダル情報({
  タイトル: 「cud リクエスト パラメータ」、
  幅: 800,
  // getContainer の追加に注意してください: document.getElementById('full_screen')
  })

メッセージ

getContainer メソッドを message.config に渡します。

良い解決策が見つかりませんでした。毎回 message.info を設定するのはかなり面倒です。全局配置場合、問題が発生する可能性があります。より良い解決策がある場合は、メッセージを残してください。

React のフルスクリーン コンポーネント実装に関するこの記事はこれで終わりです。React コンポーネントのフルスクリーンに関する関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • React は antd のアップロード コンポーネントを使用してファイル フォーム送信機能を実装します (完全なコード)
  • React 純粋関数コンポーネント setState がページ更新を更新しない問題の解決方法
  • Reactは動的ポップアップウィンドウコンポーネントを実装します
  • React 星評価コンポーネントの実装

<<:  SQL Server コメントのショートカット キー操作

>>:  Docker での Redis の永続ストレージの詳細な説明

推薦する

vue v-for ループ オブジェクトの属性

目次1. ループオブジェクト内の値2. ループオブジェクト3. キーと値のループ1. ループオブジェ...

MySQL 5.7 で業務を停止せずに従来のレプリケーションを GTID レプリケーションに変更する例

GTID の利点により、従来のファイル POS ベースのレプリケーションを GTID ベースのレプリ...

Vueバインディングクラスとバインディングインラインスタイルの実装方法

目次バインディングクラスインラインスタイルのバインディングバインディングクラス方法1:オブジェクト構...

Yahooが開発したウェブページスコアリングプラグインYSlowのスコアリングルール

YSlow は、Yahoo USA が開発したページ スコアリング プラグインです。非常に優れていま...

MySQL 変数の原理と応用例

MySQL ドキュメントでは、MySQL 変数はシステム変数とユーザー変数の 2 つのカテゴリに分類...

JavaScriptはXiaomi Mall公式サイトの完全なページ実装プロセスを模倣します

目次1. ホームページ制作1. ダウンロードアプリの制作2. ナビゲーションバーの制作3. カルーセ...

LINUX でプロセスを表示する 4 つの方法 (要約)

プロセスは CPU とメモリ内で実行されるプログラム コードであり、各プロセスは 1 つ以上のプロセ...

HttpsページでBaiduシェアを使用するためのソリューション

サイト全体で https アクセスを有効にしてから、共有コードが利用できなくなり、有効になっていた小...

Docker で MySQL データベースを使用して LAN アクセスを実現する

1. MySQLイメージを取得する docker pull mysql:5.6注: mysql5.7...

Alibaba Cloud Centos7.X で外部にポートを開く方法

一言で言えば、大手メーカーからクラウド サーバーを購入する場合は、セキュリティ グループに移動して、...

Reactはルーティングを使用してログインインターフェースにリダイレクトします

前回の記事では、webpack と react 環境を設定した後、ログイン インターフェースとその後...

Linux (Ubuntu) での MySQL 5.6.28 のインストールと設定のチュートリアル

mysql5.6.28のインストールと設定方法1. 基本的なシステム情報を確認し、yumでインストー...

Vueのフィルターについて知っておくべきこと

目次序文フィルターとは何かフィルターの使い方グローバルフィルターローカルフィルターフィルターは直列に...

MySQLのスロークエリの詳細な説明

MySQL操作情報のクエリ show status -- すべての MySQL 操作情報を表示します...

よく使われるJavaScript配列メソッド

目次1. フィルター() 2. 各() 3. いくつか() 4. すべて() 5. 減らす() 6....