2012-04-04 2 views
3

Ich wollte einen Link erstellen, der Inhalt vor dem Anzeigen eines direkten Links in meinem Forum anzeigen würde.jQuery; Klicken Sie, um HTML-Inhalt und Countdown anzuzeigen, und dann zusätzlichen Inhalt

  1. anzeigen Link Befestigung
  2. Nach einem Klick auf den Download starten, zeigt es HTML-Inhalt mit 5 Sekunden Countdown unter
  3. Wenn Countdown beendet hat, es eine direkte Verbindung zeigt.

Ich habe den folgenden Code versucht:

$("button").click(function() { 
    $(function() { 
    var count = 10; 
    countdown = setInterval(function() { 
     $("p.countdown").html(count + " seconds remaining!").show("slow"); 

     if (count == 0) { 
     $("p.new").show("slow"); 
     } 

     count--; 
    }, 1000); 
    }); 
}); 

Antwort

2

Wie wäre es mit einer magischen Funktion?

Um über @Bradley Foster's Antwort zu sprechen, ist es nicht zuverlässig, mehrere Male zu rufen setTimeout. setTimeout stoppt, wenn Ihr Browser zurückbleibt. Sie sind sich also nicht sicher, ob die Bestellung richtig ist. Verschachteln der setTimeout, wie ich da unten zeige, ist besser.

$('#button').click(function() { 
    var seconds = 5, // Declare some variables for reuse 
     el = $('#some_link') 
    el.text(seconds) // Put it a five! 
    // Name your function so that you can call it later 
    setTimeout(function countdown() { 
     // Your countdown is already at 5, so decrement it 
     // Remember that you've already waited for 1000ms before reaching this line the first time 
     seconds-- 
     el.text(seconds) // Set the new time left 
     // If the countdown is not over, recall this function after 1000ms 
     if (seconds > 0) { 
      setTimeout(countdown, 1000) 
     } 
     // If it is over, display the link 
     // Note that js will stop there and not try to call itself another time as it would with setInterval() 
     else { 
      el.html('<a href="link">Download</a>') 
     } 
    }, 1000) 
}) 

Btw, in Frage, wenn Sie $(function() {... tun, bist du eigentlich $(document).ready(function() {... tun. Ich denke, das ist nicht das, was Sie :)

Jsfiddle hier wollte: http://jsfiddle.net/Ralt/kTbcm/

+0

Könnten Sie setzen auch eine HTML-exapmple up? Es scheint nicht für mich mit dem HTML zu funktionieren, das ich benutze. Danke für Ihre Hilfe! – user1312608

+0

Sicher, da gehen Sie: http://jsfiddle.net/Ralt/kTbcm/ –

+0

Vielen Dank. Das ist sehr hilfreich. Es gibt nur ein Problem. Ich würde gerne zusätzliche Inhalte anzeigen (zum Beispiel eine Anzeige), und der Inhalt ändert sich nach der 1. Sekunde -> http://jsfiddle.net/kTbcm/1/, also habe ich mich gefragt, ob es möglich wäre, die zusätzlicher Inhalt in HTML oder in einer anderen Variable? – user1312608

0
function countdownfunction() { 
    $('#some_link').innerHTML = "5"; 
    $('#some_link').innerHTML = setTimeout("4",1000); 
    $('#some_link').innerHTML = setTimeout("3",1000); 
    $('#some_link').innerHTML = setTimeout("2",1000); 
    $('#some_link').innerHTML = setTimeout("1",1000); 

    $('#some_link').innerHTML = '<a href="newlink.php">download now</a>; 
}; 

$('#some_link').click(countdownfunction()); 
1

You could do something like this:

HTML:

<button>Download</button> 

<p class="countdown" /> 
<p class="link"> 
    <a href="www.stackoverflow.com">StackOverflow</a> 
</p>​ 

CSS:

p { display: none; padding: 50px; border: solid 1px black; } 
p.countdown { color: red; font-size: 24px; }​ 

jQuery:

var $countdown = $("p.countdown"), 
    $link = $("p.link"), 
    $button = $("button"); 

$button.click(function() { 

    $countdown.hide(0); 
    $link.hide(0);   

    var count = 10, 
     countdown = setInterval(function() { 

      $countdown.html(count + " seconds remaining!").show("slow"); 

      if (count == 0) { 

       $countdown.hide(0); 
       $link.show("slow"); 
       clearInterval(countdown); 

      } 

      count--; 

     }, 1000); 

});​ 
+0

-1 für die Verwendung von 'setInterval'. Es ist nicht zuverlässig. Sehen Sie diese ausgezeichnete Antwort, um zu überprüfen, warum: http://stackoverflow.com/a/731625/851498 –

+0

@FlorianMargaine - Es tut mir leid, aber hast du deinen eigenen Link gelesen? Er stellt in seiner Schlussfolgerung klar fest: "Ich würde ein Intervall für einmalige Animationen betrachten, die ich so reibungslos wie möglich haben möchte, während verkettete Timeouts höflicher für laufende Animationen sind, die die ganze Zeit während des Ladens der Seite stattfinden würden."Das OP-Szenario ist eine einmalige Animation, die so flüssig wie möglich sein sollte und setInterval passt zur Rechnung. –

+0

@FlorianMargaine - Tatsächlich würde ich immer sagen, dass ich' setInterval() 'immer zu' setTimeout() 'bevorzuge Der Versuch, die Zeit in Javascript zu halten, ist nie zuverlässig und variiert je nach Browser –

Verwandte Themen