亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目次
1. テキストコピー機能の実裝
2. CSSアニメーションの定義
3.アニメーションを2回トリガーできない問題を解決
4. モバイル互換性に関する考慮事項
要約する
ホームページ ウェブフロントエンド jsチュートリアル JavaScript による CSS アニメーションの制御: モバイル テキスト コピー プロンプトとアニメーション リセット手法の実裝

JavaScript による CSS アニメーションの制御: モバイル テキスト コピー プロンプトとアニメーション リセット手法の実裝

Oct 16, 2025 pm 08:21 PM

JavaScript による CSS アニメーションの制御: モバイル テキスト コピー プロンプトとアニメーション リセット手法の実裝

このチュートリアルでは、JavaScript を使用して CSS アニメーションを正確に制御し、テキストのコピーが成功した後の迅速な情報表示と自動非表示効果を?qū)g現(xiàn)する方法について詳しく説明します。アニメーションを 2 回トリガーできない問題の解決に重點を置き、モバイル互換性のベスト プラクティスを提供します。 CSS クラスとイベント リスニングに基づくソリューションを通じて、アニメーションのスムーズで反復(fù)可能な実行を保証できます。

最新の Web 開発では、豊かなユーザー エクスペリエンスを?qū)g現(xiàn)するために、JavaScript を使用して CSS アニメーションをトリガーおよび管理することが一般的に必要です。たとえば、ユーザーがボタンをクリックしてテキストをコピーすると、短い「コピーされました」というプロンプトがポップアップ表示され、數(shù)秒後に自動的に消えます。しかし、実際の運用では、モバイル端末上でアニメーションが繰り返し起動できなかったり、動作が異常だったりする問題に開発者が遭遇することがよくあります。このチュートリアルでは、アニメーションの信頼性とクロスプラットフォーム互換性を確保するための堅牢なソリューションを提供します。

1. テキストコピー機能の実裝

まず、テキストコピーの基本機能を?qū)g裝しましょう。これには通常、ターゲット テキストの取得、navigator.clipboard.writeText API の呼び出し、モバイル デバイスとの互換性の処理が含まれます。

関數(shù) copyTextAndShowAlert() {
  // 1. コピーするテキスト コンテンツを取得します const copyInput = document.querySelector(".offer-right__coupon input");
  if (!copyInput) {
    console.error("コピーソース入力ボックスが見つかりません。");
    戻る;
  }

  copyInput.select();
  // モバイル デバイスの場合は、テキストが完全に選択されていることを確認してください copyInput.setSelectionRange(0, 99999); 

  // 2. クリップボード API を使用してテキストをコピーする navigator.clipboard.writeText(copyInput.value)
    .then(() => {
      console.log("テキストがクリップボードに正常にコピーされました。");
      // コピーが成功したら、プロンプト アニメーションをトリガーします showAlertAnimation();
    })
    .catch(err => {
      console.error("テキストのコピーに失敗しました: ", err);
      //エラーメッセージを追加できます});
}

2. CSSアニメーションの定義

次に、プロンプト メッセージ (「コピー成功」など) の CSS スタイルとアニメーションを定義します。 「表示してから非表示にする」効果を?qū)g現(xiàn)するには、初期狀態(tài) (非表示)、表示狀態(tài) (不透明度 1)、および表示から非表示までのアニメーションが必要です。

 /*プロンプト情報の基本スタイル*/
.alert-クーポン {
    不透明度: 0; /* デフォルトでは非表示になります */
    可視性: 非表示; /* スペースを占有したりイベントを受信したりしないようにするための補助的な非表示*/
    トランジション: 不透明度 0.3 秒、イーズインアウト、可視性 0 秒、リニア 0.3 秒。 /* 初期表示遷移*/
    位置: 絶対; /* 実際のレイアウトに応じて調(diào)整します */
    /* 背景、色、フォントなどのその他のスタイル */
}

/* アニメーションがトリガーされるときに追加されるクラス */
.alert-coupon.show-hide-animation {
    不透明度: 1; /* すぐに表示します */
    可視性: 可視;
    アニメーション: HideText 1 秒イーズイン 2 秒進みます。 /* 2 秒遅れて非表示アニメーションを?qū)g行します*/
}

/*アニメーションのキーフレームを非表示にする*/
@keyframes 非表示テキスト {
  に {
    不透明度: 0;
    可視性: 非表示; /* アニメーションが終了したら完全に非表示にします*/
  }
}

/* 古い WebKit ブラウザ (一部のモバイル ブラウザなど) の互換性プレフィックス */
@-webkit-keyframes HideText {
  に {
    不透明度: 0;
    可視性: 非表示;
  }
}

注意すべき點:

  • anime-fill-mode: forwards がキーで、これにより要素はアニメーション終了後もアニメーションの最後のフレームのスタイルを維持できます。
  • Visibility: hidden と opacity: 0 を組み合わせると、より優(yōu)れた非表示効果が得られ、要素がレイアウトに參加せず、操作できないようになります。
  • トランジションは初期表示時のスムーズな遷移に使用され、アニメーションは遅延非表示に使用されます。

3.アニメーションを2回トリガーできない問題を解決

element.style.animation = "..." を通じてアニメーション プロパティを直接設(shè)定します。アニメーションが終了すると、ブラウザは、たとえアニメーションを再設(shè)定したとしても、同じアニメーションを再実行する必要があるとは考えない場合があります。この問題を解決するベスト プラクティスは、JavaScript を通じて CSS クラスを動的に追加および削除することです。

アニメーションをトリガーする必要がある場合は、事前定義されたアニメーションを含む CSS クラスを追加します。アニメーションが終了したら、このクラスを削除して、次回アニメーションを再トリガーするときに再度追加できるようにします。 animeend イベントをリッスンして、アニメーションがいつ終了するかを知ることができます。

関數(shù) showAlertAnimation() {
  const textWasCopiedElement = document.querySelector(".offer-right__main .alert-coupon");
  if (!textWasCopiedElement) {
    console.error("プロンプト情報要素が見つかりません。");
    戻る;
  }

  // 1. 新しいアニメーションを開始する前に、存在する可能性のある古いアニメーション クラスを必ず削除してください。 // この手順は、特にアニメーションが中斷されたり、複數(shù)回トリガーされる可能性がある場合に重要です。

  // アニメーションが確実に再トリガーできるように、ブラウザにスタイルの再描畫/再計算を強制します。 // これは、要素のプロパティにアクセスしてブラウザを強制的に更新する一般的なハックです void textWasCopiedElement.offsetWidth; 

  // 2. アニメーションをトリガーするクラスを追加します。 textWasCopiedElement.classList.add("show-hide-animation");

  // 3. アニメーション終了イベントをリッスンしてクラスを削除し、次のトリガーの準備をします // 注: HideText アニメーションの継続時間は 1 秒、遅延は 2 秒であるため、合計継続時間は 3 秒です。
  // アニメーションの実行が終了すると、animationend イベントがトリガーされます。
  const animeDuration = 3000; // アニメーションの合計時間 (アニメーション 1 秒、遅延 2 秒)

  // setTimeout を使用して、animationend をシミュレートするか、animationend を直接リッスンします
  // animeend をリッスンする方が正確ですが、ブラウザのプレフィックスと複數(shù)のトリガーの問題に対処する必要があります。 // ここでは、setTimeout を使用して、クラス setTimeout(() => {
    textWasCopiedElement.classList.remove("アニメーションの表示/非表示");
    // アニメーションが終了したら、不透明度と可視性を初期狀態(tài)にリセットすることを検討できます。 textWasCopiedElement.style.opacity = "0";
    textWasCopiedElement.style.visibility = "非表示";
  }、アニメーションデュレーション);

  // より厳密なアニメーション終了監(jiān)視方法 (リスナーを削除する必要があります)
  // const handleAnimationEnd = () => {
  // textWasCopiedElement.classList.remove("show-hide-animation");
  // textWasCopiedElement.removeEventListener('animationend', handleAnimationEnd);
  // };
  // textWasCopiedElement.addEventListener('animationend', handleAnimationEnd);
}

コードの統(tǒng)合とサンプル HTML:

 
/*プロンプト情報の基本スタイル*/
.alert-クーポン {
    不透明度: 0; /* デフォルトでは非表示になります */
    可視性: 非表示; /* スペースを占有したりイベントを受信したりしないようにするための補助的な非表示*/
    トランジション: 不透明度 0.3 秒、イーズインアウト、可視性 0 秒、リニア 0.3 秒。 /* 初期表示遷移*/
    位置: 絶対; /* 実際のレイアウトに応じて調(diào)整します */
    トップ: 50%; /* 配置の例*/
    左: 50%。
    変換: 変換(-50%, -50%);
    背景色: #4CAF50;
    色: 白;
    パディング: 10px 20px;
    境界半徑: 5px;
    z インデックス: 1000;
    フォントサイズ: 14px;
    ホワイトスペース: ナラップ;
}

/* アニメーションがトリガーされるときに追加されるクラス */
.alert-coupon.show-hide-animation {
    不透明度: 1; /* すぐに表示します */
    可視性: 可視;
    アニメーション: HideText 1 秒イーズイン 2 秒進みます。 /* 2 秒遅れて非表示アニメーションを?qū)g行します*/
    -webkit-animation: HideText 1 秒イーズイン 2 秒前進; /* WebKit 互換*/
}

/*アニメーションのキーフレームを非表示にする*/
@keyframes 非表示テキスト {
  に {
    不透明度: 0;
    可視性: 非表示; /* アニメーションが終了したら完全に非表示にします*/
  }
}

/* 古い WebKit ブラウザ (一部のモバイル ブラウザなど) の互換性プレフィックス */
@-webkit-keyframes HideText {
  に {
    不透明度: 0;
    可視性: 非表示;
  }
}
スタイル>

<div class="offer-right__main">
  <div class="offer-right__coupon">
    <input type="text" value="PRIMEIRACOMPRA">
  </div>
  <button onclick="copyTextAndShowAlert()">割引コードをコピー</button>
  <div class="alert-coupon">コピーが成功しました。 </div>
</div>


関數(shù) copyTextAndShowAlert() {
  const copyInput = document.querySelector(".offer-right__coupon input");
  if (!copyInput) {
    console.error("コピーソース入力ボックスが見つかりません。");
    戻る;
  }

  copyInput.select();
  copyInput.setSelectionRange(0, 99999); // モバイルデバイスの場合

  navigator.clipboard.writeText(copyInput.value)
    .then(() => {
      console.log("テキストがクリップボードに正常にコピーされました。");
      showAlertAnimation();
    })
    .catch(err => {
      console.error("テキストのコピーに失敗しました: ", err);
      // エラー メッセージを追加できます。alert("コピーに失敗しました。手動でコピーしてください。");
    });
}

関數(shù) showAlertAnimation() {
  const textWasCopiedElement = document.querySelector(".offer-right__main .alert-coupon");
  if (!textWasCopiedElement) {
    console.error("プロンプト情報要素が見つかりません。");
    戻る;
  }

  // 1. 新しいアニメーションを開始する前に、存在する可能性のある古いアニメーション クラスを必ず削除してください。 textWasCopiedElement.classList.remove("show-hide-animation");

  // アニメーションが確実に再トリガーできるように、ブラウザにスタイルの再描畫/再計算を強制します。 // これは、要素のプロパティにアクセスしてブラウザを強制的に更新する一般的なハックです void textWasCopiedElement.offsetWidth; 

  // 2. アニメーションをトリガーするクラスを追加します。 textWasCopiedElement.classList.add("show-hide-animation");

  // 3. アニメーション終了イベントをリッスンしてクラスを削除し、次のトリガーの準備をします // 合計アニメーション期間 = アニメーション期間 アニメーション遅延時間 = 1 秒 2 秒 = 3 秒
  const animeTotalDuration = 3000; 

  setTimeout(() => {
    textWasCopiedElement.classList.remove("アニメーションの表示/非表示");
    // アニメーションが終了したら、要素が初期の非表示狀態(tài)に戻ることを手動で確認します。 textWasCopiedElement.style.opacity = "0";
    textWasCopiedElement.style.visibility = "非表示";
  }、animationTotalDuration);
}

4. モバイル互換性に関する考慮事項

最初の質(zhì)問では、モバイル アニメーションが機能しないと述べられていましたが、後にキャッシュの問題であると指摘されました。しかし、実際の開発においては、モバイル互換性は確かに注意が必要な焦點です。

  • CSS プレフィックス:最近のブラウザは標準 CSS プロパティのサポートがますます向上していますが、古いまたは特定のモバイル ブラウザ (特定の Android WebKit カーネルなど) との互換性を確保するために、@keyframes およびアニメーション プロパティに -webkit- プレフィックスを追加することをお勧めします。通常、このプロセスは、Autoprefixer を備えた Webpack などのビルド ツールを使用して自動化できます。
  • animeend イベント: animationend イベントは、ブラウザごとにサポートとトリガーのタイミングが若干異なる場合があります。問題が発生した場合は、setTimeout を使用してアニメーションの終了をシミュレートすることを検討してください。上記の例に示すように、その期間は CSS で定義されているアニメーション期間とアニメーション遅延の合計と一致する必要があります。
  • タッチ イベントとクリック イベント:ボタンの onclick イベントがモバイル端末で正常に応答できることを確認します。最近のモバイル ブラウザは通常、タッチ イベントをクリック イベントに変換しますが、場合によっては遅延や応答不能が発生することがあります。
  • ビューポートとスケーリング:モバイル レイアウトやアニメーションに関する予期せぬ問題を防ぐために、ページに正しいビューポート設(shè)定があることを確認してください。

要約する

このチュートリアルを通じて、JavaScript と CSS クラスを活用して繰り返し可能な UI アニメーションを作成する方法を?qū)Wびました。鍵は次のとおりです。

  1. アニメーションの狀態(tài)を管理するには、element.style.animation プロパティを直接操作する代わりに、CSS クラスを使用します。
  2. ブラウザに再描畫を強制する:アニメーション クラスを削除した後、アニメーションを確実に再トリガーできるように、offsetWidth などのプロパティにアクセスしてブラウザに再描畫を強制します。
  3. アニメーションの終了を監(jiān)視する:アニメーションが終了した後、animationend イベントまたは setTimeout を使用してアニメーション クラスを削除し、次のトリガーに備えます。
  4. ブラウザーのプレフィックスと互換性を考慮します。特にモバイルでは、CSS プレフィックスの正しい使用とイベント リスニングの信頼性を確認してください。

これらのベスト プラクティスに従うことで、より安定し、効率的で、優(yōu)れたユーザー エクスペリエンスを備えた動的 Web インターフェイスを構(gòu)築できるようになります。

以上がJavaScript による CSS アニメーションの制御: モバイル テキスト コピー プロンプトとアニメーション リセット手法の実裝の詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Stock Market GPT

Stock Market GPT

AIを活用した投資調(diào)査により賢明な意思決定を?qū)g現(xiàn)

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

JavaScriptは、クリックスルーイメージの切り替え効果を?qū)g現(xiàn)します:プロフェッショナルチュートリアル JavaScriptは、クリックスルーイメージの切り替え効果を?qū)g現(xiàn)します:プロフェッショナルチュートリアル Sep 18, 2025 pm 01:03 PM

この記事では、JavaScriptを使用して畫像をクリックする効果を?qū)g現(xiàn)する方法を紹介します。コアのアイデアは、HTML5のデータ - *屬性を使用して、代替畫像パスを保存し、JavaScriptを介してクリックイベントをリッスンし、SRC屬性を動的に切り替えて、畫像の切り替えを?qū)g現(xiàn)することです。この記事では、詳細なコードの例と説明を提供して、この一般的に使用されるインタラクティブ効果を理解し、習(xí)得するのに役立ちます。

JavaScriptでGeolocation APIを使用してユーザーの位置を取得するにはどうすればよいですか? JavaScriptでGeolocation APIを使用してユーザーの位置を取得するにはどうすればよいですか? Sep 21, 2025 am 06:19 AM

まず、ブラウザがGeolocationapiをサポートしているかどうかを確認します。サポートされている場合は、getCurrentPosition()を呼び出してユーザーの現(xiàn)在の位置座標を取得し、成功したコールバックを通じて緯度と経度の値を取得します。同時に、拒否許可、場所の利用不能、タイムアウトなどのエラーコールバック処理の例外を提供します。また、高精度を有効にするために構(gòu)成オプションを渡し、タイムアウト時間とキャッシュの妥當(dāng)性期間を設(shè)定することもできます。プロセス全體には、ユーザー承認と対応するエラー処理が必要です。

Nuxt 3組成APIについて説明しました Nuxt 3組成APIについて説明しました Sep 20, 2025 am 03:00 AM

NUXT3の構(gòu)成APIコア使用量には次のものが含まれます。1。DefinePageMetaは、タイトル、レイアウト、ミドルウェアなどのページメタ情報を定義するために使用されます。 2。Useheadは、ページヘッダータグを管理し、靜的およびレスポンシブな更新をサポートし、SEO最適化を?qū)g現(xiàn)するためにDefinePageMetaと協(xié)力する必要があります。 3. useasyncdataは、非同期データを安全に取得し、負荷とエラーステータスを自動的に処理し、サーバーとクライアントのデータ収集制御をサポートします。 4. usefetchは、useasyncdataと$ fetchのカプセル化であり、リクエストキーを自動的にエンスして、リクエストを重複しないようにします

javascriptでsetintervalで繰り返し間隔を作成する方法 javascriptでsetintervalで繰り返し間隔を作成する方法 Sep 21, 2025 am 05:31 AM

JavaScriptに繰り返し間隔を作成するには、SetInterval()関數(shù)を使用する必要があります。これは、指定されたミリ秒間隔で関數(shù)またはコードブロックを繰り返し実行する必要があります。たとえば、setinterval(()=> {console.log( "2秒ごとに実行");}、2000)は、clearinterval(intervalid)によってクリアされるまで2秒ごとにメッセージを出力します。実際のアプリケーションでは、クロック、投票サーバーなどを更新するために使用できますが、最小遅延制限と機能実行時間の影響に注意を払い、メモリの漏れを避けるために不要になった時間の間隔をクリアします。特にコンポーネントのアンインストールまたはページの閉鎖の前に、それを確認してください

JavaScriptのクリップボードにテキストをコピーする方法は? JavaScriptのクリップボードにテキストをコピーする方法は? Sep 18, 2025 am 03:50 AM

ClipboardapiのWriteTextメソッドを使用してテキストをクリップボードにコピーします。セキュリティコンテキストとユーザーインタラクションで呼び出され、最新のブラウザーをサポートし、古いバージョンをExecCommandで格下げできます。

JavaScriptでマルチライン文字列を作成する方法は? JavaScriptでマルチライン文字列を作成する方法は? Sep 20, 2025 am 06:11 AM

thebestatatororeAteamulti-linestringinjavascriptsisingsisingSemplatalalswithbackticks、whitherverebreakenexactlyaswritten。

JavaScriptですぐに呼び出された関數(shù)式(IIFE)を作成して使用する方法 JavaScriptですぐに呼び出された関數(shù)式(IIFE)を作成して使用する方法 Sep 21, 2025 am 05:04 AM

Aniife(即座に侵入すること)は、runsassonasitiondedived、cureated createdAfctionAfunctionSaNdimeSaNdiElyIntyinvokingit、cureatedglobalnamespacepollution、およびcopeThecopethrughtosures; itiswritted(function(){/cod

JSON文字列をJavaScriptオブジェクトに解析する方法 JSON文字列をJavaScriptオブジェクトに解析する方法 Sep 21, 2025 am 05:43 AM

JSON文字列をJavaScriptオブジェクトに解析するには、有効なJSON文字列を?qū)潖辘工隞avaScriptオブジェクトに変換できるjson.parse()メソッドを使用する必要があります。したがって、例外を処理するためにtry ... catchを使用する必要があります。同時に、日付文字列を日付オブジェクトに変換するなど、2番目のパラメーターのリバイバー関數(shù)を介して解析中に値を変換し、それにより安全で信頼性の高いデータ変換を?qū)g現(xiàn)できます。

See all articles