使用 jQuery 在特定时间间隔显示和隐藏 div

Posted

技术标签:

【中文标题】使用 jQuery 在特定时间间隔显示和隐藏 div【英文标题】:Show and hide divs at a specific time interval using jQuery 【发布时间】: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>

【问题讨论】:

【参考方案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"  />
        </a>
    </li>
    <li>
        <a href="http://medienfreunde.com/deutsch/referenzen/kreation/whizzkids.html">
        <img src="images/whizzkids.gif"  />
        </a>
    </li>
    <li>
        <a href="http://medienfreunde.com/deutsch/referenzen/printdesign/koenigin_mutter.html">
        <img src="images/km.jpg"  />
        </a>
    </li>
    <li>
        <a href="http://medienfreunde.com/deutsch/referenzen/webdesign/rt_reprotechnik_-_hybride_archivierung.html">
        <img src="images/rt_arch.jpg"  />
        </a>
    </li>
    <li>
        <a href="http://medienfreunde.com/deutsch/referenzen/kommunikation/tuev_sued_gruppe.html">
        <img src="images/tuev.jpg"  />
        </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?

以上是关于使用 jQuery 在特定时间间隔显示和隐藏 div的主要内容,如果未能解决你的问题,请参考以下文章

是否有一个 jQuery 函数可以让我显示和隐藏特定的 div?

jQuery:动画隐藏字母随机但间隔相等

jQuery 效果 - 隐藏和显示

基于特定值来推断隐藏显示元素的jQuery插件

jQuery隐藏前12个元素,显示接下来的12个元素

使用 DataTables 插件隐藏特定行?