Javascript 出现错误时摇动登录表单
我已经成功地使用ajax构建了一个登录表单,并希望在用户输入错误的详细信息时为表单添加一个震动效果。我有将启动的功能,但只需要构建jquery效果(注意,我知道jquery UI,但不想使用它!我不想为此使用任何插件) 到目前为止,我已经:Javascript 出现错误时摇动登录表单,javascript,jquery,Javascript,Jquery,我已经成功地使用ajax构建了一个登录表单,并希望在用户输入错误的详细信息时为表单添加一个震动效果。我有将启动的功能,但只需要构建jquery效果(注意,我知道jquery UI,但不想使用它!我不想为此使用任何插件) 到目前为止,我已经: function shakeForm() { var p = new Array(15, 30, 15, 0, -15, -30, -15, 0); p = p.concat(p.concat(p)); $('form').cs
function shakeForm() {
var p = new Array(15, 30, 15, 0, -15, -30, -15, 0);
p = p.concat(p.concat(p));
$('form').css('left',p);
}
据我所知,我需要循环值数组,但我该怎么做呢?注意,元素表单已经有了相对位置。所以这只是一个在随机序列中将这些值作为左值运行的例子
谢谢使用
jQuery循环抛出数组。每个
:
制作数组的一种简单方法是使用每个空格拆分字符串:
var p = "15 30 15 0 -15 -30 -15 0".split(" ");
每个步骤之间的延迟:
var delay = 100;
使用setTimeout(函数(){…},点火前的时间)
key是值在数组中的键:
key = 0, 1, 2, 3
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);
});
}
我已经为此制作了一个插件。。检查一下 它在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”表示与原始位置的抖动距离
要更改超时(延迟)和效果持续时间,必须设置
超时:[you timeout../delay]
和效果时间<代码>间隔:…mmm如果jquery animate()可用,为什么要使用原生js。。。您可以这样尝试:
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);
});
}
默认情况下,jquery动画是排队的,因此您只需为数组的每个元素调用
animate
:
key = 0, 1, 2, 3
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);
});
}
示例:为什么要麻烦?
动画已排队。
更多-您可以使用left
属性marginleft
阻止添加position
属性的内容:)
函数shakeForm(){
var l=20;
对于(var i=0;i,上述示例改变了元素的原始位置
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);
}
}
函数shakeForm(){
var保证金=15;
无功转速=50;
var时间=5;
对于(var i=0;i
这里的演示使用CSS来代替JS更好。CSS使用更少的资源(更快),更简单。
你可以在这里找到很好的例子:为什么不使用css3动画?在我看来,没有那么夸张。有那么多插件存在,因为有那么多人重新发明了轮子……我搜索了同样的东西,得到了20个论坛结果,还有jquery插件(还有另一个要添加的脚本)……但我发现了这一点,它的效果很粗糙
不是我的答案,而是纯css3
对于你们这些固执(像我一样)讨厌图书馆的人
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;
}
呵呵,这是个不错的解决方案,但为什么要使用字符串而不是数组呢?我不知道。只是写得更快而已。:)这是一个非常好的插件!但我建议在本例中也可以自定义效果的持续时间。谢谢..我正在改进它..如果你有想法,请与我联系!andreykvital@gmail.com
。@Armin,edited.。您只需将其配置为超时:500,间隔:1.
;)@AndreyKnupp阅读OP:我不知道想使用任何插件来实现这一点
是的……但他可以了解插件的想法并做类似的事情。未来读者:如果你在OP中错过了它,请注意元素的位置必须是相对的,因此可能需要将链修改为:$(“form”).css('position','relative')。动画({'margin left':“+=”+(l=-l)+'px'},50);
在这种情况下,位置根本不重要-边距它总是相对于元素本身。顺便说一句,设置位置(或任何其他类似的常量参数)是没有效率的,也没有意义的在loop.QUESTION中,如何正确地实现这段漂亮的代码,如果我使用onclick属性调用函数,则无论登录信息是否正确,表单都会抖动。您需要首先创建一些验证逻辑,并在验证失败时运行动画。类似于if(!validate()){shakeForm();}
。基本上shakeForm
可以被称为shakeInput
或者只是shakeElement
,然后传递一个元素shakeElement(this)
的引用,如果我们谈论的是onClick处理程序。这太棒了。为什么要使用像JQ这样的垃圾来破坏思维方式。即使没有CSS.Tnx,效果也很好!
.shakeClass{
transition: margin 100ms;
}