2013-06-05 11 views
22

Próbuję opóźnić zamianę tekstu w div. Powinien działać jak suwak/karuzela dla tekstu.Korzystanie z funkcji setTimeout do opóźniania działań jQuery

Muszę mieć błędny kod, ponieważ ostateczny zamiennik tekstu nigdy się nie dzieje.

Ponadto, w jaki sposób animowałbym wprowadzenie tekstu zastępczego (rolety okienne, na przykład)?


<html> 
    <head> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
     <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script> 
     <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/base/jquery-ui.css" /> 

     <script type="text/javascript"> 
$(document).ready(function() { 

    $("#showDiv").click(function() { 
     $('#theDiv').show(1000, function() { 
      setTimeout(function() { 
       $('#theDiv').html('Here is some replacement text', function() { 
        setTimeout(function() { 
         $('#theDiv').html('More replacement text goes here'); 
        }, 2500); 
       }); 
      }, 2500); 
     }); 
    }); //click function ends 

}); //END $(document).ready() 

     </script> 
    </head> 
<body> 

    Below me is a DIV called "theDiv".<br><br> 
    <div id="theDiv" style="background-color:yellow;display:none;width:30%;margin:0 auto;"> 
     This text is inside the Div called "theDiv". 
    </div><br> 
    <br> 
    <input type="button" id="showDiv" value="Show DIV"> 



</body> 
</html> 
+0

Najodpowiedniejszym narzędziem do tego byłoby '.queue()' Myślę, że ... – Shikkediel

Odpowiedz

24

.html() zajmuje tylko ciąg lub funkcji jako argument not both. Spróbuj tego:

$("#showDiv").click(function() { 
    $('#theDiv').show(1000, function() { 
     setTimeout(function() { 
      $('#theDiv').html(function() { 
       setTimeout(function() { 
        $('#theDiv').html('Here is some replacement text'); 
       }, 0); 
       setTimeout(function() { 
        $('#theDiv').html('More replacement text goes here'); 
       }, 2500); 
      }); 
     }, 2500); 
    }); 
}); //click function ends 

jsFiddle example

+0

co jeśli wstawię do tego div .. czy skrypt zostanie również odświeżony? lub coś. – Vincent

2

Można również użyć jQuery's delay() method zamiast setTimeout(). Da ci to znacznie bardziej czytelny kod. Oto przykład z docs:

$("#foo").slideUp(300).delay(800).fadeIn(400); 

Jedynym ograniczeniem (które jestem świadomy) jest to, że nie daje sposób, aby usunąć limit czasu. Jeśli musisz to zrobić, lepiej trzymać się wszystkich zagnieżdżonych wywołań zwrotnych, które Cię atakują.

+0

W rzeczywistości można użyć 'clearQueue()', aby usunąć animacje, które nie zostały jeszcze wykonane. – Shikkediel

7

Spróbuj tego:

function explode(){ 
    alert("Boom!"); 
} 
setTimeout(explode, 2000); 
0

To jest jak I rozwiązać problem Menu zamyka się po kilku sekundach od myszy out (że jeśli unoszą flesza),

$setM_swith=0; //Set timer switch 
$(function(){ 
     $(".navbar-nav li a").click(function(event) { 
      if (!$(this).parent().hasClass('dropdown')) 
       $(".navbar-collapse").collapse('hide'); 
     }); 
     $(".navbar-collapse").mouseleave(function(){ 
      $setM_swith=1; 
      setTimeout(function(){ if($setM_swith==1){$(".navbar-collapse").collapse('hide');$setM_swith=0;} }, 3000); 
     }); 
     $(".navbar-collapse").mouseover(function(){ 
      $setM_swith=0; 
     }); 
    }); 
+0

Przepraszam złe miejsce :( –

Powiązane problemy