一.纯CSS实现图片轮播
1)实现原理:
- 定义两个嵌套的盒子,父盒子的overflow属性需要设置成hidden;
- 子盒子水平排列一组图片,图片设置成固定宽高,图片和父盒子的宽高一致;
- 给子盒子中加动画属性,指定动画时间、执行动画的函数、是否无限循环等参数;
- 用@keyframes实现动画函数,通过逐步改变一个CSS样式到另一个样式,通过百分数控制过程;
2)代码示例:
<div id="div1">
<div id="showImg">
<img src="img/video.png" width="1270px" height="390px"/>
<img src="img/1.jpg" width="1270px" height="390px"/>
<img src="img/2.jpg" width="1270px" height="390px"/>
<img src="img/3.jpg" width="1270px" height="390px"/>
<img src="img/4.jpg" width="1270px" height="390px"/>
</div>
</div>
#div1{
width:1270px;//此处宽高必须和图片一致
height:390px;
overflow: hidden;
}
#showImg{
height: 390px;
width:9999px;
animation: 8s lunbo infinite;//设置动画时间周期,动画执行函数,无限轮播
}
#showImg img{
float:left;//使图片水平排列
}
@keyframes lunbo{
0%{}
20%{transform: translateX(0px);}
25%{transform: translateX(-1270px);}//为了加快图片的过渡,5%的动画执行时间
40%{transform: translateX(-1270px);}
45%{transform: translateX(-2540px);}
60%{transform: translateX(-2540px);}
65%{transform: translateX(-3810px);}
80%{transform: translateX(-3810px);}
85%{transform: translateX(-5080px);}
100%{transform: translateX(-5080px);}
}
二.JS+CSS实现图片轮播带索引
1)实现原理:
- 仍然定义两个盒子,父盒子设置overflow设置为hidden,position设置为relative;
- 图片水平排列在子盒子中,子盒子设置position为absolute,left初始为0px,后期通过改变left值实现图片轮播,每次改变一张图片的宽度;
- 通过JS定时器控制图片自动轮播,定时器按照设定的周期调用方法,改变left值的同时改变索引,为当前图片的索引加效果以区分其他索引;
- 当鼠标点击某一索引时,停止定时器并跳到索引指定的图片,当鼠标移到图片上时暂停定时器。
2)代码示例:
<div id="div1">
<div id="showImg">
<img src="img/video.png" width="1270px" height="390px"/>
<img src="img/1.jpg" width="1270px" height="390px"/>
<img src="img/2.jpg" width="1270px" height="390px"/>
<img src="img/3.jpg" width="1270px" height="390px"/>
<img src="img/4.jpg" width="1270px" height="390px"/>
</div>
<ul>
<li class="selectedImg">1</li>//默认是第一张图片的索引
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
</div>
#div1{
width:96%;
height:390px;
margin: 1% 2%;
overflow: hidden;//超出边框部分隐藏
position: relative;
}
#showImg{
position:absolute;
height: 390px;
width:9999px;
left:0px;
}
#showImg img{
float:left;
}
#div1 ul{
position:absolute;
bottom:15px;
right:90px;
}
#div1 ul li{
background-color:black;
color:white;
list-style-type:none;
width:25px;
height:25px;
float:left;
font-size: 20px;
text-align:center;
cursor:pointer;//鼠标移动变手指状态
margin-left:5px;
}
#div1 ul li.selectedImg{
background: orange;//给当前图片的索引加背景颜色以示区分
}
var index = 0;
var timer = null;
function autoplay() {
timer = setInterval(function() {
$("#showImg").animate({left:-1270 * index}, 0);//left值每次改变一张图片的宽度
$("#div1 ul li").eq(index).addClass("selectedImg").siblings().removeClass("selectedImg");//给当前索引加class
index++;
index >= 5 && (index = 0);//当index>=5为假不执行index=0
}, 2000);
}
autoplay();
$("#div1").mouseover(function() {
clearInterval(timer);//当鼠标移到图片上暂停轮播
})
$("#div1").mouseleave(function() {
autoplay();//鼠标移开继续轮播
})
$(document).on("click","#div1 ul li",function(){//点击索引跳到特定图片
index = $(this).index();
$("#showImg").stop().animate({left:-1270 * index}, 10);
$(this).addClass("selectedImg").siblings().removeClass("selectedImg");
})