结构
<body><!-- 外层容器 --><div id="outer"><!-- 图片列表 --><ul id="img-list"><li><img src="./imgs/1.jpg" alt=""></li><li><img src="./imgs/2.jpg" alt=""></li><li><img src="./imgs/3.jpg" alt=""></li><li><img src="./imgs/4.jpg" alt=""></li><li><img src="./imgs/5.jpg" alt=""></li><li><img src="./imgs/6.jpg" alt=""></li><!-- 为了保证效果,在最后一张图片后添加 第一张图片 --><li><img src="./imgs/1.jpg" alt=""></li></ul></div></body>
- 依次放入图片即可,需要包一个外层容器 outer
- 在最后一张图片后,添加第一张图片,保证轮播时平滑。
样式
<style>/* 样式重置 */* {padding: 0;margin: 0;}li {list-style: none;}/*外层容器样式overflow: hidden; 裁剪多余的图片position: relative; 开启相对定位*/#outer {width: 220px;height: 200px;margin: 0 auto;padding: 10px 0;background-color: wheat;overflow: hidden;position: relative;}/*图片大小为 200 * 200,开启浮动后,显示单张图片开启绝对定位,通过修改 left 实现轮播*/#img-list {height: 200px;position: absolute;left: 0;}/* 开启浮动,横向布局 */#img-list li {float: left;margin: 0 10px;}/* 图片默认为 baseline 对其,修改使其无间隔 */#img-list li img {vertical-align: bottom;}</style>
- 首先进行样式重置
- 外层容器的大小刚好是一张图片的大小。也可以加上少许padding进行区分
overflow: hidden;,设置多余内容进行裁剪,显示第一张图片给每个
img外层的li开启浮动,进行横向布局。开启绝对定位(用于修改left的值进行轮播)交互
<script>window.onload = function () {// 灵活设置 img-list 的宽度(图片数量不固定)var imgs = document.getElementById("img-list");var count = imgs.querySelectorAll("li img").length;imgs.style.width = 220 * count + "px";// 起始索引var index = 0;// 轮播autoPlay();// 自动播放:就是一个定时器,其中需要改变 index + 照片移动function autoPlay() {setInterval(function () {index++;index %= count;move(imgs, "left", index * -220, 10);}, 2000)};// 要执行动画的对象、要变化的属性、终止条件、变化速度function move(obj, attr, end, speed) {// 清除上一个定时器clearInterval(obj.timer);// 获取属性当前值var cur = parseInt(getComputedStyle(obj)[attr]);// 判断变化的方向。if (cur > end) {speed = -speed;}// 设置定时器,比如功能从 0 --> -220,每次变化 10obj.timer = setInterval(() => {var oldV = getComputedStyle(obj)[attr];var newV = parseInt(oldV) + speed;if ((newV > end && speed > 0) || (newV < end && speed < 0)) {newV = end;// 防止 end = 190,newV = 180 + 20 > 190 类似情况}obj.style[attr] = newV + 'px';// 结束,关闭定时器if (newV === end) {clearInterval(obj.timer);// 结束后,如果是最后一张。状态重置,重新改变 leftif (index >= count - 1) {index = 0;imgs.style.left = 0;}}}, 30)}}</script>
ul的宽度进行动态设置(图片数量不确定)- 定义
index表示图片的下标索引 autoPlay定义自动播放,即一个定时器,定时执行的内容包括:改变index值,改变 left 的值(通过move 函数)move函数:参数列表,需要执行变化的的对象,要变化的属性,终止条件,变化的速度- 在此例中,依次为
ul,left,-220, -440...(图片对应left为[0,-220,-440…]),10
- 在此例中,依次为
