轮播图

效果图

轮播图的功能要求

  • 每次只显示一张图片
  • 轮播图需要实现左右无缝切换
  • 需要实现跳转(放在圆点显示对应图片)
  • 当前图片的小圆点样式需要突出
  • 当鼠标放在图片上时,轮播停止
  • 在切换图片时鼠标放在图片上,取消轮播效果,切换到对应图片。

结构图

img_list 是不可见的,通过 img_list 实现图像列表的设置


HTML && CSS

HTML

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>轮播图</title>
        <link href="css\index.css" rel="stylesheet" type="text/css"/>
    </head>

    <body>
        <div class="banner">
            <ul id="img_list">
                <li><img src="images\1_1.png"></li>
                <li><img src="images\2_1.png"></li>
                <li><img src="images\3_1.png"></li>
                <li><img src="images\4_1.png"></li>
                <li><img src="images\5_1.png"></li>
                <li><img src="images\1_1.png"></li>
            </ul>
            <ul id="icon_list">
                <li>1</li>
                <li>2</li>
                <li>3</li>
                <li>4</li>
                <li>5</li>
            </ul>
        </div>
        <script src="js\index.js" type="text/javascript"></script>
    </body>
</html>

CSS

*{
    margin: 10px auto;
    padding: 0;
    list-style: none;       /*消除 li 前面的小点*/
    text-decoration: none;  /*默认,没有装饰线*/
}

body{
    background: rgb(252, 244, 231);
}


/* 设置图片大小 */

img{
    width: 960px;
    height: 540px;
}

.banner
{
    width: 960px;
    height: 540px;
    overflow: hidden;  /*隐藏溢出内容且不出现滚动条*/
    position: relative;
}

#img_list
{
    width: 6720px;  /*有x张图,就需要有x+2张图的宽度,否则轮播会失败*/
    height: 540px;
}

#img_list li
{
    float: left;
}

#icon_list
{
    position: absolute;
    right: 20px;
    bottom: 20px;
    list-style: none;
}

#icon_list li
{
    color: #E69800;
    float: left;
    height: 50px;
    width: 50px;
    border: 5px solid cadetblue;
    border-radius: 55%;
    line-height: 50px;
    text-align: center;
    margin-right: 15px;
    cursor: pointer;
}

JS实现轮播

左右无切换

var imgs = document.getElementById('img_list').getElementsByTagName('li'); //图片集合
var icons = document.getElementById('icon_list').getElementsByTagName('li');  //下标集合
var Left = 0;     //左移距离,初始默认为 0px(图像向左滑动)
var timer;          //设置定时器
run();

//运行函数(轮播函数)
function run() {
    //图片切换到最后时,重新归零。
    //每一张图片为 960px, 有 5 张图片,则最左移动的距离为 5*960=4800px
    if (Left <= -4800) {
        img_list.style.marginLeft = "0px";
        Left = 0;
    }
    //用n表示图片切换和停留的时间,如果刚好显示,停2000,否则以10的速度切换
    var n = (Left % 960 == 0 ? 2000 : 10);
    changeimg();       
    m = Math.floor(-Left / 960);
    changeicon(m);
    Left -= 10;
    //重复执行run方法。实现一直轮播。
    timer = setTimeout(run, n);
}

//切换图片的方法
function changeimg() {
    img_list.style.marginLeft = Left + "px";
}

实现跳转

//切换图片的方法
function changeimg() {

    img_list.style.marginLeft = Left + "px";
}

//切换图标的方法
function changeicon(m) {

    for (var i = 0; i < icons.length; i++) {
        //初始不设置颜色
        icons[i].style.backgroundColor = "";
    }
    //再根据m的值判断切换到第几个图标
    icons[m].style.backgroundColor = "red";
}

鼠标跳转与停播

for (var i = 0; i < imgs.length; i++) {

    (function(i) {
        imgs[i].onmousemove = function() {
            clearTimeout(timer);//停止轮播
            Left = -i * 960;//使距离为完全显示图片的距离(以防在切换时放上去卡两张图片中间)
            changeimg();//使用更改的Left去切换图片
            changeicon(i);//切换对应图标
        }
        imgs[i].onmouseout = function() {
            run();
        }
    })(i);
}

for (var i = 0; i < icons.length; i++) {

    (function(i) {
        icons[i].onmousemove = function() {
            clearTimeout(timer);
            Left = -i * 960;
            changeimg();
            changeicon(i);
        }
        icons[i].onmouseout = function() {
            run();
        }
    })(i);
}

实际工程

轮播图

分类: 杂项集

1 条评论

tr · 2021年12月4日 23:39

真棒

发表评论

Avatar placeholder

邮箱地址不会被公开。 必填项已用*标注