zoukankan      html  css  js  c++  java
  • 12、js——轮播图

    1、轮播图.html(图片可自己修改)

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>轮播图</title>
        </head>
        <link rel="stylesheet" type="text/css" href="css/轮播图.css"/>
        <body>
            <div id="outer">
                <ul id="imgList">
                    <li><img src="img/唯美1.jpg" id="imgID"/></li>
                    <li><img src="img/唯美2.jpg" id="imgID"/></li>
                    <li><img src="img/唯美3.jpg" id="imgID"/></li>
                    <li><img src="img/唯美4.jpg" id="imgID"/></li>
                    <li><img src="img/唯美5.jpg" id="imgID"/></li>
                    <li><img src="img/唯美1.jpg" id="imgID"/></li>
                </ul>
                <!--<a id="left">&lt;</a>
                <a id="right">&gt;</a>-->
                <div id="navDiv">
                    <a href="javascript:;"></a>
                    <a href="javascript:;"></a>
                    <a href="javascript:;"></a>
                    <a href="javascript:;"></a>
                    <a href="javascript:;"></a>
                </div>
            </div>
        </body>
        <script type="text/javascript" src="js/tools.js" ></script>
        <script type="text/javascript" src="js/轮播图.js"></script>
    </html>

    2、tools.js

    /**
     * 用来获取指定元素的当前样式
     * 参数:
     *     1、obj 要获取样式的元素
     *     2、name 要获取的样式名
     */
    function getStyle(obj,name){
        if(window.getComputedStyle){
            //正常浏览器的方式,具有getComputerStyle()方法
            return getComputedStyle(obj,null)[name];
        }else{
            //IE8方式,没有getComputerStyle()方法
            return obj.currentStyle[name];
        }
    }
    
    /**
     * 用来执行简单动画的函数
     * 参数
     *     1、obj:要执行动画的对象
     *     2、attr:要执行动画的样式        比如:left、right、width、height
     *     3、target:执行动画的目标位置
     *     4、speed:移动速度(整数向右移动,负数向左)
     *     5、callback:回调函数,这个函数会在动画执行完毕以后执行
     */
    function move(obj,attr,target,speed,callback){
        //关闭上一个定时器
        clearInterval(obj.timer);
        //获取元素目前位置
        var current = parseInt(getStyle(obj,attr));
        //判断速度的正负值
        if(current > target){
            speed = -speed;
        }
        //开启一个定时器,用来执行动画效果
        //向执行动画的对象中添加一个timer属性,用来保存它自己的定时器标识
        obj.timer = setInterval(function(){
            var oldValue = parseInt(getStyle(obj,attr));
            var newValue = oldValue + speed;
            
            /**
             * 判断newValue和target的关系
             * 向左移动时需要判断newValue是否小于target
             * 向右移动时需要判断newValue是否大于target
             */
            if((speed<0 && newValue<target) || (speed > 0 && newValue>target) ){
                newValue = target;
            }
            obj.style[attr] = newValue+"px";
            
            //元素到达target停止动画
            if(newValue == target){
                //到达目的地,停止定时器
                clearInterval(obj.timer);
                //动画执行完毕,有回调函数时调用回调函数
                callback && callback();
            }
        },30);
    }

    3、轮播图.js

    /*设置装图片ul的宽度 */
    var imgList = document.getElementById("imgList");
    //获取页面中所有的img标签
    var imgArr = document.getElementsByTagName("img");
    //设置imgList的宽度
    imgList.style.width = 800*imgArr.length+"px";
    
    
    /*设置导航按钮居中*/
    //获取navDiv
    var navDiv = document.getElementById("navDiv");
    //获取outer
    var outer = document.getElementById("outer");
    //设置navDiv的left值
    navDiv.style.left = (outer.offsetWidth - navDiv.offsetWidth)/2 + "px";
    
    
    //显示图片的索引
    var index=0;
    //获取所有a
    var allA = document.getElementsByTagName("a");
    //设置默认选中的效果
    allA[index].style.backgroundColor = "black";
    
    /*为所有的超链接都绑定单击响应函数*/
    for(var i=0;i<allA.length;i++){
        //为每一个超链接添加一个num属性
        allA[i].num = i;
        allA[i].onclick = function(){
            //关闭自动切换的定时器
            clearInterval(timer);
            //将点击超链接的num属性赋值给index以便切换图片
            index = this.num;
            
            //修改点击a之后的样式
            setA();
            //切换图片
            /*
             * 第一张:0 0
             * 第二张:1 -800
             * 第三张:2 -1600
             */
    //        imgList.style.left = -800*index+"px";
            //使用tools.js中的move函数进行动画切换图片
            move(imgList,"left",-800*index,50,function(){
                //手动切换完成后再打开自动切换的定时器
                autoChange();
            });
        };
    }
    
    //开启自动切换图片
    autoChange();
    
    //创建一个方法设置点击之后a的样式
    function setA(){
        //判断当前索引是否是最后一张图片
        if(index >= imgArr.length - 1){
            index = 0;
            //此时显示最后一张图片,而最后一张图片和第一张图片是一模一样的
            //通过css将最后一张切换成第一张
            imgList.style.left = 0;
        }
        //遍历所有a,并将它们的背景色设置 为 红色
        for(var i=0;i<allA.length;i++){
            //因为css中有默认红色,这里设置为空串是为了防止a:hover之后颜色失效
            allA[i].style.backgroundColor = "";
        }
        //将选中的a设置为黑色
        allA[index].style.backgroundColor = "black";
    };
    
    
    var timer;
    //创建一个函数用来开启自动切换图片
    function autoChange(){
        //开启一个定时器,用来定时切换图片
        timer = setInterval(function(){
            //使索引自增
            index++;
            index %= imgArr.length;
            //执行动画,切换图片
            move(imgList,"left",-800*index,50,function(){
                //修改导航点
                setA();
            });
        },3000);
    }

    4、轮播图.css

    *{
        margin: 0;
        padding: 0;
    }
    
    #outer{
        width: 800px;
        height: 500px;
        border: 1px solid red;
        margin: 100px auto;
        position: relative;
        overflow: hidden;
        cursor:pointer;
    }
    
    #imgList{
        list-style: none;
        /*开启绝对定位*/
        position: absolute;
    }
    
    #imgList li{
        float: left;
    }
    #outer img{
        width: 800px;
        height: 500px;
    }
    /*设置导航按钮*/
    #navDiv{
        position: absolute;
        bottom: 20px;
    }
    #navDiv a{
        /*开启浮动*/
        float: left;
        /*开启浮动后行内元素则变为了块元素,可以设置宽高*/
        width: 25px;
        height: 25px;
        background-color: red;
        /*设置左右边距*/
        margin: 0 5px;
        /*设置透明*/
        opacity: 0.5;
        /*兼容IE8透明*/
        filter: alpha(opacity=50);
    }
    
    #navDiv a:hover{
        background-color: black;
    }
  • 相关阅读:
    Android
    Android
    Android
    JAVA动态代理基础
    TCP连接与OKHTTP复用连接池
    Android
    Android
    GitHub上README.md教程
    android
    HDU 1097 A hard puzzle
  • 原文地址:https://www.cnblogs.com/lyh233/p/12897759.html
Copyright © 2011-2022 走看看