2013-07-07 3 views
0

Выполнение проверки формы. Если поле не проходит проверку, я хочу изменить цвет и встряхнуть поле. Мой код:jQuery оживить, не встряхивая элемент

$('#'+vet) 
.css({'background-color':'yellow','border-color':'red'}) 
.animate({ left: "-10px" }, 100).animate({ left: "10px" }, 100) 
.animate({ left: "-10px" }, 100).animate({ left: "10px" }, 100) 
.animate({ left: "0px" }, 100); 

Он меняет цвет фона поля и границы, но поле не трясет.

Любые мысли?

+2

В качестве альтернативы использовать эффект jQuery UI для встряхивания. http://api.jqueryui.com/shake-effect/ – Thew

ответ

1

Установить поле в position property к relative:

input { 
    position : relative; 
} 

(. Использование любого селектор имеет больше смысла для вашей структуры)

Демо: http://jsfiddle.net/Xt7JW/

элементов по умолчанию имеет static позиционирование, для которого установка lefttop и т. д.) не влияет.

+0

Это решило. Спасибо. – gibberish

1

Использование слева, сверху, справа, снизу свойства, чтобы изменить положение элемента, он также должен иметь контекст позиционирования:

.element { position: relative; } 

или

.element { position: absolute; } 

или

.element { position: fixed; } 

В зависимости от ваших потребностей.

1

Попробуйте привязать анимацию в методе обратного вызова, который вы можете передать в метод animate(), вместо того, чтобы напрямую связать анимации вместе. jQuery docs state:

При условии, что полная функция обратного вызова запускается после завершения анимации. Это может быть полезно для последовательного объединения различных анимаций.

Я угадываю причину, по которой он не движется в настоящее время, заключается в том, что он одновременно пытается анимировать в противоположных направлениях. Это непроверенное, но попробовать:

$('#' + vet).css({'background-color':'yellow', 'border-color':'red' }) 
.animate({ left: '-=10px'}, 100, function() { 
    $('#' + vet).animate({left: '+=20px'}, 100, function() { 
    $('#' + vet).animate({left: '-=20px'}, 100, function() { 
     $('#' + vet).animate({left: '+=10px'}, 100); 
    }); 
    }); 
}); 

Использование += также исключает установки положения к относителен. Теперь каждая анимация выполняется по завершении последней.

Редактировать: .animate().animate() похоже на то, что в конце концов.

+1

Использование обратных вызовов _not_ необходимо для анимации на одном элементе. Все методы анимации jQuery (а не только '.animate()') предназначены для автоматической очереди друг за другом, если они используются на одном и том же элементе, поэтому цепочка является правильным и обычным способом сделать это. Вам нужно использовать обратные вызовы, если вы хотите анимировать второй элемент после завершения анимации первого лица - эффекты анимации для нескольких элементов будут происходить одновременно. _ «Использование + = также исключает установку позиции относительно.» _ - Нет, это не так. – nnnnnn

Смежные вопросы