2015-06-23 6 views
1

Я пытаюсь добавить задержку к слайду toggleclass, но, похоже, он не добавляет его.ToggleClass не добавляет JQuery Delay?

вот мой fiddle

и вот мой код;

$(function() { 
     $(".expand").on("click", function() { 
      $(this).next().slideToggle(); 

       if ($(this).next().css("display", "block")) { 



        $(this).next().children('#slidinghold').delay(5000).toggleClass('slidein'); 


      } 

      $expand = $(this).find(">:first-child"); 


      if ($expand.text() == "\u25B6") { 
       $expand.text("\u25BC"); 


      } else { 
       $expand.text("\u25B6"); 
      } 
     }); 

    }); 
+1

'.toggleClass()' это не метод анимации, это? '.delay()' работает только в очереди анимации, чтобы задерживать такие эффекты, как '.fadeIn()'. Вы можете использовать 'setTimeout()' ... – nnnnnn

ответ

3

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

$(this).next().children('#slidinghold').delay(5000).queue(function(){ 
    $(this).toggleClass("slidein").dequeue(); 
}); 

Fiddle

+0

@ Ziggy31 Добавлен рабочий скрипт – NightOwlPrgmr

+0

не работает, я боюсь :( –

+0

Это странно, кажется, задерживает переключатель для меня в скрипка, которую я прикрепил и в вашей скрипке. – NightOwlPrgmr

2

использование комплектTimeout вместо задержки. Пример:

$(".expand").on("click", function() { 

    $(".expand").next().children('#slidinghold').removeClass('active-expand'); 

    $(this).next().children('#slidinghold').addClass('active-expand'); 

    setTimeout(function() { 
     $('.active-expand').next().children('#slidinghold').toggleClass('slidein'); 
    }, 500); 
}); 

демо https://jsfiddle.net/anthonypagaycarbon/v1geqa8e/

+0

Я пробовал это, но он не работает. –

+0

из-за этого «$ (this)» –

+0

вы можете использовать некоторый трюк, например $ (". Expand"). Next(). Children ('# slidehold'). ToggleClass ('slidein'); .. –

0

как сказал jQuery's doc

.delay() не является заменой для Javas Уроженец функция SetTimeout cript, которая может быть более подходящим для некоторых случаев применения

Таким образом, вы можете использовать window.setTimeout для достижения этой цели:

$(function() { 
    function toggleClassDelay(element,class,delay) { 
     window.setTimeout(function() { 
      element.toggleClass(class) 
     },delay); 
    } 
    $(".expand").on("click", function() { 
     var el; 
     $(this).next().slideToggle(); 

     if ($(this).next().css("display", "block")) { 
      el = $(this).next().children('#slidinghold'); 
      toggleClassDelay(el,"slidein",5000) 
     } 
     $expand = $(this).find(">:first-child"); 
     if ($expand.text() == "\u25B6") { 
      $expand.text("\u25BC"); 
     } else { 
      $expand.text("\u25B6"); 
     } 
    }); 

});