出错时摇一个登录表单
我已经使用ajax成功构建了一个登录表单,并希望在用户输入错误的详细信息时为表单添加一个摇动效果。 我有适当的function,但只需要构建jquery效果(注意我知道jquery UI,但不想使用它!我不想使用任何插件)
到目前为止我有:
function shakeForm() { var p = new Array(15, 30, 15, 0, -15, -30, -15, 0); p = p.concat(p.concat(p)); $('form').css('left',p); }
根据我的理解,我需要循环值数组,但我该怎么做? 请注意,元素表单已经具有相对位置。 那么这只是将这些值作为随机序列中的左值运行的情况?
谢谢
何必? 动画排队。 更多 – 相反left
属性你可以使用margin-left
阻止添加position
属性:)
function shakeForm() { var l = 20; for( var i = 0; i <= 10; i++ ) { $( 'form' ).animate( { 'margin-left': '+=' + ( l = -l ) + 'px', 'margin-right': '-=' + l + 'px' }, 50); } }
最好使用CSS而不是JS。 CSS使用更少的资源(更快)并且更简单。 您可以在此处找到好的(以及“随时可用”)示例: https : //daneden.me/animate/
我为此做了一个插件..检查它http://static.mbiosinformatica.com.br/jQuery/
它适用于IE(7,8,9),Chrome和Firefox。
并且,您可以应用回调函数,以显示错误消息..或其他任何内容。
$('#div').shake({ positions : { 'L' : 50 , 'R' : 50 } , // shake only left and right (U,L,R,D) rotate : false , // rotate div on shake .. true/false parent : false // shake parent div .. true/false }, function(){ /* do something */ });
在位置,你也可以发送数组,只是: positions: [ [ 'L', 50 ... ] ]
这个值’ 50 ‘是它与原始位置的抖动距离..
要更改超时(延迟)和效果持续时间,您必须设置timeout: [you timeout .. / delay ]
和效果时间.. interval: ...
mmm为什么使用原生js,如果jquery animate()可用…你尝试重复这样:
var p = new Array(15, 30, 15, 0, -15, -30, -15, 0); function shakeForm(index) { if(typeof index === "undefined") index = 0; if(typeof p[index] === "undefined") return false; $("form").animate({ "left": p[index] }, function() { shakeForm(index + 1); }); }
对于那些顽固(像我)和讨厌图书馆的人…
var e = document.getElementById('dividname'); e.style.marginLeft='8px'; setTimeout(function(){e.style.marginLeft='0px';},100); setTimeout(function(){e.style.marginLeft='8px';},200); setTimeout(function(){e.style.marginLeft='0px';},300);
然后在你的CSS中:
.shakeClass{ transition: margin 100ms; }
循环使用jQuery.each
抛出数组: http : //jsfiddle.net/N8F7Z/1/
function shakeForm() { var p = "15 30 15 0 -15 -30 -15 0".split(" "); $.each(p, function(key, value) { var delay = 100; setTimeout(function() { $("form").css("left", value + "px"); }, delay*key); }); }
制作数组的一种简单方法是将字符串与每个空格分开:
var p = "15 30 15 0 -15 -30 -15 0".split(" ");
每一步之间的延迟:
var delay = 100;
使用setTimeout(function() {...}, theTimeBeforeFiring )
theTimeBeforeFiring = delay * key
key是数组中值的关键:
key = 0, 1, 2, 3
jquery动画默认排队,所以你只需要为数组的每个元素调用animate
:
function shakeForm() { var p = [15, 30, 15, 0, -15, -30, -15, 0]; var x = $('form').offset().left; var speed = 40; $.each(p, function() { $('form').animate({'left': x + this}, speed); }); }
示例: http : //jsfiddle.net/3qdFL/
上面的示例更改了元素的原始位置。
function shakeForm() { var margin = 15; var speed = 50; var times = 5; for( var i = 0; i < times; i++ ){ $( "form" ).animate( { 'margin-left': "+=" + ( margin = -margin ) + 'px' }, speed); $( "form" ).animate( { 'margin-right': "+=" + ( margin = -margin ) + 'px' }, speed); $( "form" ).animate( { 'margin-right': "+=" + ( margin = -margin ) + 'px' }, speed); $( "form" ).animate( { 'margin-left': "+=" + ( margin = -margin ) + 'px' }, speed); } }
在这里演示http://jsfiddle.net/UW6tN/1/
为什么不使用css3动画? 在我看来,不要过头了。 有这么多插件存在,因为很多重新发明轮…我搜索了相同的东西,得到20个论坛和jquery插件的结果(还有另一个脚本添加)..但我发现这个和它的工作原理很粗糙。
不是我的答案,但它纯粹的css3!
CSS动画类似Mac OS X 10.8无效密码“摇”?