2016-02-17 4 views
0

У меня есть функция, которая при щелчке div продолжает анимацию. , и я хочу, чтобы пользователь мог нажимать только один раз, чтобы не загружать эту анимацию при каждом нажатии. Может быть, ДИВ интерактивными один раз или, если в функции, но я не то, что хорошо в коде :)Сделать div одним щелчком мыши только один раз

это код

$(function() {  
    $('#valerie').click(function() { 

     $('.logo').animate({ 
      'left': 3 + '%' 
     }, 900); 
     $('#title2').animate({ 
      'font-size': 40 + 'px', 
      'top': 42 + '%' 
     }, 900); 
     $('body').css({ 
      'overflow': "auto" 
     }, 20); 
    }); 
}); 
+0

У меня есть две стороны Див бок, если вы нажимаете на один, он занимает 90% страницы, а остальные 10%. Поэтому, если я нажму на левый div, например, это займет 90% страницы, но если я нажму на правый div после, а затем хочу вернуться в левый div. Я не смогу сделать это с помощью команды «.one» jquery, которую вы мне скажете. Спасибо за быстрый ответ ! –

ответ

3

Использование JQuery .one().

$('#valerie').one('click', function() { 
    $('.logo').animate({'left': 3 + '%'},900); 
    $('#title2').animate({'font-size': 40 + 'px','top': 42 + '%'},900); 
    $('body').css({'overflow': "auto" },20); 
}); 
+0

спасибо, он разрешает первый шаг моей проблемы. У меня есть два div бок о бок, если вы нажмете на один, это займет 90% страницы, а остальные 10%. Поэтому, если я нажму на левый div, например, это займет 90% страницы, но если я нажму на правый div после, а затем хочу вернуться в левый div. Я не смогу сделать это с помощью команды «.one» jquery, которую вы мне скажете. Спасибо за ваш быстрый ответ! –

+0

Я не знаю, что вы пытаетесь сделать. Эта скрипта https://jsfiddle.net/td6a8pwu/ может вам помочь. @SteveD – Azim

0

Вы можете использовать one() метод как @Azim предложить, или вы можете использовать stop(), если вы хотите, чтобы анимация заканчивается после того, как новая анимация запрос:

$('#valerie').on('click', function() { 

    $('.logo').stop().animate({ 
     'left': 3 + '%' 
    }, 900); 
    $('#title2').stop().animate({ 
     'font-size': 40 + 'px', 
     'top': 42 + '%' 
    }, 900); 
    $('body').css({ 
     'overflow': "auto" 
    }, 20); 


}); 

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

+0

Я хочу избежать мультипликационной анимации! –

+0

Согласно вашему комментарию в ответе @Azim, ваше решение - это ответ. Используйте 'stop()', чтобы остановить анимацию в каждом клике, который анимация не закончила. –

0

использование JQuery один()

$('#valerie').one('click', function() { 

}) 
+0

такие же ответы, как @Azim 17 минут назад – guradio

0

Существует .one метод JQuery для один раз при клике.

$('#valerie').one('click', function() { 

    $('.logo').animate({ 
     'left': 3 + '%' 
    }, 900); 
    $('#title2').animate({ 
     'font-size': 40 + 'px', 
     'top': 42 + '%' 
    }, 900); 
    $('body').css({ 
     'overflow': "auto" 
    }, 20); 

    }); 
0

Вы можете использовать :animated:

$('#valerie').click(function() { 
    if($(':animated').length || $('body').css('overflow') === "auto"){// <---add this 
     return; 
    } 
    $('.logo').animate({'left': 3 + '%'},900); 
    $('#title2').animate({'font-size': 40 + 'px','top': 42 + '%'},900); 
    $('body').css({'overflow': "auto" },20); 
}); 
1

Вы можете попробовать .off (событие) после вашей логики на это событие

$('#valerie').on('click', function() { 
     $('.logo').animate({ 
      'left': 3 + '%' 
     }, 900); 
     $('#title2').animate({ 
      'font-size': 40 + 'px', 
      'top': 42 + '%' 
     }, 900); 
     $('body').css({ 
      'overflow': "auto" 
     }, 20); 

     $(this).off(event); 
    }); 
+0

как переустановить при необходимости? – Jai

+0

вы можете проверить его [здесь] (http://stackoverflow.com/questions/13940591/how-to-bind-unbind-and-rebind-click-events-in-jquery) – Dhiraj

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