2009-05-27 15 views
20

Chciałbym pokazać elementy div w określonym przedziale (10 sekund) i pokazać następny element div oraz jako kontynuację i powtórzyć to samo.
Pokazywanie i ukrywanie elementów div w określonym przedziale czasu za pomocą jQuery

**

kolejności:

** dniu 10 drugiego pokaż div1, ukrywać inne div,
Po 5seconds przedział Pokaż div 2 i ukrywanie inne działy,
Po 5 sekundach przerwy Pokaż div 3 i ukryj inne divy,
i powtarzaj to samo co 10 sekund.


Kod następująco:


<div id='div1' style="display:none;"> 
    <!-- content --> 
</div> 

<div id='div2' style="display:none;"> 
    <!-- content --> 
</div> 

<div id='div3' style="display:none;"> 
    <!-- content --> 
</div> 

Odpowiedz

31

Working Example tutaj - dodać /edytować do adresu URL, aby grać z kodem

wystarczy użyć JavaScript setInterval funkcja

$('html').addClass('js'); 

$(function() { 

    var timer = setInterval(showDiv, 5000); 

    var counter = 0; 

    function showDiv() { 
    if (counter ==0) { counter++; return; } 

    $('div','#container') 
     .stop() 
     .hide() 
     .filter(function() { return this.id.match('div' + counter); }) 
     .show('fast'); 
    counter == 3? counter = 0 : counter++; 

    } 

}); 

i HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

    <head> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
     <title>Sandbox</title> 
     <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
     <style type="text/css" media="screen"> 
     body { background-color: #fff; font: 16px Helvetica, Arial; color: #000; } 
     .display { width:300px; height:200px; border: 2px solid #000; } 
     .js .display { display:none; } 
     </style> 
    </head> 

    <body> 
     <h2>Example of using setInterval to trigger display of Div</h2> 
     <p>The first div will display after 10 seconds...</p> 
     <div id='container'> 
     <div id='div1' class='display' style="background-color: red;"> 
     div1 
     </div> 
     <div id='div2' class='display' style="background-color: green;"> 
     div2 
     </div> 
     <div id='div3' class='display' style="background-color: blue;"> 
     div3 
     </div> 
     <div> 
    </body> 

</html> 

EDIT:

W odpowiedzi na Twój komentarz na temat div pojemnika, wystarczy zmodyfikować ten

$('div','#container') 

do tego

$('#div1, #div2, #div3') 
+0

Russ Dziękuję za szybką odpowiedź na wpis. W twoim przykładzie pokazuje, że musimy mieć pojemnik div i do tego musimy mieć inne elementy div. Ale moje divy nie są wewnątrz kontenera, który jest oddzielny. jak odpowiednio zmodyfikować kod? – Webrsk

+0

czy masz dostęp do modyfikacji kodu HTML? Jeśli tak, sugerowałbym zawijanie elementów div w kontenerze div dla kontekstu i łatwości selekcji. Bez elementu div kontenera kod musiałby zostać zmodyfikowany, aby wybrać tylko te elementy div, tj. Divy z identyfikatorami 1, 2 i 3. Zaktualizuję teraz moją odpowiedź. –

+0

Ya ma sens, mogę ją umieścić w div kontenera na lepsze przejrzystość. Russ powiedz mi, czy możemy pokazać inny div (nazwany: div_sub1) w momencie wyświetlania div1, a następnie.Czy ten sam kod może być usunięty? – Webrsk

5

Zobacz InnerFade.

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

    function() { 
     $('#portfolio').innerfade({ 
      speed: 'slow', 
      timeout: 10000, 
      type: 'sequence', 
      containerheight: '220px' 
     }); 
    }); 
</script> 
<ul id="portfolio"> 
    <li> 
     <a href="http://medienfreunde.com/deutsch/referenzen/kreation/good_guy__bad_guy.html"> 
     <img src="images/ggbg.gif" alt="Good Guy bad Guy" /> 
     </a> 
    </li> 
    <li> 
     <a href="http://medienfreunde.com/deutsch/referenzen/kreation/whizzkids.html"> 
     <img src="images/whizzkids.gif" alt="Whizzkids" /> 
     </a> 
    </li> 
    <li> 
     <a href="http://medienfreunde.com/deutsch/referenzen/printdesign/koenigin_mutter.html"> 
     <img src="images/km.jpg" alt="Königin Mutter" /> 
     </a> 
    </li> 
    <li> 
     <a href="http://medienfreunde.com/deutsch/referenzen/webdesign/rt_reprotechnik_-_hybride_archivierung.html"> 
     <img src="images/rt_arch.jpg" alt="RT Hybride Archivierung" /> 
     </a> 
    </li> 
    <li> 
     <a href="http://medienfreunde.com/deutsch/referenzen/kommunikation/tuev_sued_gruppe.html"> 
     <img src="images/tuev.jpg" alt="TÜV SÜD Gruppe" /> 
     </a> 
    </li> 
</ul> 
+0

Ładna i prosta wtyczka! – TruMan1

17

Loop przez div co 10 sekund.

$(function() { 

    var counter = 0, 
     divs = $('#div1, #div2, #div3'); 

    function showDiv() { 
     divs.hide() // hide all divs 
      .filter(function (index) { return index == counter % 3; }) // figure out correct div to show 
      .show('fast'); // and show it 

     counter++; 
    }; // function to loop through divs and show correct div 

    showDiv(); // show first div  

    setInterval(function() { 
     showDiv(); // show next div 
    }, 10 * 1000); // do this every 10 seconds  

}); 
+0

czy jest sposób na zmianę układu, pokazać div1, a następnie pokazać div2 i nadal pokazać div1 w tym samym czasie. Więc kiedy pojawi się div2, pokazuje div1 i div2? –

7

o to jQuery plugin wymyśliłem:

$.fn.cycle = function(timeout){ 
    var $all_elem = $(this) 

    show_cycle_elem = function(index){ 
     if(index == $all_elem.length) return; //you can make it start-over, if you want 
     $all_elem.hide().eq(index).fadeIn() 
     setTimeout(function(){show_cycle_elem(++index)}, timeout); 
    } 
    show_cycle_elem(0); 
} 

Trzeba mieć wspólną classname dla wszystkich div wan cyklu używać go tak:

$("div.cycleme").cycle(5000) 
0

Spróbuj

 $('document').ready(function(){ 
     window.setTimeout('test()',time in milliseconds); 
     }); 

     function test(){ 

     $('#divid').hide(); 

     } 
0

He Kolejny raz podejmijmy się tego problemu, używając rekursji i bez użycia zmiennych zmiennych. Ponadto, nie używam setInterval, więc nie ma czyszczenia, które trzeba zrobić.

Mając to HTML

<section id="testimonials"> 
    <h2>My testimonial spinner</h2> 
    <div class="testimonial"> 
     <p>First content</p> 
    </div> 
    <div class="testimonial"> 
     <p>Second content</p> 
    </div> 
    <div class="testimonial"> 
     <p>Third content</p> 
    </div> 
</section> 

Korzystanie ES2016

Tutaj można wywołać funkcję rekurencyjnie i aktualizować argumenty.

const testimonials = $('#testimonials') 
     .children() 
     .filter('div.testimonial'); 

    const showTestimonial = index => { 

    testimonials.hide(); 
    $(testimonials[index]).fadeIn(); 

    return index === testimonials.length 
     ? showTestimonial(0) 
     : setTimeout(() => { showTestimonial(index + 1); }, 10000); 
    } 

showTestimonial(0); // id of the first element you want to show. 
Powiązane problemy