之前写过两个懒人轮播,为啥叫懒人轮播呢?因为从轮播图的创建到开始轮播然后切换都是自动完成的,需要做的只是给它指定个位置,向对象init函数中传入些参数(图片长度,宽度,图片数量)即可。有点全自动洗衣机的即视感,不过这样做有一个 缺点,就是dom操作太多,影响了性能。这次不一样了,用animation动画简单实现了个自动轮播,超级轻便呢(前提条件是已知图片张数,但 图片路径未知,就是说可以通过更改图片 路径从而更新页面图片),只是缺点更多了:
①不能切换,因为动画一直在运行,若设置动画暂停就一切都停止了。
②轮播一张图片之间的间隔无法控制。
③修改图片宽高需要修改动画帧移动参数@keyframes。
不过用animation实现一些小型的轮播还是非常棒的,性能极佳。顺便贴下代码和思路:
js代码:
var
demo = (
function(
document,
window) {
// 获取所需元素
var
ele = {
// 轮播所在容器
oWrapper:
document.
querySelector(
".wrapper"),
// 轮播ul
oUl:
document.
querySelector(
".wrapper-ul"),
// 轮播li
aLi:
document.
querySelectorAll(
".wrapper-ul li"),
// 所有图片img标签
aImg:
document.
querySelectorAll(
".wrapper-ul li img"),
}
// 设置轮播wrapper,ul宽高并把图片资源放入li中
function
setPlaying(
wid,
hei,
num,
imgs) {
ele.
oWrapper.
style.
width =
wid +
"px";
ele.
oWrapper.
style.
height =
hei +
"px";
ele.
oUl.
style.
width =
wid*
num +
"px";
ele.
oUl.
style.
height =
hei +
"px";
ele.
aLi.
forEach(
function(
value,
index,
arr) {
value.
style.
width =
wid +
"px";
value.
style.
height =
hei +
"px";
})
// 设置图片属性
ele.
aImg.
forEach(
function(
value,
index,
arr) {
value.
src =
imgs[
index].
url;
value.
alt =
imgs[
index].
alt;
value.
style.
width =
wid +
"px";
value.
style.
height =
hei +
"px";
})
}
var
run = {
// 默认图片宽度
imgW:
500,
// 默认图片高度
imgH:
500,
// 保存图片资源
imgs: [],
num:
ele.
aLi.
length,
init
:
function(
config) {
this.
imgW =
config.
imgW||
this.
imgW;
this.
imgH =
config.
imgH||
this.
imgH;
this.
imgs =
config.
imgs;
//设置wrapper,ul,li宽高
setPlaying(
this.
imgW,
this.
imgH,
this.
num,
this.
imgs);
}
}
return
run;
})(
document,
window);
html代码:
<!DOCTYPE html
>
<
html
lang=
"en"
>
<
head
>
<
meta
charset=
"UTF-8"
>
<
meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
>
<
link
rel=
"stylesheet"
href=
"lunbo.css"
>
<
title
>css3实现轮播
</
title
>
</
head
>
<
body
>
<
div
id=
"container"
>
<
ul
class=
"wrapper-ul"
>
<
li
><
img
src=
""
alt=
""
width=
""
height=
""
></
li
>
<
li
><
img
src=
""
alt=
""
width=
""
height=
""
></
li
>
<
li
><
img
src=
""
alt=
""
width=
""
height=
""
></
li
>
<
li
><
img
src=
""
alt=
""
width=
""
height=
""
></
li
>
<
li
><
img
src=
""
alt=
""
width=
""
height=
""
></
li
>
</
ul
>
</
div
>
</
div
>
<
script
src=
"lunbo.js"
>
<
/
script
>
<
script
>
demo.
init({
imgW:
400,
imgH:
200,
imgs:[
{
url:
"imgs/one.jpg",
alt:
"one",
width:
"300px",
height:
"180px"
},
{
url:
"imgs/two.jpg",
alt:
"two",
width:
"300px",
height:
"180px"
},
{
url:
"imgs/three.jpg",
alt:
"three",
width:
"300px",
height:
"180px"
},
{
url:
"imgs/four.jpg",
alt:
"four",
width:
"300px",
height:
"180px"
},
{
url:
"imgs/five.jpg",
alt:
"five",
width:
"300px",
height:
"180px"
}
]
})
<
/
script
>
</
body
>
</
html
@charset
"utf-8";
/* 样式初始化 */
html,body {
width:
100%;
height:
100%;
}
body ,ul {
margin:
0;
}
ul {
padding:
0;
}
ul {
list-style:
none;
}
/* container-start */
body {
background-color:
rgb(
1,
1,
21);
}
#container {
width:
100%;
height:
100%;
}
.wrapper {
position:
relative;
overflow:
hidden;
margin:
100px
auto;
cursor:
pointer;
}
.wrapper-ul {
position:
absolute;
left:
0;
top:
0;
font-size:
0;
animation: play
12s
infinite;
}
.wrapper-ul li {
display:
inline-block;
}
/*轮播动画 */
@keyframes
play {
0% {
transform:
translate(
0px);
}
20% {
transform:
translate(
-400px);
}
40% {
transform:
translate(
-800px);
}
60% {
transform:
translate(
-1200px);
}
80% {
transform:
translate(
-1600px);
}
100% {
transform:
translate(
0px);
}
}