轮播图(原生js)

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

<head>
    <meta charset="UTF-8">
    <title>轮播图</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        #outer {
            width: 520px;
            height: 500px;
            margin: 50px auto;
            background-color: #e0e0a3;
            padding: 10px 0;
            position: relative;
            overflow: hidden;
        }
        
        #imgList {
            list-style: none;
            position: absolute;
            /*left: -510px;*/
        }
        
        #imgList li {
            float: left;
            margin: 0 10px;
        }
        
        #navDiv {
            position: absolute;
            bottom: 30px;
        }
        
        #navDiv a {
            float: left;
            width: 20px;
            height: 20px;
            /*display: block;*/
            background-color: coral;
            margin: 0 5px;
            /*设置透明*/
            opacity: 0.8;
            /*兼容IE8*/
            filter: alpha(opacity=0.8);
            bottom: 0px;
        }
        
        #navDiv a:hover {
            background-color: gray;
        }
    </style>
    <script type="text/javascript" src="tool.js"></script>
    <script>
        window.onload = function() {
            //设置ul宽度
            var imgList = document.getElementById("imgList");
            var imgArr = document.getElementsByTagName("img");
            imgList.style.width = 520 * imgArr.length + "px";
            //设置导航栏居中
            var outer = document.getElementById("outer");
            var navDiv = document.getElementById("navDiv");
            navDiv.style.left = (outer.offsetWidth - navDiv.offsetWidth) / 2 + "px";
            //
            var allA = document.getElementsByTagName("a");
            var index = 0;
            var timer;
            allA[index].style.backgroundColor = "gray";
            for (var i = 0; i < imgArr.length; i++) {
                allA[i].num = i;
                allA[i].onclick = function() {
                    //点击时,关闭自动切换定时器
                    clearInterval(timer);
                    index = this.num;
                    imgList.style.left = -520 * index + "px";
                    setA();
                    move(imgList, "left", -520 * index, 10, function() {
                        //动画执行完毕,自动切换
                        autoChange();
                    });
                };
            }
            autoChange();

            function setA() {
                //判断当前索引是否是最后一张图片
                if (index > imgArr.length - 1) {
                    index = 0;
                    imgList.style.left = 0 + "px";
                }
                for (var i = 0; i < allA.length; i++) {
                    allA[i].style.backgroundColor = "";
                }
                allA[index].style.backgroundColor = "gray";
            }

            function autoChange() {
                timer = setInterval(function() {
                    index %= imgArr.length;
                    move(imgList, "left", -520 * index, 10, function() {
                        setA();
                        index++;
                    });
                }, 2000);
            }
        }
    </script>
</head>

<body>
    <div id="outer">
        <ul id="imgList">
            <li><img src="img/IMG_0005.JPG"></li>
            <li><img src="img/IMG_0001.JPG"></li>
            <li><img src="img/IMG_0007.JPG"></li>
            <li><img src="img/IMG_0479.JPG"></li>
        </ul>
        <!-- 导航 -->
        <div id="navDiv">
            <a href="javascript:;"></a>
            <a href="javascript:;"></a>
            <a href="javascript:;"></a>
            <a href="javascript:;"></a>
        </div>
    </div>
</body>

</html>

tool.js:

/**
 * 获取元素样式
 */
function getStyle(obj, name) {
    if (window.getComputedStyle) {
        return getComputedStyle(obj, null)[name];
    } else {
        return obj.currentStyle[name];
    }
}

/**
 * 参数:
 * 	obj:要执行动画对象
 * 	attr:要执行动画的样式,如:left
 * 	traget:执行动画的目标位置
 * 	speed:移动的速度
 * 	callback:回调函数
 */
function move(obj, attr, target, speed, callback) {
    clearInterval(obj.timer);
    var current = parseInt(getStyle(obj, attr));
    if (current > target) {
        speed = -speed;
    }

    obj.timer = setInterval(function() {
        var oldValue = parseInt(getStyle(obj, attr));
        //console.log(oldValue);
        var newValue = oldValue + speed;
        if ((speed < 0 && newValue < target) || (speed > 0 && newValue > target))
            newValue = target;
        obj.style[attr] = newValue + "px";
        if (newValue == target) {
            clearInterval(obj.timer);
            callback && callback();
        }
    }, 30)
}

效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值