2013-03-31 43 views
20

在Mac OS X 10.8“密码”屏幕上,如果输入无效的密码,它将来回“摇动”(也称为左右)。我正在尝试使用CSS动画为HTML密码输入字段实现类似的效果。CSS动画类似于Mac OS X 10.8无效密码“摇动”?

我创建了一个似乎模拟此行为的"Password Shake" jsfiddle。但是,这看起来不太正确。我不确定明确的关键帧和定时功能是否正确。这是我第一次尝试CSS动画,我正在寻找正确的方式来实现这一目标的反馈。

HTML

<div class="box"> 
    <input type="password" id="demo-password" placeholder="password" autofocus /> 
</div> 

的JavaScript

$('#demo-password').on('keyup', function (e) { 
    var $input = $(this); 
    var val = $.trim($input.val()); 
    $input.removeClass("invalid"); 

    if (e.which !== 13 || !val) { 
     return; 
    } 

    if (val != "password") { 
     $input.select(); 
     $input.addClass("invalid"); 
    } 
}); 

CSS

#demo-password.invalid { 
    outline-color: red; 
    /* also need animation and -moz-animation */ 
    -webkit-animation: shake .6s linear; 
} 
/* also need keyframes and -moz-keyframes */ 
@-webkit-keyframes shake { 
    0% { 
     left:-10px; 
    } 
    16% { 
     left:9px; 
    } 
    33% { 
     left:-6px; 
    } 
    50% { 
     left:5px; 
    } 
    66% { 
     left:-2px; 
    } 
    83% { 
     left:1px; 
    } 
    100% { 
     left: 0px; 
    } 
} 

编辑

我发现Animate.css具有抖动动画。我已经在下面包含了(非浏览器前缀)CSS。而不是设置lefttransform: translateX(),这可能有更好的硬件加速机会。

.animated { 
    animation-duration: 1s; 
    animation-fill-mode: both; 
} 

@keyframes shake { 
    0%, 100% {transform: translateX(0);} 
    10%, 30%, 50%, 70%, 90% {transform: translateX(-10px);} 
    20%, 40%, 60%, 80% {transform: translateX(10px);} 
} 

.shake { 
    animation-name: shake; 
} 
+0

我不知道它是否完全正确,但看起来不错。 – btevfik

+0

[JQuery UI offers](http://jqueryui.com/effect/)你在找什么。您可以从查看他们的代码中受益。 – Ares

回答

48

我用我的iPad相机记录了Mac pasword屏幕。它看起来像是每个方向摇动3次,前2次是全距离,最后1次是小距离。

#demo-password.invalid { 
    outline-color: red; 
    /* also need animation and -moz-animation */ 
    -webkit-animation: shake .5s linear; 
} 
/* also need keyframes and -moz-keyframes */ 
@-webkit-keyframes shake { 
    8%, 41% { 
     -webkit-transform: translateX(-10px); 
    } 
    25%, 58% { 
     -webkit-transform: translateX(10px); 
    } 
    75% { 
     -webkit-transform: translateX(-5px); 
    } 
    92% { 
     -webkit-transform: translateX(5px); 
    } 
    0%, 100% { 
     -webkit-transform: translateX(0); 
    } 
} 
+4

+1使用css3动画..伟大的工作! – greaterKing

+4

codepen:http://codepen.io/anon/pen/YyRJVW –

+0

作品像个魅力男人,谢谢。我简单地将像素转换调​​整为7px和4px,并将其加速100ms以适应我的需要。 –