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 の永続ストレージの詳細な説明

推薦する

CSS で中空効果を実装するサンプルコード

効果原理主にCSSグラデーションを使用して、切り取りを必要としない背景のくり抜きを実現します。クーポ...

VMware15/16 VMwareのロックを解除してMacOSをインストールする詳細な手順

VMware バージョン: VMware-workstation-full-16 VMware バー...

Linuxターミナルでの一般的なMySQL操作コマンドの詳細な説明

仕える: # chkconfig --list すべてのシステム サービスを一覧表示します # ch...

base target="" はリンクのターゲットオープンフレームを制御します

<base target=_blank> は、基本リンクのターゲット フレームを新しいペ...

Docker+Jenkinsによる自動デプロイの実現方法

Code Cloud を使用して Git コード ストレージ ウェアハウスを構築するhttps://...

Reactベースのコンポーネントのカプセル化の実装手順

目次序文antd はどのようにしてコンポーネントをカプセル化するのでしょうか?ディバイダーコンポーネ...

nginx でディレクトリ ホワイトリストと IP ホワイトリストを設定する方法

1. ディレクトリホワイトリストを設定する:指定されたリクエストパスに制限を設定しないでください。た...

JavaScript でエラーが発生しやすい演算子操作の概要

目次算術演算子異常状況1: 特殊値リテラルを含む操作異常な状況 2: 他の種類のデータが数学演算に関...

MySQLクエリで大文字と小文字を区別しない問題を解決する方法

質問最近、SSH フレームワークを使用して実用的なプロジェクトを完了していたときに、長い間悩まされて...

ウェブサイトのパフォーマンス: 画像とCookieの最適化、モバイルアプリケーションの最適化

前のセクションでは、コンテンツ、サーバー、JavaScript、CSS など、Web サイトのパフォ...

CSSの4種類の配置の違いの詳細な説明

フロントエンド開発でよく使われるCSSの配置方法は、位置決めには、通常位置決め、相対位置決め、絶対位...

VMware で Centos7 ブリッジ ネットワークを構成する手順の詳細な説明

VMware仮想マシンでのCentos7ブリッジネットワーク構成の完全な手順は参考用です。具体的な内...

Videojs+swiper が Taobao の商品詳細カルーセルを実現

この記事では、Taobao商品詳細のカルーセルを実現するためのvideojs+swiperの具体的な...

Mac に mysql5.7 をインストールするための完全な手順 (画像とテキスト付き)

最近、Mac システムを使用して、ローカル Web サーバー環境を構築する準備をしていました。 Ma...

ウェブサイトの画像にグレー効果を加える3つの方法

私はグレースケールの画像の方が芸術的に見えると思うので、いつもグレースケールの画像を好んで使っていま...