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

IT技术 javascript jquery css html timeout
2021-02-03 02:51:30

我想以特定的时间间隔(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>
6个回答

此处的工作示例- 将/edit添加到 URL 以使用代码

你只需要使用 JavaScriptsetInterval函数

$('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 不在其单独的容器内。如何相应地修改代码?
2021-03-20 02:51:30
你好。我无法理解,我可以将初始时间更改为 10 秒吗?我有同样的情况,但我需要在开始时显示 1 Div
2021-03-20 02:51:30
是的,为了更清晰,我可以将它放在容器 div 中。Russ 告诉我,我们可以在显示 div1 时显示另一个 div(名为:div_sub1),然后再显示相同的代码吗?
2021-03-25 02:51:30
当然。有多种方法可以解决这种情况,您可以在 id 上使用属性匹配以在 div1 的同时显示 div_sub1,您可以将其链接到 div1 的可见性,以命名几个解决方案。
2021-03-31 02:51:30
你有权修改 HTML 吗?如果是这样,我建议将 div 包装在容器 div 中以方便选择。如果没有容器 div,则需要修改代码以仅选择那些有问题的 div,即 ID 为 1、2 和 3 的 div。我现在更新我的答案
2021-04-01 02:51:30

每 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?
2021-03-27 02:51:30

这是我想出的一个 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)

请参阅内部淡入淡出

<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>

这是对这个问题的另一种看法,使用递归而不使用可变变量。此外,我没有使用,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.