简介:本博客以最通俗移动的详细代码,告诉用户如何构建轮播图。
第一步:搭建框架
<body> <!-- 整体框架 --> <div class="overall"> <!-- 内容 --> <div class="content"> <!-- 轮播图片 --> <ul> <li><img src="./imgs/1.jpg" alt=""></li> <li><img src="./imgs/2.jpg" alt=""></li> <li><img src="./imgs/3.jpg" alt=""></li> </ul> <!-- 轮播图的点 --> <ol> <li></li> <li></li> <li></li> </ol> </div> </div> </body>
第二步:CSS渲染
<style> /* 设置整体大框架 */ .overall{ /* 设置窗口大小 */ width: 900px; height: 500px; /* 将弹性 <div> 元素的所有项目的居中对齐 */ align-items: center; /* 设置图片外边距 左右居中 上方5% */ margin: 5% auto; } .content{ /* 设置相对定位 */ position: relative; height: 400px; } .content ul{ /* 去除标签<ul><li></li></ul>默认加的样式 */ list-style-type: none; } .content ul>li{ width: 600px; height: 300px; /* 设置绝对定位 */ position: absolute; /* 设置过度效果 时间为1s */ transition: 1s; /* 设置最大透明度 默认一开始图片为透明的 当下面js加载的时候 第一张图片设置为不透明 */ opacity: 0; } /* 设置每个图片的样式 */ .content ul>li img{ /* 设置每一张图片的大小 */ width: 900px; height: 500px; /* 设置圆角边框 */ border-radius: 5%; /* 设置边框样式 */ border: 5px solid #0e0600; } /* 设置轮播图下面的小点 */ .content ol{ /* 设置相对定位 */ position: relative; /* 设置网格布局 */ display: grid; /* 设置网格布局中的列数及宽度 */ grid-template-columns: repeat(3, 75px); /* 设置网格布局中的行数及宽度 */ grid-template-rows: auto; /* 设置网格行与列之间的间隙 */ /* 间隙为1em */ grid-gap: 1em; gap:1em; /* 右浮动 */ float: right; /* 设置浮点的向上的内边距 */ margin-top: 450px; /* 去除列表样式 */ list-style: none; /* 把图像的上边缘设置在其包含元素上边缘之下0px高的位置 */ top: 0; /* 把图像的左边缘设置在其包含元素上边缘之下0px高的位置 */ left: 0; } .content ol li{ /* 设置每个小点的大小 */ width: 25px; height: 10px; /* 设置里面的文字的大小 */ font-size: 15px; /* line-height 属性设置行间的距离(行高) */ line-height: 20px; /* 浮动左对齐 */ float: left; /* 设置文本居中 */ text-align: center; /* 把表格做成圆点 */ border-radius: 2em; /* 设置圆点的边框 */ border: 5px solid #af9d9d; } </style>
第三步:JS逻辑
<script> // 当页面载入的时候加载这个函数 window.onload = function() { // 获取大盒子的内容 为content的第一个元素 也就是ul中的内容 var content = this.document.getElementsByClassName("content")[0]; // 获取ul中的li var li = content.getElementsByTagName("li"); // 函数传入两个参数,(i,j) function fun(i, j) {//转换图片函数,就是把透明度改了一下 li[i].style.opacity=1; li[j].style.opacity=0; // 然后也把小图标的颜色改一下 // 把图标改成白色 // 如果图片数量发生改变 那么下面的3也要变成图片的数量 li[i + 3].style.backgroundColor = "#ffffff"; // 把图标改成透明 li[j + 3].style.backgroundColor = "#00000000"; } // 默认情况下轮播图为第一张 fun(0, 1);//初始化下 var i = 0; function auto() {//轮播循环函数 i ++; // 当数组越界的时候 if(i >= 3) { // 置为0 i = 0; // 然后递归重新开始 // 这里的2位3-1的意思 fun(0, 2); } else { // 反之递归 fun(i, i - 1); } } // 设置变化的时间 timer = this.setInterval(auto, 2000); // 设置鼠标在轮播图上的时候 轮播图就停止播放 content.onmouseover = function () { //鼠标划上去,停止轮播 clearInterval(timer); } // 设置鼠标在轮播图上的时候 轮播图就继续播放 content.onmouseout = function () { //鼠标划出,继续轮播 timer = setInterval(auto, 2000); //调用定时器 } var j = 0; for(; j < 3; j++) { //点击小图标也可以转换图片 li[j + 3].index = j; // 当点击小图标进行的函数 li[j + 3].onclick = function() { fun(this.index, i) i = this.index; } } } </script>
运行结果:
代码汇总
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Apple14介绍</title> <style> /* 设置整体大框架 */ .overall{ /* 设置窗口大小 */ width: 900px; height: 500px; /* 将弹性 <div> 元素的所有项目的居中对齐 */ align-items: center; /* 设置图片外边距 左右居中 上方5% */ margin: 5% auto; } .content{ /* 设置相对定位 */ position: relative; height: 400px; } .content ul{ /* 去除标签<ul><li></li></ul>默认加的样式 */ list-style-type: none; } .content ul>li{ width: 600px; height: 300px; /* 设置绝对定位 */ position: absolute; /* 设置过度效果 时间为1s */ transition: 1s; /* 设置最大透明度 默认一开始图片为透明的 当下面js加载的时候 第一张图片设置为不透明 */ opacity: 0; } /* 设置每个图片的样式 */ .content ul>li img{ /* 设置每一张图片的大小 */ width: 900px; height: 500px; /* 设置圆角边框 */ border-radius: 5%; /* 设置边框样式 */ border: 5px solid #0e0600; } /* 设置轮播图下面的小点 */ .content ol{ /* 设置相对定位 */ position: relative; /* 设置网格布局 */ display: grid; /* 设置网格布局中的列数及宽度 */ grid-template-columns: repeat(3, 75px); /* 设置网格布局中的行数及宽度 */ grid-template-rows: auto; /* 设置网格行与列之间的间隙 */ /* 间隙为1em */ grid-gap: 1em; gap:1em; /* 右浮动 */ float: right; /* 设置浮点的向上的内边距 */ margin-top: 450px; /* 去除列表样式 */ list-style: none; /* 把图像的上边缘设置在其包含元素上边缘之下0px高的位置 */ top: 0; /* 把图像的左边缘设置在其包含元素上边缘之下0px高的位置 */ left: 0; } .content ol li{ /* 设置每个小点的大小 */ width: 25px; height: 10px; /* 设置里面的文字的大小 */ font-size: 15px; /* line-height 属性设置行间的距离(行高) */ line-height: 20px; /* 浮动左对齐 */ float: left; /* 设置文本居中 */ text-align: center; /* 把表格做成圆点 */ border-radius: 2em; /* 设置圆点的边框 */ border: 5px solid #af9d9d; } </style> </head> <body> <!-- 整体框架 --> <div class="overall"> <!-- 内容 --> <div class="content"> <!-- 轮播图片 --> <ul> <li><img src="./imgs/1.jpg" alt=""></li> <li><img src="./imgs/2.jpg" alt=""></li> <li><img src="./imgs/3.jpg" alt=""></li> </ul> <!-- 轮播图的点 --> <ol> <li></li> <li></li> <li></li> </ol> </div> </div> </body> <script> // 当页面载入的时候加载这个函数 window.onload = function() { // 获取大盒子的内容 为content的第一个元素 也就是ul中的内容 var content = this.document.getElementsByClassName("content")[0]; // 获取ul中的li var li = content.getElementsByTagName("li"); // 函数传入两个参数,(i,j) function fun(i, j) {//转换图片函数,就是把透明度改了一下 li[i].style.opacity=1; li[j].style.opacity=0; // 然后也把小图标的颜色改一下 // 把图标改成白色 // 如果图片数量发生改变 那么下面的3也要变成图片的数量 li[i + 3].style.backgroundColor = "#ffffff"; // 把图标改成透明 li[j + 3].style.backgroundColor = "#00000000"; } // 默认情况下轮播图为第一张 fun(0, 1);//初始化下 var i = 0; function auto() {//轮播循环函数 i ++; // 当数组越界的时候 if(i >= 3) { // 置为0 i = 0; // 然后递归重新开始 // 这里的2位3-1的意思 fun(0, 2); } else { // 反之递归 fun(i, i - 1); } } // 设置变化的时间 timer = this.setInterval(auto, 2000); // 设置鼠标在轮播图上的时候 轮播图就停止播放 content.onmouseover = function () { //鼠标划上去,停止轮播 clearInterval(timer); } // 设置鼠标在轮播图上的时候 轮播图就继续播放 content.onmouseout = function () { //鼠标划出,继续轮播 timer = setInterval(auto, 2000); //调用定时器 } var j = 0; for(; j < 3; j++) { //点击小图标也可以转换图片 li[j + 3].index = j; // 当点击小图标进行的函数 li[j + 3].onclick = function() { fun(this.index, i) i = this.index; } } } </script> </html>