2015-04-08 2 views
1

У меня есть элемент в моем теле, что я анимировать ти этой функции:JQuery запуска анимации нажмите

$(function(){ 
    $("#telefonofisso").click(function(){ 
     if ($("#telefonofisso").hasClass('negative')) { 
      $(this).delay(400).animate({right:'10px'},1000).addClass('positive').removeClass('negative') 
     } 
    }); 
}) 

Но я не могу заставить его вернуться в исходное положение right:-210px если нажать на нее еще раз. Я попытался с помощью следующей функции:

$(function(){ 
    $("#telefonofisso").click(function(){ 
    if ($("#telefonofisso").hasClass('positive')) { 
     (this).delay(400).animate({right:'-210px'},1000).addClass('negative').removeClass('positive') 
    } 
    }); 
}) 

Но эта функция активируется, прежде чем я нажимаю во второй раз, так что мой элемент, если я нажимаю на него, начинается с right:-210px, идет к right:10px, чем возвращается к right:-210px только с одним нажмите кнопку.

Как я могу это исправить, и почему он действует так? Я не понимаю, почему он это делает. Потому что теоретически триггер - это щелчок, а вторая функция должна действовать только тогда, когда я нажимаю второй раз, верно?

+0

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

+0

Да, я вижу, что они выполняются одновременно, но для меня это не имеет особого смысла, потому что второй должен активироваться, только если мой элемент имеет класс «положительный», и он может иметь только «положительный» или «положительный», нагативный "за один раз. поэтому один из них не должен работать. –

+1

'addClass ('positive')' выполняется до конца анимации. Используйте его в анимационной функции обратного вызова. Я бы продемонстрировал, если вы создаете JSfiddle своей проблемы. –

ответ

1

Попробуйте это:

$(function(){ 
    $("#telefonofisso").click(function(){ 
    if ($("#telefonofisso").hasClass('positive')) { 
     $(this).delay(400).animate({right:'-210px'},1000) 
       .addClass('negative').removeClass('positive'); 
    } else { 
     $(this).delay(400).animate({right:'10px'},1000) 
       .addClass('positive').removeClass('negative');  
    } 
    }); 
}); 

Это позволит решить вашу проблему.

И вы забыли $ sign во втором звонке.

+0

Спасибо, это работает. –

1

Попробуйте рабочую демо-версию, согласно вашему требованию

$(function(){ 
     $("#telefonofisso").click(function(){ 
      var modified = $('.slider').css('left') === '250px' ? '0px' : '250px';    
      $('.slider').animate({    
       left : modified 
      }, 300) 
     }); 
    }) 

http://jsfiddle.net/stanze/02e11v2p/1/

+0

Спасибо, ваш ответ интересен! Можете ли вы объяснить sintax '===' 250px '? '0px': '250px'; ' Я никогда не видел этого раньше, что он делает? –

+1

Я использую операторы сравнения javascript и оператор ternary, этот оператор принимает три операнда, а также оператор shorcut для if. Как и прежде, сначала я проверяю, что класс с «слайдером» содержит левое положение 250 пикселей, чем снова, чтобы установить левую позицию на 0px. – stanze

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