찾다
웹 프론트엔드CSS 튜토리얼시각적 오류 신호를 위해 로그인 팝오버에 \'흔들기\' 효과 추가

Adding a

때때로 미묘한 디자인 요소가 사용자 경험에 큰 변화를 가져올 수 있습니다. 전통적인 오류 메시지를 표시하는 대신 로그인 팝오버의 "흔들기" 효과는 문제가 발생했음을 명확하고 즉각적으로 표시합니다. 이 튜토리얼에서는 바닐라 JavaScript, CSS 애니메이션 및 오픈 소스 라이브러리 Tipy.js

를 사용하여 이 기능을 구현하는 방법을 안내합니다.

우리의 목표는 다음과 같습니다.

  1. Tipy.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를 사용하여 로그인 팝오버 만들기

Tipy.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>웹 개발에 대한 더 많은 팁을 보려면 <strong>DailySandbox</strong>를 확인하고 <strong>무료 뉴스레터</strong>에 가입하여 앞서 나가세요!</p>


          

위 내용은 시각적 오류 신호를 위해 로그인 팝오버에 \'흔들기\' 효과 추가의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
마진은 무엇입니까? 40px 100px 120px 80px를 의미합니까?마진은 무엇입니까? 40px 100px 120px 80px를 의미합니까?Apr 28, 2025 pm 05:31 PM

기사는 CSS 마진 속성, 특히 "마진 : 40px 100px 120px 80px", 응용 프로그램 및 웹 페이지 레이아웃에 미치는 영향에 대해 설명합니다.

다른 CSS 테두리 속성은 무엇입니까?다른 CSS 테두리 속성은 무엇입니까?Apr 28, 2025 pm 05:30 PM

이 기사에서는 CSS 국경 속성에 대해 설명하고 사용자 정의, 모범 사례 및 응답성에 중점을 둡니다. 주요 인수 : Border-Radius는 반응 형 디자인에 가장 효과적입니다.

CSS 배경은 무엇이며 속성을 나열합니까?CSS 배경은 무엇이며 속성을 나열합니까?Apr 28, 2025 pm 05:29 PM

이 기사에서는 CSS 배경 속성, 웹 사이트 디자인 향상에 대한 사용 및 피하는 일반적인 실수에 대해 설명합니다. 주요 초점은 배경 크기를 사용한 반응 형 디자인에 중점을 둡니다.

CSS HSL 색상은 무엇입니까?CSS HSL 색상은 무엇입니까?Apr 28, 2025 pm 05:28 PM

기사는 CSS HSL 색상, 웹 디자인에서의 사용 및 RGB의 장점에 대해 설명합니다. 주요 초점은 직관적 인 색상 조작을 통해 설계 및 접근성을 향상시키는 데 있습니다.

CSS에 댓글을 추가 할 수있는 방법은 무엇입니까?CSS에 댓글을 추가 할 수있는 방법은 무엇입니까?Apr 28, 2025 pm 05:27 PM

이 기사는 CSS의 주석 사용에 대해 논의하고 단일 라인 및 멀티 라인 주석 구문을 자세히 설명합니다. 의견은 코드 가독성, 유지 관리 및 협업을 향상 시키지만 제대로 관리하지 않으면 웹 사이트 성능에 영향을 줄 수 있다고 주장합니다.

CSS 선택기는 무엇입니까?CSS 선택기는 무엇입니까?Apr 28, 2025 pm 05:26 PM

이 기사는 CSS 선택기, 유형 및 HTML 요소 스타일링을위한 사용법에 대해 설명합니다. ID와 클래스 선택기를 비교하고 복잡한 선택기의 성능 문제를 해결합니다.

어떤 유형의 CSS가 우선 순위가 가장 높습니까?어떤 유형의 CSS가 우선 순위가 가장 높습니까?Apr 28, 2025 pm 05:25 PM

이 기사는 CSS 우선 순위에 대해 논의하며, 가장 높은 특이성을 가진 인라인 스타일에 중점을 둡니다. CSS 충돌 관리를위한 특이성 수준, 재정의 방법 및 디버깅 도구를 설명합니다.

CSS의 구문은 무엇입니까?CSS의 구문은 무엇입니까?Apr 28, 2025 pm 05:23 PM

기사는 CSS 구문, 학습 전략, 일반적인 실수 및 검증 도구에 대해 설명합니다. 주요 초점은 연습과 이해를 통해 CSS를 마스터하는 데 있습니다.

See all articles

핫 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

사용하기 쉬운 무료 코드 편집기

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기