使用原生JS实现轮播图,下面先看看成品;
实现的效果
- 图片自动滑动切换,鼠标移动到图片上则停止切换;
- 鼠标移动到圆点时切换到相应的图片;
- 点击箭头切换到下一张图片;
- 鼠标离开图片,则隐藏箭头;
- 默认是3张图片,需要更多图片时,只需追加
<img>
标签;
实现逻辑
将图片连接成条形,像胶卷一样,给个图片大小的窗口,左右移动图片条,完成切换;
实现代码
HTML
基本的HTML框架
1 |
|
CSS
使用绝对定位对各个元素布局。
1 | /*定义图片大小与默认图片数*/ |
JS
核心步骤:
- 获取图片个数。
- 添加圆点。
- 设置“图片条”长度。
- 添加圆点、箭头的鼠标与点击事件;
- 设置图片轮播定时器;
1 | //获得html组件 |
遇到的bug
- 第二张图片显示不完整,而且左边有白边,而第三张图片不显示。
在浏览器中检查发现两张图片之间有缝隙,导致第三张图片被强行换行,看起来第三张图片位置空白;尝试设置bored、margin、padding为0,并没有效果。看看HTML,看起来没什么问题;
解决办法:将<img>
标签间的回车去掉,写成一行;或者将图片设置为左浮动,style="display:block; float:left"
;
原因:<img>
标签是行内元素,默认排版为 inline-block;而所有的inline-block元素之间都会有空白。
- 在获取css文件中设置的图片宽高时,“获取”不到值;
使用document.documentElement.style.getPropertyValue("--imageWidth");
得到的值为空;
解决办法:改用getComputedStyle(document.documentElement).getPropertyValue("--imageWidth");
才能拿到:root
选择器中设置的值;
原因:
document.documentElement.style.getPropertyValue
只能获取内联式样的值;
而getComputedStyle(document.documentElement).getPropertyValue
获取到的始终是实际的值;
注意事项
轮播图默认大小为800*240,图片大小一致时无需修改任何css、js;使用自定义大小的图片时需要修改css文件中:root
中--imageWidth
、--imageHeight
的值;