前端轮播图的制作(详细附带解析,直接粘贴即可使用)

一、效果图

①当鼠标移上去到图片时候图片不动

②点击下面的数字会切换

③点击左右两边的按钮会切换

二、代码实现

html代码如下:

  <div class="lunBo">
        <ul id="imgList">
            //图片路径是相对路径,页数可以随意,页数不同图片css那边代码值要变化
            //这边需要注意的是,如果展示五张图片,这边要写六个li,首尾li是一样的
            <li><img src="../images/image1.png"></li>
            <li><img src="../images/image2.png"></li>
            <li><img src="../images/image3.png"></li>
            <li><img src="../images/image4.png"></li>
            <li><img src="../images/image5.png"></li>
            <li><img src="../images/image1.png"></li>
        </ul>
        <ul id="icolist">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
        </ul>
        <div class="next">&gt;</div>
        <div class="prev">&lt;</div>
    </div>

css代码如下:

/*设置轮播图的整体样式*/
*{
    margin: 0;
    padding: 0;
    text-decoration: none;
    list-style: none;/*去掉默认的样式*/
}
/*设置轮播图的整体样式和位置*/
.lunBo{
    margin: auto;
    top: 20px;
    left: 0;
    right: 0;
    bottom: 0;
    width: 800px;/*宽*/
    height: 350px;/*高*/
    overflow: hidden;/*隐藏浮动*/
    position: relative;
}
/*设置轮播图的大小*/
#imgList{
    /*设置总的大小,下面的每一张图片是800像素,一共要有六张,所以4800*/
    width: 4800px;/*宽*/
    height: 350px;/*高*/
}
/*设置轮播图各个图片的大小样式*/
#imgList img{
    width: 800px;/*宽*/
    height: 350px;/*高*/

}
/*设置每个图片左浮动*/
#imgList li{
    float: left;/*左浮动*/
}

#icolist{
    /*设置相对位置*/
    position: absolute;
    right: 10px;
    bottom:10px;
}
#icolist li{
    width: 30px;/*宽*/
    height: 30px;/*高*/
    border-radius: 50%;
    background: #666;/*背景颜色*/
    text-align: center;
    line-height: 30px;
    color: #fff;/*字体颜色*/
    float: left;/*左浮动*/
    margin-left: 5px;
    cursor: pointer;
    opacity: 0.7;

}
#icolist li:hover{
    background-color: black;
}
/*设置上一页按钮的样式*/
.prev{
    background: #666;/*背景颜色*/
    width: 40px;/*宽*/
    height: 40px;/*高*/
    color: #fff;/*字体颜色*/
    text-align: center;/*字体居中*/
    line-height: 40px;/*行高*/
    position: absolute;/*绝对位置*/
    left: 5px;
    top: 45%;
    /*鼠标移动过去变为手指效果*/
    cursor: pointer;
    border-radius: 50%;
    opacity: 0.7;/*设置透明度*/
}
.prev:hover{
    background: black;/*当鼠标移到按钮时变色*/
}
.next{
    background: #666;/*背景颜色*/
    width: 40px;/*宽*/
    height: 40px;/*高*/
    color: #fff;/*字体颜色*/
    text-align: center;/*字体居中*/
    line-height: 40px;/*行高*/
    position: absolute;/*绝对位置*/
    right: 5px;
    top: 45%;
    /*鼠标移动过去变为手指效果*/
    cursor: pointer;
    border-radius: 50%;
    opacity: 0.7;/*设置透明度*/
}
.next:hover{
    background: black;/*当鼠标移到按钮时变色*/
}

js代码:

var left = 0;
// 设置时间
var timer;
// 获取按钮
var eprev = document.querySelector('.prev');
var enext = document.querySelector('.next');
// 获取列表
var esico = document.getElementById('icolist').getElementsByTagName('li');
var eicolist = document.querySelector('#icolist');
var eimgList = document.querySelector('#imgList');
// 执行函数
run();

function run() {
    // 我们一共要展示五张图,每张800,所以为5*800 = 4000
    // 如果小于4000则就设置为0,从新到第一张图
    if (left < -4000) {
        left = 0;
    }
    // 向下取整
    var m = Math.floor(-left / 800);
    imgList.style.marginLeft = left + 'px';
    // 判断是否达到一个完整的图片,如果没有则就以10ms速度移动,如果播放到一张完整的则停留三秒
    var n = (left % 800 == 0) ? n = 3000 : n = 10;
    // 不断-10
    left -= 10;
    // 设置时间
    timer = setTimeout(run, n);
    // 调用改变图片
    icochange(m);
}
function imgChange(n) {
    // 改变图片位置
    let lt = -(n * 800);
    imgList.style.marginLeft = lt + 'px';
    left = lt;
}

eprev.onclick = function () {
    // "<"">"按钮,上一张图
    let prevgo = Math.floor(-left / 800) - 1;//向下取整-1
    // 判断是不是第一张,按下去如果等于-1则说明要到最后一张
    if (prevgo == -1) {
        prevgo = 4;
    }
    // 将值传过去改变图片
    imgChange(prevgo);
}
enext.onclick = function () {
    // "<"">"按钮,下一张图
    let nextgo = Math.floor(-left / 800) + 1;//向下取整+1
    // 判断是不是最后一张,按下去如果等于5则说明要到第一张
    if (nextgo == 5) {
        nextgo = 0;
    }
    // 将值传过去改变图片
    imgChange(nextgo);
}

function icochange(m) {
    // 到哪个下标哪个下表变颜色
    for (let index = 0; index < esico.length; index++) {
        esico[index].style.background = '';
    }
    if (m <= esico.length) {
        esico[m].style.background= 'blue';
    }
}
// 点击下表12345来改变图片
eicolist.onclick = function () {
    var tg = event.target;
    let ico = tg.innerHTML - 1;
    imgChange(ico);
    icochange(ico);
}
eimgList.onmouseover = function () {
    // 当鼠标移上去图不动
    clearTimeout(timer);
}
eimgList.onmouseout = function () {
    // 当鼠标移开图片改动
    run();
}

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值