轮播图的切换之间有短暂白色间隔

HTML:
<!DOCTYPE html>
<html lang="en">
<head>

<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript" src="../csstexting/jquery-3.2.1.min.js" ></script>
<script type="text/javascript" src="../csstexting/css.js"></script>
<link rel="stylesheet" type="text/css" href="../csstexting/css.css">

</head>
<body>

<header class="head" style="height: 30px;background: #FFE4C4;
width: 100%"></header>
<div class="wrap">
    <div class="wrap_div">
           <div class="wrap_div_one"></div>
           <div class="wrap_div_two"></div>
           <div class="wrap_div_three"></div>
           <div class="wrap_div_four"></div>
    </div>
</div>

</body>
</html>
css:
*{

padding: 0;
margin: 0;
list-style: none;

}
.wrap{

position: relative;
width: 500px;
height: 500px;
margin: 10px auto;
overflow: hidden;

}
.wrap_div{

position: absolute;
left: 0px;
width: 2000px;
height: 500px;

}
.wrap_div div{

float: left;
width: 500px;
height: 500px;
position: relative;
transition: opacity 500ms ease-in-out;
opacity: 0.1;
z-index: 0

}
.wrap_div_one{

background: url(https://m.360buyimg.com/babel/jfs/t13342/35/2396024346/99047/e45736fb/5a56bf6eN8cc15233.jpg)no-repeat;
background-size: 500px 500px;
opacity: 1!important;
z-index: 1!important;

}
.wrap_div_two{

background: url(https://m.360buyimg.com/babel/jfs/t16165/207/1607854073/57122/3438f9c5/5a5ece4fN9efbf994.jpg)no-repeat;
background-size: 500px 500px;

}
.wrap_div_three{

background: url(https://img1.360buyimg.com/da/jfs/t17290/105/25936701/79615/ceb9025a/5a5830edNb29eb37c.jpg)no-repeat;
background-size: 500px 500px;

}
.wrap_div_four{

background: url(https://m.360buyimg.com/babel/jfs/t13342/35/2396024346/99047/e45736fb/5a56bf6eN8cc15233.jpg)no-repeat;
background-size: 500px 500px;

}
js:
$(document).ready(function(){

var val = 0;
var timer;
function move(){
    $('.wrap_div div').css({opacity:0,zIndex:0});
    
    val++;
      
      if(val > 3){
          val = 1;
          $('.wrap_div').css({left : 0});
      }
    $('.wrap_div div').eq(val).css({opacity:1,zIndex:1});

    $('.wrap_div').css({left : val*500*-1});

    timer = setTimeout(move,6000)
}
setTimeout(move,3000)

})

这是我写的一个简单的仿照京东主页上面的轮播图。请问为什么轮播图切换之间会先变白。然后再切换 请问怎么解决这个问题!谢谢!

更改后:
$(document).ready(function(){


var val = 0;
var timer;
function move(){
    $('.wrap_div div').css({opacity:0,zIndex:0});
    
    val++;
      
      if(val > 3){
          val = 1;
          $('.wrap_div').css({left : 0});
      }
    $('.wrap_div div').eq(val).css({opacity:1,zIndex:1});

    // $('.wrap_div').css({left : val*500*-1});

    timer = setTimeout(move,6000)
}
setTimeout(move,3000)

})


    css:

.wrap{

width: 500px;
height: 500px;
margin: 10px auto;
overflow: hidden;

}
.wrap_div{

left: 0px;
width: 2000px;
height: 500px;

}
.wrap_div div{

float: left;
width: 500px;
height: 500px;
position: relative;
transition: opacity 500ms ease-in-out;

}
.wrap_div_one{

background: url(https://m.360buyimg.com/babel/jfs/t13342/35/2396024346/99047/e45736fb/5a56bf6eN8cc15233.jpg)no-repeat;
background-size: 500px 500px;
left: 0;
opacity: 1;
z-index: 1

}
.wrap_div_two{

background: url(https://m.360buyimg.com/babel/jfs/t16165/207/1607854073/57122/3438f9c5/5a5ece4fN9efbf994.jpg)no-repeat;
background-size: 500px 500px;
left: -500px;

}
.wrap_div_three{

background: url(https://img1.360buyimg.com/da/jfs/t17290/105/25936701/79615/ceb9025a/5a5830edNb29eb37c.jpg)no-repeat;
background-size: 500px 500px;
left: -1000px;

}
.wrap_div_four{

background: url(https://m.360buyimg.com/babel/jfs/t13342/35/2396024346/99047/e45736fb/5a56bf6eN8cc15233.jpg)no-repeat;
background-size: 500px 500px;
left: -1500px;

}
代码我稍微更改了下。现在没有空白了。可是一开始第一张图切换到第二张图的时候没有过度了。之后才有过度。。这个是哪里出了问题。。

阅读 4.7k
3 个回答

因为你在切换下一张图片的时候,第一张直接超出显示区域,而这时第二张opacity要从0变成1,所以会有空白期。刚才看了下京东,京东上的每一张图片都是有left的,也就是在第二张图显示的时候第一张是停留在原地的。

你原来的第一张图切换无缓冲,应该与 第一次需要隐藏全部图片有关系,因为后面只要隐藏当前的那张就可以了,所以要么,
第一张图就直接不切换

  .wrap_div_one {
/*opacity: 0;
        z-index: 1; 这两个注释掉*/
    }
    
 $(document).ready(function() {
     var val = -1;//改成 -1

要么,一开始就全部隐藏,只留第一张,就是这样:

    .wrap_div div {

        float: left;
        width: 500px;
        height: 500px;
        position: relative;
        transition: opacity 500ms ease-in-out;
        opacity: 0;/*新加*/
    }

    .wrap_div .wrap_div_one {/*类名修改*/

        background: url(https://m.360buyimg.com/babel/jfs/t13342/35/2396024346/99047/e45736fb/5a56bf6eN8cc15233.jpg)no-repeat;
        background-size: 500px 500px;
        left: 0;
        opacity: 1;
        z-index: 1
    }

(注意你的CSS写的有问题,.wrap_div div 的优先级高于 .wrap_div_one,即使后者写在后面,如果想要后者优先级高,覆盖前者,要 .wrap_div .wrap_div_one,css样式的权重优先级你需要去搞清楚下)

测试用一下1111

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题