zoukankan      html  css  js  c++  java
  • js动画之轮播图

    一、 使用Css3动画实现
    
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <style type="text/css">
                body,ul{
                    list-style: none;
                }
                
                
                .outer{
                     750px;
                    height: 366px;
                    margin: 100px auto;
                    border: solid 2px gray;
                    
                    overflow: hidden;
                    position: relative;
                }
                
                .inner{
                     500%;
                    height: 100%;
                    position: relative;
                    left: 0;
                    
                    animation: myAni 15s linear infinite alternate;
                }
                
                .inner img{
                    float: left;
                     20%;
                }
                
                @keyframes myAni{
                    0%{left: 0;}
                    10%{left:0}
                    20%{left: -100%;}
                    30%{left: -100%;}
                    40%{left: -200%;}
                    50%{left: -200%;}
                    60%{left: -300%;}
                    70%{left: -300%;}
                    80%{left: -400%;}
                    100%{left: -400%;}
                }
                
                .outer ul{
                    position: absolute;
                    bottom: 16px;
                    left: 50%;
                    transform: translateX(-50%);
                    display: flex;
                }
                
                .outer li{
                    /* 12px;
                    height: 12px;*/
                    margin: 0 10px;
                    /*background: white;*/
                    border: solid 8px white;
                    border-radius: 50%;
                }
                
                .outer .scroll-ball{
                    border-color: yellowgreen;
                    position: relative;
                    left: -180px;
                    
                    animation: myBall 15s linear infinite alternate;
                }
                
                @keyframes myBall{
                    0%{left: -180px;}
                    10%{left:-180px;}
                    20%{left: -144px;}
                    30%{left: -144px;}
                    40%{left: -108px;}
                    50%{left: -108px;}
                    60%{left: -72px;}
                    70%{left: -72px;}
                    80%{left: -36px;}
                    100%{left: -36px;}
                }
            </style>
        </head>
        <body>
            <div class="outer">
                <div class="inner">
                    <img src="img/5af3df82N15a1910a.jpg"/>
                    <img src="img/5afbf194Nce807c23.jpg"/>
                    <img src="img/5afce833N3a41e948.jpg"/>
                    <img src="img/5af3df82N15a1910a.jpg"/>
                    <img src="img/5afce833N3a41e948.jpg"/>
                </div>
                <ul>
                    <li></li>
                    <li></li>
                    <li></li>
                    <li></li>
                    <li></li>
                    <li class="scroll-ball"></li>
                </ul>
            </div>
        </body>
    </html>
    二、 使用javaScript实现
    
    html代码:
    
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title></title>
            <link rel="stylesheet" type="text/css" href="css/slideshow.css"/>
        </head>
        <body>
            <div id="slide-container">
                <!--轮播的图片-->
                <div id="slide-main">
                    <img src="img/111.jpg"/>
                </div>
                
                <!--导航-->
                <ul id="listMenu">
                    <li>1</li>
                    <li>2</li>
                    <li>3</li>
                </ul>
                
                <!--左右翻页-->
                <div id="slide-nav">
                    <span>&lt;</span>
                    <span>&gt;</span>
                </div>
            </div>
        </body>
        <script src="js/slideshow.js" type="text/javascript" charset="utf-8"></script>
    </html>
    
    
    css代码:
        
    *{
        margin: 0;
        padding: 0;
    }
    
    li{
        list-style: none;
    }
    
    #slide-container{
         750px;
        height: 366px;
        margin: 100px auto;
        border: dotted 3px orange;
        position: relative;
        overflow: hidden;
    }
    
    #listMenu{
         50%;
        display: flex;
        justify-content: space-around;
        
        position: absolute;
        bottom: 16px;
        left: 50%;
        transform: translateX(-50%);
    }
    
    #listMenu li{
        height: 30px;
         30px;
        text-align: center;
        line-height: 30px;
        border-radius: 50%;
        background: yellow;
        cursor: pointer;
    }
    
    #slide-nav{
         98%;
        
        position: absolute;
        top: 50%;
        left: 50%;
        transform:translateX(-50%) translateY(-50%);
    }
    
    #slide-nav span{
        font-size: 60px;
        color: white;
        cursor: pointer;
        background: #E7E7E7;
        opacity: 0.4;
    }
    
    #slide-nav span:last-of-type{
        float: right;
    }
    
    
    js代码:
        
    //获取元素
    //获取图片
    var slideMain = document.getElementById('slide-main');
    var slidePic = slideMain.getElementsByTagName('img')[0];
    
    //获取导航
    var listMenu = document.getElementById('listMenu');
    var lis = listMenu.getElementsByTagName("li");
    
    //获取左右翻页
    var slideNav = document.getElementById('slide-nav');
    var previousNav = slideNav.getElementsByTagName('span')[0];
    var nextNav = slideNav.getElementsByTagName('span')[1];
    
    //设置轮播图片数组
    var imgArr = ["img/111.jpg","img/222.jpg","img/333.jpg"];
    
    //设置初始的索引,并赋给对应的显示图片
    var currentIndex = 0;
    slidePic.src = imgArr[currentIndex];
    lis[currentIndex].style = "background:orange;color:white";
    
    //设置图片轮播,每隔指定的事件切换图片和导航  用到定时器
    var timer = setInterval(slideshow,2000);
    
    //设置导航变化
    function slideshow(){
        //每一次轮播,轮播的索引自动加1;  
        currentIndex++;
        
        //判断,当前索引超出最大值后,重新赋给0
        if(currentIndex == lis.length){
            currentIndex = 0;
        }
        
        /*//将导航全部格式化
        for(var j = 0; j < lis.length; j++){
            lis[j].style = ""
        }
        //设置当前导航的索引
        lis[currentIndex].style = "background:orange;color:white";
        //根据当前索引将数组中对应的图片显示到页面上
        slidePic.src = imgArr[currentIndex]*/
        
        slidepic(currentIndex);
        
    }
    
    function slidepic(i){
        //将导航全部格式化
        for(var j = 0; j < lis.length; j++){
            lis[j].style = ""
        }
        //设置当前导航的索引
        lis[i].style = "background:orange;color:white";
        //根据当前索引将数组中对应的图片显示到页面上
        slidePic.src = imgArr[i]
    }
    
    
    for(var i = 0; i < lis.length; i++){
        lis[i].index = i;    
        lis[i].onmouseover = function(){//闭包函数  再循环中无法正确获取对应的索引
            //将导航全部格式化
            /*for(var j = 0; j < lis.length; j++){
                lis[j].style = ""
            }
            //设置当前导航的索引
            this.style = "background:orange;color:white";
            slidePic.src = imgArr[this.index];*/
            
            currentIndex = this.index;
            slidepic(currentIndex);
            clearInterval(timer);    
        }
        
        lis[i].onmouseout = function(){
            timer = setInterval(slideshow,1000);
        }
    }
        
    //设置鼠标滑过左右两边按钮时透明度变化
    previousNav.onmouseover = nextNav.onmouseover = function(){
        previousNav.style = "opacity:0.8";
        nextNav.style = "opacity:0.8";
        clearInterval(timer);    
    }
    
    previousNav.onmouseout = nextNav.onmouseout = function(){
        previousNav.style = "";
        nextNav.style = ""
        timer = setInterval(slideshow,1000);
    }
    
    
    //设置左边按钮的点击事件
    previousNav.onclick = function(){
        currentIndex--;
        if(currentIndex == -1){
            currentIndex = lis.length - 1;
        }
        slidepic(currentIndex)
    }
    
    
    //设置右边按钮的点击事件
    nextNav.onclick = function(){
        currentIndex++;
        if(currentIndex == lis.length){
            currentIndex = 0;
        }
        slidepic(currentIndex)
    }

    获取更多前端知识,请关注下方二维码 ↓↓↓↓↓↓

  • 相关阅读:
    ES6入门 阮一峰
    NPM
    移动端BUG
    配置每次git push 不需要输入账号密码
    移动端rem布局,用户调整手机字体大小或浏览器字体大小后导致页面布局出错问题
    课程表
    岛屿数量
    二叉树的右视图
    c++设计模式——工厂模式
    克隆图
  • 原文地址:https://www.cnblogs.com/menglong1214/p/9595205.html
Copyright © 2011-2022 走看看