轮播图的实现

简介: 轮播图的实现

简介:本博客以最通俗移动的详细代码,告诉用户如何构建轮播图

第一步:搭建框架

<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>


相关文章
|
消息中间件 缓存 NoSQL
谈谈高并发系统的设计方法论
设计 `高并发` 系统,就是要让该系统保证它 `整体可用` 的同时,能够尽可能多的 `处理很高的并发用户请求`,能够 `承受很大的负载流量冲击`。
1405 6
|
网络协议 算法 网络虚拟化
【HCIP】03.VLAN高级技术(一)
【HCIP】03.VLAN高级技术
322 0
|
7月前
|
编解码 Linux iOS开发
Shotcut 25.03 (Linux, macOS, Windows) - 免费开源视频编辑器
Shotcut 25.03 (Linux, macOS, Windows) - 免费开源视频编辑器
412 11
|
iOS开发 MacOS Perl
解决Xcode运行IOS报错:redefinition of module ‘Firebase‘和could not build module ‘CoreFoundation‘
解决Xcode运行IOS报错:redefinition of module ‘Firebase‘和could not build module ‘CoreFoundation‘
764 4
|
9月前
|
人工智能 自然语言处理 安全
2025最新排名|盘点值得推荐的5个在线客服系统
在数字化浪潮下,在线客服系统迅速发展,成为企业提升竞争力的关键。本文推荐五款2025年值得使用的在线客服系统:合力亿捷、淘宝、京东、华为云和中国移动客服系统。它们各自具备全渠道接入、智能问答、数据分析、高稳定性等亮点,助力企业高效服务客户,优化营销策略并提升整体运营效率。
1163 24
六自由度Stewart平台的matlab模拟与仿真
**摘要** 探索MATLAB2022a模拟6-DOF Stewart平台,模拟动态变化及伺服角度。平台实现XYZ平移及绕XYZ轴旋转。结构含中心动平台、固定基座及6个伺服驱动的伸缩连杆。运动学原理涉及球铰/虎克铰的转动自由度。通过动力学分析解决输入力矩到平台加速度的转换。核心算法与模型揭示了平台的精密定位能力。仿真结果显示动态性能。
|
TensorFlow 算法框架/工具 Python
【Tensorflow 2】解决'Tensor' object has no attribute 'numpy'
解决'Tensor' object has no attribute 'numpy'
337 3
|
存储 SQL 关系型数据库
binlog、redolog和undolog三者有何区别?
MySQL中的binlog、redo log和undo log是日志文件,各有特定作用。binlog用于数据备份、恢复和复制,适用于所有存储引擎。redo log记录事务修改,用于崩溃恢复和数据持久性,仅InnoDB存储引擎支持。undo log保存事务修改前的状态,用于事务回滚和MVCC,也仅InnoDB支持。它们在功能和记录内容上有明显区别,有助于事务管理和数据库一致性。
909 0
|
Python
使用Python计算有效值函数(RMS值)
使用Python计算有效值函数(RMS值)
1212 0
|
存储 缓存 JavaScript
深入浅出理解libevent——2万字总结
深入浅出理解libevent——2万字总结
1030 0