透明轮播原生JavaScript实现

10 篇文章 0 订阅
6 篇文章 0 订阅

html代码

<div id="box">
    <ul id="ul">
        <li><a href="javascript:void(0)"><img src="images/slidepic1.jpg" alt=""/></a></li>
        <li><a href="javascript:void(0)"><img src="images/slidepic2.jpg" alt=""/></a></li>
        <li><a href="javascript:void(0)"><img src="images/slidepic3.jpg" alt=""/></a></li>
        <li><a href="javascript:void(0)"><img src="images/slidepic4.jpg" alt=""/></a></li>
        <li><a href="javascript:void(0)"><img src="images/slidepic5.jpg" alt=""/></a></li>
    </ul>
    <ol id="ol">
        <li><a href="javascript:void(0)"><img src="images/slidepic1.jpg" alt=""/></a></li>
        <li><a href="javascript:void(0)"><img src="images/slidepic2.jpg" alt=""/></a></li>
        <li><a href="javascript:void(0)"><img src="images/slidepic3.jpg" alt=""/></a></li>
        <li><a href="javascript:void(0)"><img src="images/slidepic4.jpg" alt=""/></a></li>
        <li><a href="javascript:void(0)"><img src="images/slidepic5.jpg" alt=""/></a></li>
    </ol>
</div>

css代码

 * {
            margin: 0;
            padding: 0;
        }

        #box {
            height: 500px;
            width: 800px;
            border: 1px solid #c0c0c0;
            position: absolute;
            margin: 100px auto;
            left: 100px;
        }

        ul {
            list-style: none;
            height: 100%;
            width: 100%;
        }

        ul > li {
            height: 100%;
            width: 100%;
            position: absolute;
            font-size: 30px;
            text-align: center;
        }

        ol {
            list-style: none;
            width: 100%;
            margin-top: 5px;
        }

        ol > li {
            height: 100px;
            width: 146px;
            margin-left: 8px;
            float: left;
            text-align: center;
            border: 1px solid #999999;
        }

        ol > li img {
            height: 100px;
            width: 146px;
            float: left;
        }

JS代码 

动画封装

 function getStyle(ele, attr){
        if(ele.currentStyle){
            return ele.currentStyle[attr];
        }
        //一会回头再看看 null应该如何使用?
        return window.getComputedStyle(ele, null)[attr]
    }

    function animate(obj, json, callback) {
        //1.情况定时器
        clearInterval(obj.timer);
        //2.创建定时器
        obj.timer = setInterval(function () {
            // 新的位置=当前的位置+步长
            var flag = true;// 默认认为所有的 值 都完成了动画
            for (var key in json) {
                var target = 0;//目标位置
                var current = 0;//当前位置
                if (key.toLowerCase() == "opacity") {
                    target = Math.round(json[key] * 100);
                    current = Math.round(getStyle(obj, key) * 100)
                } else if (key != "zIndex") {
                    // height,width,left top
                    target = parseInt(json[key]);
                    current = parseInt(getStyle(obj, key));
                }
                //步长

                if (key != "zIndex") {
                    //说明 不参与  zIndex 变化
                    var step = (target - current) / 10;
                    step = step > 0 ? Math.ceil(step) : Math.floor(step);
                }

                // 新的位置=当前的位置+步长
                if (key.toLowerCase() == "opacity") {
                    obj.style.opacity = (current + step) / 100;
                } else if (key != "zIndex") {
                    obj.style[key] = current + step + "px";// height,width,left top
                }

                if (key == "zIndex") {
                    // 如果key== zIndex 直接给 对象赋值
                    obj.style.zIndex = Number(json[key]);
                }

                //关注哪些属性的动画还没完成
                if (current != target) {
                    flag = false;
                }
            }

            //如果for里面都没有任何属性需要改变 flag的状态,说明动画都完成了
            if (flag) {
                clearInterval(obj.timer);
                //动画完成后,通知或者做其他操作
                //此处说明 callback就是一个函数
                if (typeof(callback) == "function") {
                    callback(obj);//执行callback函数
                }
            }
        }, 30)
    }

 var ul = document.getElementById('ul');
    var ol = document.getElementById('ol');
    var lis = ul.children;
    var olls = ol.children;
    var timer = setInterval(autoPlay, 1500);
    var index = 0;

    function autoPlay() {
        index++; //
        if (index >= 5) {
            index = 0
        }

        for (var i = 0; i < lis.length; i++) {
            if (i == index) {
                animate(lis[index], {"opacity": 1});
                animate(olls[index], {"opacity": 1})
            } else {
                animate(lis[i], {"opacity": 0});
                animate(olls[i], {"opacity": 0.1})
            }
        }

        for (var i = 0; i < olls.length; i++) {
            olls[i].index = i;
            olls[i].onmouseenter = function () {
                index = this.index;
                index--;
                clearInterval(timer);
                autoPlay();
            };
            olls[i].onmouseleave = function () {
                index = this.index;
                index;
                timer = setInterval(autoPlay, 1500);
            }
        }

        ul.onmouseenter = function () {
            clearInterval(timer);
        };

        ul.onmouseleave = function () {
            timer = setInterval(autoPlay, 1500);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值