ホームページ ウェブフロントエンド CSSチュートリアル 視覚的なエラー キューのログイン ポップオーバーに「揺れる」効果を追加する

視覚的なエラー キューのログイン ポップオーバーに「揺れる」効果を追加する

Nov 28, 2024 am 11:11 AM

Adding a

場合によっては、微妙なデザイン要素がユーザー エクスペリエンスに大きな違いをもたらすことがあります。従来のエラー メッセージを表示する代わりに、ログイン ポップオーバーの「揺れる」効果により、何か問題が発生したことが明確かつ即時に示されます。このチュートリアルでは、 バニラ JavaScriptCSS アニメーション、およびオープンソース ライブラリ Tippy.js を使用してこの機能を実装する方法を説明します。

私たちの目的は次のとおりです:

  1. Tippy.js を使用してログイン ポップオーバーを作成します。
  2. エラー発生時の「揺れ」効果を追加します。
  3. シェイクが終了するとアニメーションを自動的にリセットします。

さあ、飛び込みましょう!


パート 1: CSS で揺れるアニメーションを設定する

まず、シェイク エフェクト用の再利用可能な CSS アニメーションを定義します。以下の @keyframes ルールは、左右の揺れを模倣しています:

@keyframes shaking {
    10%, 90% { transform: translate3d(-1px, 0, 0); }
    20%, 80% { transform: translate3d(2px, 0, 0); }
    30%, 50%, 70% { transform: translate3d(-4px, 0, 0); }
    40%, 60% { transform: translate3d(4px, 0, 0); }
}
.shake {
    animation: shaking 0.82s cubic-bezier(.36,.07,.19,.97) both;
}

ログイン後にコピー
  • キーフレームの詳細 :translate3d プロパティは、ポップオーバーをわずかに左右に移動して揺れる効果を作成します。
  • 再利用可能なクラス : シェイク クラスを任意の要素に適用すると、アニメーションがトリガーされます。

パート 2: Tippy.js を使用してログイン ポップオーバーを作成する

Tippy.js を使用して、クリック可能なログイン ポップオーバーを作成します。ポップオーバーには以下が含まれます:

  • 電子メール入力フィールド。
  • 「サインイン」ボタン。
  • サインイン ロジックとシェイク エフェクトを処理するイベント リスナー。

ポップオーバーを設定するためのコア JavaScript は次のとおりです。

ステップ 1: サインイン クラス

APP.Signin = class {
    constructor($target) {
        this.values = {}; // Store any required state
        if ($target) this.$target = $target; // The DOM element triggering the popover
        this.init(); // Initialize the popover
        return this;
    }

    // Trigger the shake animation
    shake() {
        this.$tippy.classList.add('shake');
        return this;
    }

    // Handle Sign-In button clicks
    onSigninClicked(event) {
        event.preventDefault();

        // Retrieve the entered email
        let email = document.querySelector('.app-signin-email').value;

        // Error and success handlers
        let _onError = () => this.shake();
        let _onSuccess = (response) => {
            if (response.errors.length) {
                this.shake(); // Shake on error
            } else {
                // Handle successful login
                console.log('Login successful!');
            }
        };

        // Simulate a backend login request
        let form_data = new FormData();
        form_data.append('method', 'quickSignIn');
        form_data.append('email', email);

        axios({
            method: 'POST',
            url: 'path/to/server',
            data: form_data,
            headers: { 'content-type': 'application/x-www-form-urlencoded;charset=UTF-8' },
        })
            .then((response) => (typeof response.data === 'string' ? JSON.parse(response.data) : response.data))
            .then(_onSuccess)
            .catch(_onError);
    }

    // Define the HTML content of the popover
    getContent() {
        return `
            <div>




<hr>

<p><strong>2228+ FREE</strong> <u><b><strong>RESOURCES</strong></b></u> <strong>FOR DEVELOPERS!! ❤️</strong> ?? <strong><sub><strong>(updated daily)</strong></sub></strong></p>

<blockquote>
<p>1400+ Free HTML Templates<br><br>
359+ Free News Articles<br><br>
69+ Free AI Prompts<br><br>
323+ Free Code Libraries<br><br>
52+ Free Code Snippets & Boilerplates for Node, Nuxt, Vue, and more!<br><br>
25+ Free Open Source Icon Libraries</p>
</blockquote>

<p>Visit dailysandbox.pro for free access to a treasure trove of resources!</p>


<hr>

<h3>
  
  
  Part 3: Wiring It All Together
</h3>

<p><strong>Simulated Backend</strong> : If you don’t have a real server, mock responses with a promise:<br>
</p>

<pre class="brush:php;toolbar:false">const mockServer = (email) =>
    new Promise((resolve, reject) => {
        setTimeout(() => {
            if (email === 'test@email.com') resolve({ errors: [] });
            else reject({ errors: ['Invalid email'] });
        }, 500);
    });

ログイン後にコピー

ポップオーバーの CSS : ポップオーバーがデザインと一致していることを確認します。簡単なセットアップは次のとおりです:

.app-signin {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.app-signin-email {
    width: 100%;
    padding: 10px;
    font-size: 1rem;
    border: 1px solid #ccc;
    border-radius: 4px;
}

.app-signin-btn {
    background-color: #007bff;
    color: white;
    text-align: center;
    padding: 10px;
    border-radius: 4px;
    cursor: pointer;
}

.app-signin-btn:hover {
    background-color: #0056b3;
}

ログイン後にコピー

HTML トリガー要素 : HTML にトリガー要素を追加します:





<hr>

<h3>
  
  
  パート 4: シェイク効果をテストする
</h3>

<ol>
<li>
<strong>サインイン</strong> ボタンをクリックしてポップオーバーを開きます。</li>
<li>無効なメールアドレスを入力して送信してください。エラーを示すポップオーバーの揺れを確認してください。</li>
<li>有効な電子メールを入力すると、揺れは表示されず、成功しました!</li>
</ol>


<hr>

<h3>
  
  
  結論: ユーザーフレンドリーなエラーキュー
</h3>

<p>シェイキング効果は、余分なメッセージで UI を乱雑にすることなく、明確で直感的なエラー インジケーターを提供することでユーザー エクスペリエンスを向上させます。洗練されたポップオーバーを実現する Tippy.js と対話性を実現するバニラ JS を組み合わせたこのセットアップは、クリーンで機能的で、見た目も魅力的です。</p>

<p>優れた UX は細部にこそ重要なので、実験と調整を続けてください。</p>

<p>Web 開発に関するその他のヒントについては、<strong>DailySandbox</strong> をチェックし、<strong>無料のニュースレター</strong>に登録して時代の先を行きましょう!</p>


          

            
        
ログイン後にコピー

以上が視覚的なエラー キューのログイン ポップオーバーに「揺れる」効果を追加するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

静的フォームプロバイダーの比較 静的フォームプロバイダーの比較 Apr 16, 2025 am 11:20 AM

ここでは、「静的フォームプロバイダー」という用語を埋めてみましょう。あなたはあなたのHTMLを持ってきます

SASSをより速くするための概念の証明 SASSをより速くするための概念の証明 Apr 16, 2025 am 10:38 AM

新しいプロジェクトの開始時に、SASSコンピレーションは瞬く間に起こります。これは、特にbrowsersyncとペアになっている場合は素晴らしい気分です。

毎週のプラットフォームニュース:HTMLロード属性、主なARIA仕様、およびIFRAMEからShadowDOMへの移動 毎週のプラットフォームニュース:HTMLロード属性、主なARIA仕様、およびIFRAMEからShadowDOMへの移動 Apr 17, 2025 am 10:55 AM

今週のプラットフォームニュースのラウンドアップで、Chromeは、Web開発者のロード、アクセシビリティ仕様、およびBBCの動きのための新しい属性を導入します

HTMLダイアログ要素を使用したいくつかの実践 HTMLダイアログ要素を使用したいくつかの実践 Apr 16, 2025 am 11:33 AM

これは私が初めてHTML要素を見ていることです。私はしばらくの間それを知っていましたが、まだスピンしていませんでした。かなりクールです

ペーパーフォーム ペーパーフォーム Apr 16, 2025 am 11:24 AM

購入またはビルドは、テクノロジーの古典的な議論です。自分で物を構築することは、あなたのクレジットカードの請求書にはラインアイテムがないため、安価に感じるかもしれませんが

毎週のプラットフォームニュース:テキスト間隔のブックマークレット、トップレベルの待望、新しいアンプロードインジケーター 毎週のプラットフォームニュース:テキスト間隔のブックマークレット、トップレベルの待望、新しいアンプロードインジケーター Apr 17, 2025 am 11:26 AM

今週のラウンドアップ、タイポグラフィを検査するための便利なブックマークレットである。

「ポッドキャストにサブスクライブ」リンクはどこにすべきですか? 「ポッドキャストにサブスクライブ」リンクはどこにすべきですか? Apr 16, 2025 pm 12:04 PM

しばらくの間、iTunesはポッドキャストの大きな犬だったので、「ポッドキャストにサブスクライブ」をリンクした場合:

クイックガルプキャッシュバスト クイックガルプキャッシュバスト Apr 18, 2025 am 11:23 AM

CSSやJavaScript(および画像とフォントなど)などのアセットにファーアウトキャッシュヘッダーを確実に設定する必要があります。それはブラウザを伝えます

See all articles