如何在多个DIV标签上循环不透明度更改和显示状态

问题描述 投票:3回答:1

我的页面底部有一个栏(功能区)

它有4个<div>标签,从完全不透明开始。它们都是可点击的链接。

还有4个处于同一位置,但有display:none

我需要前4名从opacity:1;opacity:0;以从左到右的步进方式,可能有一个小的时差,比如1秒。

在第4场比赛消失之后,我想以类似的方式用新的4替换他们的位置。不透明度:从左到右分别为0到1约1秒。

他们将在屏幕上停留5秒,循环将重复。时间我可以调整,我只需要了解代码的主要细节。

因此,在每个<div>的不透明度降至0后,显示将变为无。当然,更改回阻止何时循环返回。

原因我认为我需要显示开/关是因为它们占据相同的空间并且是可点击的链接。如果有一个更好的方式我都是耳朵。

fadeloop('#ribbon_box_01_id', 500, 5000, true);
fadeloop('#ribbon_box_02_id', 500, 5500, true);
fadeloop('#ribbon_box_03_id', 500, 6000, true);
fadeloop('#ribbon_box_04_id', 500, 6500, true);

function fadeloop(el, timeout, timein, loop) {
  var $el = $(el),
    intId, fn = function() {
      $el.fadeTo(timeout, 0).fadeTo(timein, 1);
    };
  fn();
  if (loop) {
    intId = setInterval(fn, timeout + timein + 3000);
    return intId;
  }
  return false;
}
.ribbon_flex_wrapper {
  -webkit-box-flex: 0 0 10vh;
  -moz-box-flex: 0 0 10vh;
  width: 100%;
  -webkit-flex: 0 0 10vh;
  -ms-flex: 0 0 10vh;
  flex: 0 0 10vh;
  overflow: hidden;
  float: left;
  display: block;
}

.ribbon_services_body {
  position: relative;
  width: 100%;
  height: 10vh;
  background-color: transparent;
}

.ribbon_services_box {
  position: relative;
  display: inline-block;
  width: 25%;
  height: 100%;
  cursor: pointer;
  opacity: 1;
}

.ribbon_films_box {
  position: relative;
  display: none;
  width: 25%;
  height: 100%;
  cursor: pointer;
  opacity: 1;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="ribbon_flex_wrapper" id="ribbon_flex_wrapper_id">
  <div class="ribbon_services_body">
    <!-----------SERVICES---------------->
    <div class="ribbon_services_box" id="ribbon_box_01_id" onClick="edit();">
      <div class="ribbon_services_box" id="ribbon_box_02_id" onClick="vfx();">
        <div class="ribbon_services_box" id="ribbon_box_03_id" onClick="audio();">
          <div class="ribbon_services_box" id="ribbon_box_04_id" onClick="color();">
            <!-----------OUR FILMS--------------->
            <div class="ribbon_films_box" id="ribbon_box_05_id" onClick="xxx();">
              <div class="ribbon_films_box" id="ribbon_box_06_id" onClick="xxx();">
                <div class="ribbon_films_box" id="ribbon_box_07_id" onClick="xxx();">
                  <div class="ribbon_films_box" id="ribbon_box_01_id" onClick="xxx();">
                  </div>
                </div>

这有一个很好的淡入淡出,但我不知道如何添加显示更改和其他4个标签。这只是我发现的许多起点之一,如果你认为完全不同的东西更好,我会对此持开放态度。

功能区看起来像这样:

enter image description here谢谢

javascript css css3 opacity display
1个回答
0
投票

为了达到你想要的效果,如果我理解它,我会使用简单的css3动画来实现“不透明度”效果。

首先,我将最后4个divs放在前4个z-index下,再次使用一个简单的动画来改变z-index,这样所有的div总是被正确点击(不透明度,隐藏的div仍然会保持在上面)。我会使用z-index作为display属性不能用于动画。

然后你只需要一个简单的jqueryscript将动画类添加到divs

像这样:

$('button').click(function(){
    $(".box4").addClass("fadein");
    timeout = setTimeout(function() {
        $(".box3").addClass("fadein");
        timeout = setTimeout(function() {
            $(".box2").addClass("fadein"); 
            timeout = setTimeout(function() {
                $(".box1").addClass("fadein");
                $(".banner2").addClass("zindex");
                timeout = setTimeout(function() {
                    $(".box5").addClass("fadeout");
                    timeout = setTimeout(function() {
                        $(".box6").addClass("fadeout");
                        timeout = setTimeout(function() {
                            $(".box7").addClass("fadeout");
                            timeout = setTimeout(function() {
                                $(".box8").addClass("fadeout");
                            }, 1000);
                        }, 1000);
                    }, 1000);
                }, 1000);
            }, 1000);
        }, 1000);
    }, 1000);
});
body, div {margin:0; padding:0}
img {display:block;}
.container {
  position:relative;
  height:50px;
  margin-bottom:10px;
}
.box {
  display:inline-block;
  cursor:pointer;
  margin-left:-5px;
}
.banner1, .banner2 {
  position:absolute;
  top:0;
  left:0;
  white-space:nowrap;
  }
.banner1 {
  z-index:5
}
.banner2 {
  z-index:1;
}
.box1, .box2, .box3, .box4 {}
.box5, .box6, .box7, .box8 {opacity:0;}
.fadein {
  animation-name: fadein;
  animation-duration: 1s;
  animation-fill-mode: forwards;
}
.fadeout {
  animation-name: fadeout;
  animation-duration: 1s;
  animation-fill-mode: forwards;
}
.zindex {
  animation-name: zindex ;
  animation-duration: 0.1s;
  animation-fill-mode: forwards;
}
@keyframes fadein {
  0% { opacity:1; }
  100% { opacity:0; }
}
@keyframes fadeout {
  0% { opacity:0; }
  100% { opacity:1; }
}
@keyframes zindex {
  0% {z-index:1; }
  100% {z-index:10; }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="container">
<div class="banner1">
<div class="box box1"><img src="https://t00.deviantart.net/OHnECGm-qAA6y-TCecwbQV9nQlY=/fit-in/150x150/filters:no_upscale():origin()/pre00/203f/th/pre/f/2018/036/c/6/mission_impossible_6_by_queenofnightwish-dc298a8.jpg" alt=""></div>
<div class="box box2"><img src="https://t05.deviantart.net/K9H6kV3KW6NCFUOu9J8bNr6DKGY=/fit-in/150x150/filters:no_upscale():origin()/pre00/b405/th/pre/f/2009/174/0/6/bruce_lee_signature_by_stfx_art.png" alt=""></div>
<div class="box box3"><img src="https://t00.deviantart.net/yQx2SZhR-zq-1zLFnerYPlMVL3U=/fit-in/150x150/filters:no_upscale():origin()/pre00/0519/th/pre/f/2009/123/f/6/gambit_by_modestroad.jpg" alt=""></div>
<div class="box box4"><img src="https://t00.deviantart.net/Ptw-vGWCgr6_q7b54nRrY3EZ7ic=/fit-in/150x150/filters:no_upscale():origin()/pre00/a85b/th/pre/i/2016/217/0/d/shah_rukh_khan_by_rizucreation-dacsd72.jpg" alt=""></div>
</div>
<div class="banner2">
<div class="box box5"><img src="https://image.redbull.com/rbcom/010/2012-05-19/1331574558762_1/0010/1/150/50/1/jenny-rissveds-podium.JPG" alt=""></div>
<div class="box box6"><img src="https://image.redbull.com/rbcom/052/2018-07-05/550b8e50-8419-4b31-90b4-8450ec7f83e8/0012/0/262/0/1329/3200/150/1/f1-2018-max-verstappen.jpg" alt=""></div>
<div class="box box7"><img src="https://image.redbull.com/rbcom/010/2014-05-26/1331654253313_9/0010/1/150/50/1/imagen-de-vi%C3%B1ales-y-salom-en-la-pretemporada.jpg" alt=""></div>
<div class="box box8"><img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTOPaBgzYMm41trhcBkJ0B1-QaQ46EzX6ZQ864lloFBBAYWiqo_tg" alt=""></div>
</div>
</div>
<button>start</button>

顺便说一句,我用一个按钮来触发效果。为丑陋的嵌套超时道歉,没有多少时间来整理它。

© www.soinside.com 2019 - 2024. All rights reserved.