背景日本語を学び始めた当初は、日本語の50音を覚えるのは簡単ではなく、特にカタカナを覚えるのは困難でした。この時、断片的な時間を有効に活用して、昼休みや地下鉄の中でいつでも50音を練習できるアプリがあったらいいなと思いました。そこで 成し遂げるオンライン体験アドレス: https://dragonir.github.io/kanaApp/ 実装効果は以下のとおりです。アプリケーションは主に3つのページに分かれています。
回答ロジックのルールは、質問表示エリアの単語に対応する正しいオプションを、指定された ダークモード ダークモードを決定する
結果が 次の例では、システム テーマ カラーが暗い場合、 @media (優先カラースキーム: 暗い) { .demo { 背景: #FFFFFF; } } @media (優先カラースキーム: 明るい) { .demo { 背景: #000000; } } ダークモードを決定する システムがテーマカラーをサポートしているかどうかを判断するための判断媒体として if (window.matchMedia('(prefers-color-scheme)').media === 'not all') { // ブラウザはテーマカラー設定をサポートしていません} if (window.matchMedia('(prefers-color-scheme: dark)').matches){ // ダークモード } else { // ライトモード} さらに、システムのダーク モードの状態を動的に監視し、システムのダーク モードの切り替えに応じてリアルタイムで応答することもできます。 window.matchMedia('(prefers-color-scheme: dark)').addListener(e => { if (e.matches) { // ダークモードをオンにする } else { // ダークモードをオフにする } }); または、ダークモードまたはライトモードを個別に検出します。 const リスナー = { 暗い: (mediaQueryList) => { mediaQueryListが一致する場合 // ダークモードをオンにする} }, ライト: (mediaQueryList) => { mediaQueryListが一致する場合 // ライトモードをオンにする} } }; window.matchMedia('(prefers-color-scheme: dark)').addListener(listeners.dark); window.matchMedia('(prefers-color-scheme: light)').addListener(listeners.light); 50トーンゲームでは、 ページで画像要素が使用されている場合、システムがダーク モードを有効にしているかどうかを <写真> <source srcset="dark.jpg" media="(prefers-color-scheme: dark)"> <img src="light.jpg"> </画像> 注意: オフラインキャッシュネイティブアプリケーションのように素早くアクセスするためのショートカットをデスクトップ上に生成し、いつでもどこでもオフラインで使用できるようにするために、 特徴:
設定ページのパラメータプロジェクトのルートディレクトリに // マニフェスト.webmainifest { "name": "かなゲーム", "short_name": "かなゲーム", "start_url": "index.html", "ディスプレイ": "スタンドアロン", "背景色": "#fff", "description": "かなゲーム", 「アイコン」: [ { "src": "assets/images/icon-64x64.jpg", "サイズ": "64x64", "タイプ": "画像/jpg" }, { "src": "assets/images/icon-256x256.jpg", "サイズ": "256x256", "タイプ": "画像/jpg" } ] } パラメータの説明:
一部のシステムのブラウザが
設定情報自動生成ツール: https://tomitm.github.io/appmanifest/
<meta name=viewport content="width=デバイス幅、初期スケール=1、最大スケール=1、最小スケール=1、ユーザースケーラブル=いいえ、ビューポートフィット=カバー"> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> <meta name="apple-mobile-web-app-title" content="かなゲーム"> <link rel="スタイルシート" type="text/css" href="./assets/css/main.css" rel="外部nofollow" > <link rel="スタイルシート" type="text/css" href="./assets/css/dark.css" rel="外部 nofollow" > <link rel="スタイルシート" type="text/css" href="./assets/css/petals.css" rel="外部 nofollow" > <link rel="ショートカットアイコン" href="./assets/images/icon-256x256.jpg" rel="外部 nofollow" rel="外部 nofollow" rel="外部 nofollow" rel="外部 nofollow" > <link rel="apple-touch-icon" href="./assets/images/icon-256x256.jpg" rel="外部 nofollow" rel="外部 nofollow" rel="外部 nofollow" rel="外部 nofollow" /> <link rel="apple-touch-icon-precomposed" href="./assets/images/icon-256x256.jpg" rel="外部 nofollow" rel="外部 nofollow" rel="外部 nofollow" rel="外部 nofollow" > <link rel="ブックマーク" href="./assets/images/icon-256x256.jpg" rel="外部 nofollow" rel="外部 nofollow" rel="外部 nofollow" rel="外部 nofollow" /> <link rel="manifest" href="./manifest.webmanifest" rel="外部 nofollow" > <title>かなゲーム</title>
server-worker を登録するには、 window.addEventListener('load', () => { SWを登録します。 }); 非同期関数registerSW() { if ('serviceWorker' in ナビゲータ) { 試す { navigator.serviceWorker.register('./sw.js'); を待機します。 } キャッチ (e) { console.log(`SW登録に失敗しました`); } } } ルートディレクトリに // キャッシュのキー値を定義します const cacheName = 'kana-v1'; // キャッシュする必要があるファイルを定義する const staticAssets = [ './', './index.html', './assets/css/main.css', './assets/js/main.js', './assets/images/bg.jpg' // ... ]; // インストールイベントをリッスンし、インストールが完了したらファイルをキャッシュします。self.addEventListener('install', async e => { // キーに対応するキャッシュを検索し、操作可能なキャッシュ オブジェクトを取得します。const cache = await caches.open(cacheName); // キャッシュする必要があるファイルを追加します。await cache.addAll(staticAssets); self.skipWaiting() を返します。 }); // キャッシュされたデータを更新するために activate イベントをリッスンします self.addEventListener('activate', e => { // 最初のロードフェッチが self.clients.claim() をトリガーすることを確認します。 }); // キャッシュされたデータを使用するためにフェッチ イベントをリッスンします。 self.addEventListener('fetch', 非同期e => { 定数 req = e.request; const url = 新しい URL(req.url); url.origin === location.origin の場合 { e.respondWith(cacheFirst(req)); } それ以外 { e.respondWith(ネットワークとキャッシュ(req)); } }); 非同期関数cacheFirst(req) { // 現在のリクエストをキャッシュする必要があるかどうかを判断します const cache = await caches.open(cacheName); const キャッシュ = cache.match(req); // キャッシュがある場合は、そのキャッシュを使用します。ない場合は、新しいリクエストから取得します。 return cached || fetch(req); } 非同期関数networkAndCache(req) { const キャッシュ = caches.open(cacheName) を待機します。 試す { // キャッシュ エラーも新しいリクエストから直接取得されます const fresh = await fetch(req); cache.put(req, fresh.clone()) を待機します。 新鮮な状態に戻る。 } キャッチ (e) { const キャッシュ = cache.match(req); キャッシュされたものを返します。 } } **
注: これで、インストールされた 結果: PC 側 🖥️: モバイル 📱: 桜が散る 視覚効果と興味を高めるために、ページに桜の花が散る 基本的な構文:
パラメータ:
次のコードは、この例の具体的な実装です。 <div id="花びらコンテナ"> <div class="花びら"></div> <!-- ... --> <div class="花びら"></div> </div> var petalPlayers = []; 関数animatePetals() { var 花びら = document.querySelectorAll('.petal'); if (!petals[0].animate) { var petalsContainer = document.getElementById('petals_container'); false を返します。 } (var i = 0, len = petals.length; i < len; ++i) の場合 { var 花びら = 花びら[i]; petal.innerHTML = '<div class="rotate"><img src="petal.jpg" class="askew"></div>'; var スケール = Math.random() * .6 + .2; var プレイヤー = petal.animate([{ 変換: 'translate3d(' + (i / len * 100) + 'vw,0,0) scale(' + scale + ')', 不透明度: スケール }, { 変換: 'translate3d(' + (i / len * 100 + 10) + 'vw,150vh,0) スケール(' + scale + ')', 不透明度: 1 } ], { 期間: Math.random() * 90000 + 8000, 反復回数: 無限、 遅延: -(Math.random() * 5000) }); petalPlayers.push(プレイヤー); } } 花びらをアニメーション化します(); .花びら.回転{ アニメーション:driftyRotate 1s infinite both easy-in-out; 視点: 1000; } .花びら .斜め { 変換: skewY(10deg); 表示: ブロック; アニメーション: ドリフト 1 秒無限交互イーズインアウト; 視点: 1000; } .petal:nth-of-type(7n) .askew { アニメーション遅延: -.6秒; アニメーション期間: 2.25秒; } .petal:n番目の型(7n + 1) .askew { アニメーション遅延: -.879秒; アニメーション期間: 3.5秒; } /* ... */ .petal:nth-of-type(9n) .rotate { アニメーション期間: 2秒; } .petal:n番目の型(9n + 1) .rotate { アニメーション期間: 2.3秒; } /* ... */ @keyframes ドリフト { 0% { 変換: skewY(10deg) translate3d(-250%, 0, 0); 表示: ブロック; } 100% { 変換: skewY(-12deg) translate3d(250%, 0, 0); 表示: ブロック; } } @keyframes ドリフト回転 { 0% { 変換: rotateX(0); 表示: ブロック; } 100% { 変換: rotateX(359deg); 表示: ブロック; } } 完全なコードは記事の後のリンクでご覧いただけます この例では、 /* 最小アスペクト比 */ @media (最小アスペクト比: 8/5) { // ... } /* 最大アスペクト比 */ @media (最大アスペクト比: 3/2) { // ... } /* アスペクト比をクリアし、すべての条件が満たされたときに重なりを防ぐために下部に配置します */ @media (アスペクト比: 1/1) { // ... } アプリケーションでの具体的な実装方法は、 <div class="mod_orient_layer"></div> .mod_orient_layer { 表示: なし; 位置: 固定; 高さ: 100%; 幅: 100%; 左: 0; 上: 0; 右: 0; 下部: 0; zインデックス: 999; 背景: #FFFFFF url('landscape.jpg') 繰り返しなし 中央; 背景サイズ: 自動 100%; } @media スクリーンと (最小アスペクト比: 13/8) { .mod_orient_layer { 表示: ブロック; } } 結果: 互換性以下は、この記事で取り上げたいくつかの属性の互換性ビューです。実際の運用プロジェクトでは、互換性の適応に注意する必要があります。 Photoshopのスキルロゴデザイン
外部リンクと参考文献 桜が散るアニメーション フルバージョン https://codepen.io/dragonir/full/WNjEPwW WebKit のダーク モード サポート https://webkit.org/blog/8840/dark-mode-support-in-webkit PWA 技術理論 + 実践分析 https://www.cnblogs.com/yangyangxxb/p/9964959.html H5 PWA テクノロジー https://zhuanlan.zhihu.com/p/144512343 アスペクト比 https://developer.mozilla.org/zh-CN/docs/Web/CSS/@media/aspect-ratio サービスワーカー https://developer.mozilla.org/zh-CN/docs/Web/API/Service_Worker_API Element.animate() https://developer.mozilla.org/zh-CN/docs/Web/API/Element/animate 著者: dragonir ブログアドレス: https://www.cnblogs.com/dragonir/p/15041977.html Gokudōゲームのフロントエンド知識に関するこの記事はこれで終わりです。フロントエンド知識ゲームに関する関連コンテンツについては、123WORDPRESS.COMの以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMを応援してください。 以下もご興味があるかもしれません:
|
<<: MySQL InnoDB ロック メカニズムの詳細な例
>>: HTML テーブルタグチュートリアル (27): セルの背景画像属性 BACKGROUND
序文最近、高可用性プロジェクトに取り組む際には、データの同期が必要になっています。ノードが 2 つし...
MySQL DATE_ADD(date,INTERVAL expr type) 関数と ADDDA...
XHTML は現在国際的に推奨されている標準的な Web サイト設計言語です。Webjx.com も...
導入: Lambda Probe (旧称 Tomcat Probe) は、Apache Tomcat...
目次1. 重複排除前後のデータの比較2. 使い方1. フィルターとマップを使用する2. 削減を使用す...
この記事では、ドロップダウンテーブルの複数選択と検索を実現するためのvue+elementuiの具体...
この記事では、Element-uiを使用してvue.jsでナビゲーションメニューを実装するための具体...
MySQLは私がとても気に入っているデータベースです。今日はWindows 8システムでインストール...
cpanel 管理バックエンドを開き、「詳細」オプションの下に「Clock Guardian Job...
この記事では、VMware 12でのUbuntu 16.04イメージのインストールチュートリアルを参...
この記事の例では、矢印をクリックして画像を切り替えるVue + jsの具体的なコードを共有しています...
トランザクション分離レベルの設定 グローバルトランザクション分離レベルを読み取りコミット済みに設定;...
CSS 画面サイズの適応を実現するには、まず CSS3 @media メディア クエリを導入する必要...
Docker プロセス、メモリ、カップ消費量を表示dockerコンテナを起動し、dockerinsp...
この記事では、オンラインチャットを実現するためのVue + sshフレームワークの具体的なコードを参...