Xterm.js の全画面ソリューション
Xterms.js は TypeScript で書かれたフロントエンド コンポーネントで、ブラウザーであらゆる端末エクスペリエンスを実現できます。VS Code の端末機能はこれを使用して実装されており、本物の端末のように感じられます。
ブラウザで実行されるため、通常、ページには他の要素が含まれますが、要素が多すぎると、限られた画面スペースを占有し、ユーザーの注意が散漫になります。 シナリオによっては、全画面表示が必要になる場合があります。この記事では、読者の参考のために、包括的な全画面実装ソリューションを紹介します。 この記事を見つけるのに長い間苦労したと思いますが、私が vue3 コンポーネントでこの記事を書いたとき、いくつかの奇妙な未知の理由により、正常にデバッグするのに長い時間がかかりました。
基本的な環境準備は冗長ではなく、公式ドキュメントを読むだけのシンプルな内容です。
以下は参照のみを目的とした vue の例です。
1<template>
2 <div v-if="loading">loading...</div>
3 <div v-if="error">failed to fetch</div>
4 <div>
5 <div id="terminal"></div>
6 </div>
7</template>
8
9// ... ここでは省略
10import { Terminal } from 'xterm';
11import { FitAddon } from 'xterm-addon-fit';
12import "xterm/css/xterm.css";
13// ... ここでは省略
コアロジック
1const term = new Terminal({
2 cursorBlink: true,
3 // さまざまな設定は省略されていますが、インターネット上にサンプルがたくさんあります。
4});
5
6term.loadAddon(fitAddon)
7function fitTerminal() {
8 fitAddon.fit();
9 term.scrollToBottom();
10}
11
12term.open(document.getElementById('terminal'));
13fitTerminal();
14
15window.addEventListener('resize', fitTerminal);
16
17// 1. F11 を押して全画面表示にします
18
19document.addEventListener('keydown', (e) => {
20 if (e.key === 'F11') {
21 toggleFullscreen();
22 }
23});
24
25// 2. ボタンをクリックすると、読者の参照用に全画面表示になります。
26// document.getElementById("fullbtn").addEventListener("click", toggleFullscreen)
27
28// 最下位レベルは、chatGPT のクレジットだけで十分です。受け入れられない場合は受け入れられません。自信はここから来ます。
29function toggleFullscreen() {
30 const doc = window.document;
31 const docEl = doc.documentElement;
32
33 const requestFullScreen =
34 docEl.requestFullscreen || docEl.mozRequestFullScreen || docEl.webkitRequestFullScreen || docEl.msRequestFullscreen;
35 const cancelFullScreen =
36 doc.exitFullscreen || doc.mozCancelFullScreen || doc.webkitExitFullscreen || doc.msExitFullscreen;
37
38 if (!doc.fullscreenElement && !doc.mozFullScreenElement && !doc.webkitFullscreenElement && !doc.msFullscreenElement) {
39 requestFullScreen.call(docEl);
40 } else {
41 cancelFullScreen.call(doc);
42 }
43}
この例では、「ターミナル」クラスを使用してターミナル オブジェクトを作成し、それをページ上の要素にレンダリングします。 ページが最初にロードされるときに、fitterminal
関数が呼び出されて、端末オブジェクトを親要素のサイズに適合させ、スクロール バーを下部に調整します。 続いて、addEventListener
を使用して resize
イベントをリッスンし、親要素のサイズの変更に応じて端末が適応的に調整できるようにします。 さらに、「keydown」イベントも監視され、ユーザーが F11 キーを押したときに全画面に切り替わります (ボタンをクリックして全画面に移行し、全画面ボタン アイコンにバインドすることもできます。コード コメント 2 を参照) 。
toggleFullscreen
関数では、W3C 標準の requestFullscreen
および exitFullscreen
API を使用して全画面切り替えを実装します。 この部分を ChatGPT が実現してくれたのは素晴らしいと思いますが、W3C の標準規格も採用されているのですから、この点では人間の脳は決して追いつきませんし、結局のところ能力には限界があります。
著作権に関する声明:
- 出典のないコンテンツはすべてオリジナルです。、無断転載はご遠慮ください(転載後にレイアウトが崩れたり、内容が制御不能になったり、継続的に更新できない等の理由から)。
- このブログのコンテンツを非営利目的で解釈したい場合は、(読者の便宜のため)「オリジナル ソース」または「参照リンク」の形式でこのサイトの関連 Web ページ アドレスを提供してください。