js实现轮播图功能

代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>路人女主无缝轮播图片</title>
</head>

<body>
    <div class="box" id="box">
        <ul>
            <li><img src="images/xia1.png"></li>
            <li><img src="images/xia2.png"></li>
            <li><img src="images/xia3.png"></li>
            <li><img src="images/xia4.png"></li>
            <li><img src="images/xia5.png"></li>
            <li><img src="images/xia6.png"></li>
            <li><img src="images/xia7.png"></li>
            <li><img src="images/xia8.png"></li>
        </ul>
        <ol>
        </ol>
    </div>
    <div class="content">
        <p>1.鼠标离开图片开始自动轮播,鼠标放在图片上停止自动轮播。</p>
        <p>2.通过小圆圈可以控制要显示的图片</p>
    </div>
</body>

</html>

<style type="text/css">
* {
    margin: 0;
    padding: 0;
}

.box {
    width: 1280px;
    height: 720px;
    margin: 50px auto;
    position: relative;
    overflow: hidden;
}

.box ul {
    width: 900%;
    position: absolute;
    top: 0;
    left: 0;
}

.box li {
    list-style: none;
    vertical-align: top;
    float: left;
}

.box ol {
    list-style: none;
    position: absolute;
    bottom: 10px;
    left: 50%;
    margin-left: 0;
}

.box ol li {
    width: 30px;
    height: 30px;
    border: 1px solid #ccc;
    border-radius: 50%;
    background-color: #fff;
    line-height: 30px;
    text-align: center;
    margin-left: 10px;
    cursor: pointer;
}

.box ol li.current {
    background-color: #ff0;
}
.content {
    width: 1280px;
    margin: 0 auto;
    text-align: center;
}
</style>
<script type="text/javascript">
window.onload = function() {
    var box = document.getElementById("box");
    var ul = box.children[0];
    var ol = box.children[1];
    var ulLis = ul.children;
    //1.封装 轮播函数
    function animate(obj, target) { // 第一个参数 要运动的盒子 第二个参数 要位移的距离
        clearInterval(obj.timer); //运行计时器 先停止计时器
        var speed = obj.offsetLeft > target ? -1280 : 1280; //计算 步长 与 位移方向
        obj.timer = setInterval(function() { // obj.timer 为全局变量
            if (obj.offsetLeft == target) {
                clearInterval(obj.timer);
            } else {
                obj.style.left = obj.offsetLeft + speed + "px";
            }
        }, 30)
    }
    //封装 轮播函数

    //2.复制第一张图做无缝轮播 克隆节点 lis[0].cloneNode(true);  true 深克隆
    ul.appendChild(ulLis[0].cloneNode(true)); // 向父节点追加子节点 复制完成
    //3.动态生成ol里的li
    for (i = 0; i < ulLis.length-1; i++) {   //利用for循环来添加li 因为之前克隆了一个节点 所以长度减一
        var li = document.createElement("li");  //创建节点 li
        li.innerHTML = i + 1;                  //创建节点li 的内容
        ol.appendChild(li);                    // ol 插入 li
    }
    ol.style.marginLeft = -ol.offsetWidth/2 + "px";  //ol动态居中
    //4.ol li的动画部分
    var olLis = ol.children;
    olLis[0].className = "current";       
    for (var i = 0; i < olLis.length; i++) {
        olLis[i].index = i;    // 赋予索引号
        olLis[i].onmouseover = function () {    
            for (var j = 0; j < olLis.length; j++) {  //清除所以li的class
                olLis[j].className = "";
            }
            this.className = "current";  //利用this 修改调用函数的li的类名
            animate(ul,-this.index*box.offsetWidth);//利用this.index调用索引号
            key = square = this.index; //鼠标经过ol li时 统一控制轮播的值
        }
    }
    //5.自动轮播部分 autoplay 图片和ol li一起自动轮播
    var timer = null; //全局定义计时器
    var key = 0; // 利用key值控制自动轮播 key=位移了几张图片
    var square = 0; //利用square控制ol li自动轮播 
    timer = setInterval(autoplay,2000); //定义autoplay函数 方便调用
    //5.1图片自动轮播部分
    function autoplay () {
        key++;                   //key=ulLis.length-1时,已经轮播到最后一张图即为第一张图此时square = 0
        if (key>=ulLis.length) { //key=ulLis.length时,
            key = 1;             //应该从第一张图轮播到第二张图所以 令 key = 1
            ul.style.left = 0;   //图片从最右拉到最左
        }
        animate(ul,-key*box.offsetWidth);
    //5.2ol li自动轮播部分
        square++;
        square = square >= olLis.length ? 0:square;
        for (var i = 0; i < olLis.length; i++) {
            olLis[i].className = ""
        }
        olLis[square].className = "current";
    }
    //6.鼠标经过box盒子时,停止自动轮班。鼠标离开时开启自动轮播
    box.onmouseover = function () {
        clearInterval(timer);    
    }
    box.onmouseout = function () {
        timer = setInterval(autoplay,2000); //调用autoplay函数
    }
}   
</script>

 

运行效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值