【问题标题】:Show and hide divs at a specific time interval using jQuery使用 jQuery 在特定时间间隔显示和隐藏 div
【发布时间】:2010-10-29 05:37:38
【问题描述】:

我想以特定间隔(10 秒)显示 div 并显示下一个 div,然后继续重复相同的操作。

**

顺序:

** 在第 10 秒 显示 div1 ,隐藏其他 div ,
5秒间隔后 显示 div 2 并隐藏其他 div,
5秒间隔后 显示 div 3 并隐藏其他 div,
每 10 秒重复一次。


代码如下:


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

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

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

【问题讨论】:

    标签: javascript jquery css html timeout


    【解决方案1】:

    Working Example 在此处 - 添加 /edit 到 URL 以使用代码

    你只需要使用 JavaScript setInterval 函数

    $('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++;
    
      }
    
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <!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>

    编辑:

    响应您对容器 div 的评论,只需修改此内容

    $('div','#container')
    

    到这里

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

    【讨论】:

    • Russ 感谢您对帖子的快速回复。在您的示例中,它显示我们需要有一个 div 容器,并且我们需要有其他 div .. 但是我的 div 不在容器内部,它是单独的。如何相应地修改代码?
    • 您有权修改 HTML 吗?如果是这样,我建议将 div 包装在容器 div 中以方便选择。如果没有容器 div,则需要修改代码以仅选择那些有问题的 div,即 id 为 1、2 和 3 的 div。我现在将更新我的答案
    • 是有道理的,我可以将它放在容器 div 中以获得更好的清晰度。 Russ 告诉我,我们可以在显示 div1 时显示另一个 div(命名为:div_sub1),然后再显示相同的代码吗?
    • 当然。有很多方法可以解决这种情况,您可以使用 id 上的属性匹配来同时显示 div_sub1 和 div1,您可以将其链接到 div1 的可见性,以列举几个解决方案。
    • 嗨。我无法理解,我可以将初始时间更改为 10 秒吗?我有同样的情况,但我需要在开始时显示 1 个 Div
    【解决方案2】:

    这是对这个问题的另一种看法,使用递归而不使用可变变量。此外,我没有使用setInterval,因此无需进行清理。

    拥有这个 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>
    

    使用 ES2016

    在这里递归调用函数并更新参数。

      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.
    

    【讨论】:

      【解决方案3】:

      试试这个

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

      【讨论】:

        【解决方案4】:

        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>
        

        【讨论】:

          【解决方案5】:

          这是我想出的一个 jQuery 插件:

          $.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);
          }
          

          你需要为你想要循环的所有 div 设置一个通用的类名,像这样使用它:

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

          【讨论】:

            【解决方案6】:

            每 10 秒循环一次 div。

            $(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    
            
            });
            

            【讨论】:

            • 有没有办法将布局更改为,显示 div1 然后显示 div2 并同时显示 div1。那么当 div2 出现时,它会显示 div1 和 div2?
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-11-15
            • 2011-11-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多