2015-08-14 6 views
1

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

Вот мой сценарий:

$("span.click").click(function() { 
    $(".map").animate(
    {"opacity": "1"}, 200); 
}); 

$("span.click").click(function() { 
    $(".navigation").animate(
    {"bottom": "-100px"}, 200); 
}); 

$("span.click").click(function() { 
    $(".click").animate(
    {"bottom": "150px"}, 200); 
}); 

Как вы можете видеть, три анимации происходит. Какое выражение if/else необходимо ввести в действие, чтобы создать обратимую анимацию?

Вот jsfiddle: http://jsfiddle.net/6arjhkzc/2/

+0

Не находите этот пример несколько проще (для начала) http://jsfiddle.net/6arjhkzc/3/ –

+0

Удерживайте булевы, которые представляют текущее состояние, и проверяйте, была ли она анимирована каждый раз. если это так, сделайте обратное. :) –

+0

@ RokoC.Buljan Я просто отделил каждую функцию, чтобы четко ее выложить. –

ответ

2

jsfiddle demo

$(document).ready(function() { 
    $("span.click").click(function() { 

     var io = this.io ^= 1; // Simple I/O toggler 

     $(".map").animate({"opacity": io ? 1 : 0}, 200); 
     $(".navigation").animate({"bottom": io ? -100 : -150}, 200); 
     $(".click").animate({"bottom": io ? 150 : 100}, 200); 
    }); 
}); 

магазин 1 или 0 внутри щелкнутой кнопку io собственности (используется как Boolean, так как 0 вычисляется как false).
Чем можно использовать некоторые условные операторы ?:, вы можете переключать требуемые значения.

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Conditional_Operator
https://stackoverflow.com/a/22061240/383904

Если вы не комфортабельный с оператором побитовое исключающее ^, как Toggler, вы всегда можете использовать стандартный кувырканье отрицанием (demo):

var io = this.io = !this.io; 
+0

Как вы можете преобразовать css с этим IO toggler? Скажем, если бы я хотел что-то масштабировать при щелчке, я пробовал этот код, но он не работает: $ (this) .animate ({"transform", "scale": io? 1: 1.5}, 100) ; –

+0

@AustinBranham почти так, у вас есть только опечатка (отсутствует ':' вместо ','). Кроме того ** анимация не применяется к преобразованию CSS. используйте CSS вместо этого ** ** также в CSS это похоже на «scale (1.5)», поэтому в jQuery это одно и то же: '$ (this) .css ({transform:" scale ("+ (io? 1: 1.5) + ")"}, 100); '>> обратите внимание на': 'и как я включил io-материал в'() ', используя конкатенацию строк +. Также обратите внимание, что 100 - очень быстрая анимация, я бы предложил использовать min 230 для лучшего UX –

+0

@AustinBranham см. Этот пример: http://jsfiddle.net/6arjhkzc/6/ –

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