原生js实现旋转轮播图(包括缓动框架封装)

效果展示

在这里插入图片描述

代码展示

css部分

@charset "UTF-8";
/*初始化  reset*/
blockquote, body, button, dd, dl, dt, fieldset, form, h1, h2, h3, h4, h5, h6, hr, input, legend, li, ol, p, pre, td, textarea, th, ul {

    margin: 0;
    padding: 0

}

body, button, input, select, textarea {

    font: 12px/1.5 "Microsoft YaHei", "微软雅黑", SimSun, "宋体", sans-serif;
    color: #666;

}

ol, ul {

    list-style: none

}

a {
    text-decoration: none
}

fieldset, img {
    border: 0;
    vertical-align: top;
}

a, input, button, select, textarea {
    outline: none;
}

a, button {
    cursor: pointer;
}

.wrap {
    width: 1200px;
    margin: 10px auto;
}

.slide {
    height: 500px;
    position: relative;
}

.slide li {
    position: absolute;
    left: 200px;
    top: 0;


}

.slide li img {
    width: 100%;
}

.arrow {
    opacity: 0;
}

.prev, .next {
    width: 76px;
    height: 112px;
    position: absolute;
    top: 50%;
    margin-top: -56px;
    background: url(../images/prev.png) no-repeat;
    z-index: 99;
}

.next {
    right: 0;
    background-image: url(../images/next.png);
}



html以及javascript部分

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>旋转木马轮播图</title>
    <link rel="stylesheet" href="css/css.css"/>

</head>
<body>

    <div class="wrap" id="wrap">
       <div class="slide" id="slide">
           <ul>
               <!--五张图片-->
               <li><a href="#"><img src="images/slidepic1.jpg" alt=""/></a></li>
               <li><a href="#"><img src="images/slidepic2.jpg" alt=""/></a></li>
               <li><a href="#"><img src="images/slidepic3.jpg" alt=""/></a></li>
               <li><a href="#"><img src="images/slidepic4.jpg" alt=""/></a></li>
               <li><a href="#"><img src="images/slidepic5.jpg" alt=""/></a></li>

           </ul>
           <!--左右切换按钮-->
           <div class="arrow" id="arrow">
               <a href="javascript:;" class="prev"></a>
               <a href="javascript:;" class="next"></a>
           </div>
       </div>
    </div>


    <script>
        var arr = [
            {   //  1
                width:400,
                top:70,
                left:50,
                opacity:20,
                zIndex:2
            },
            {  // 2
                width:600,
                top:120,
                left:0,
                opacity:80,
                zIndex:3
            },
            {   // 3
                width:800,
                top:100,
                left:200,
                opacity:100,
                zIndex:4
            },
            {  // 4
                width:600,
                top:120,
                left:600,
                opacity:80,
                zIndex:3
            },
            {   //5
                width:400,
                top:70,
                left:750,
                opacity:20,
                zIndex:2
            }
        ];

//        黄健

        var liArr=document.getElementsByTagName("li");

        run();

        var wrap=document.getElementById("wrap");
        var arrow=document.getElementById("arrow");
        var btns=arrow.children;
        wrap.function(){
            animate(arrow,{"opacity":100})
        }
        wrap.function(){
            animate(arrow,{"opacity":0})
        }
        console.log(btns);
        var boo=true;
        btns[0].function(){
            if(boo){
                arr.push(arr.shift());
                boo=false;
                run(function(){
                    boo=true
                })
            }
        }
        btns[1].function(){
            if(boo){
                arr.unshift(arr.pop());
                boo=false;
                run(function(){
                    boo=true
                })
            }
        }

        function run(callback){
            for(var i=0;i<liArr.length;i++){
                animate(liArr[i],arr[i],callback)
            }
        }











//        封装获取外链样式
        function getStyle(ele,attr){
            if(ele.currentStyle!=undefined){
                return ele.currentStyle[attr];
            }else{
                return window.getComputedStyle(ele,null)[attr];
            }
        }
//        封装多个缓动框架
        function animate(ele,json,callback){
            clearInterval(ele.timer);
            var step;
            var nowState;
            var boo;
            ele.timer=setInterval(function(){
                boo=true;
                for(var k in json){
                    if(k=="opacity"){
                        nowState=getStyle(ele,k)*100 || 0;
                    }else{
                        nowState=parseInt(getStyle(ele,k)) || 0;
                    }
                    step=(json[k]-nowState)/10;
                    step=step>0?Math.ceil(step):Math.floor(step);
                    nowState=step+nowState;
                    if(k=="opacity"){
                        ele.style[k]=nowState/100;
                    }else if(k=="zIndex" || k=="z-index"){
                        ele.style[k]=nowState;
                    }else{
                        ele.style[k]=nowState+"px";
                    }
                    if(Math.abs(json[k]-nowState)>Math.abs(step)){
                        boo=false
                    }
                }
                if(boo){
                        clearInterval(ele.timer);
                        for(k in json){
                            if(k=="opacity"){
                                ele.style[k]=json[k]/100;
                            }else if(k=="zIndex" || k=="z-index"){
                                ele.style[k]=json[k];
                            }else{
                                ele.style[k]=json[k]+"px";
                            }
                        }
                        if(typeof callback=="function"){
                            callback();
                        }
                    }


            },25)
        }
    </script>
</body>
</html>

附件下载

图片不重要,请自己找图片
转载请注明出处,谢谢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值