JS练习——轮播图

js/tools.js

/**
 * 定义一个浏览器,用来获取指定元素的当前样式
 * 参数:
 *      element 要获取样式的元素
 *      name 要获取的样式名
 */
function getStyle(element, name){
    if(window.getComputedStyle){
        //普通浏览器的方式
        return getComputedStyle(element,null)[name];
    }else {
        //IE8浏览器的方式
        return element.currentStyle[name];
    }
}

/**
 * 使标签移动的方法
 * @param obj 移动的标签
 * @param attr 修改的属性
 * @param target 移动的终点
 * @param speed 移动的速度
 * @param callback 结束使回调的函数
 */
function move(obj,attr,target,speed,callback){
    clearInterval(obj.timer);
    var start = parseInt(getStyle(obj,attr));
    if(start > target){
        speed = -speed;
    }

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

轮播图HTML页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>轮播图</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }

        /**
         * 设置outer的样式
         */
        #outer{
            /*设置宽和高*/
            width: 320px;
            height: 150px;
            /*居中*/
            margin: 50px auto;
            /*设置背景颜色*/
            background-color: yellowgreen;
            /*设置padding*/
            padding: 10px 0;
            /*开启相对定位*/
            position: relative;
            /*裁剪溢出的你内容*/
            overflow: hidden;
        }

        /*设置imgList*/
        #imgList{
            /*去重项目符号*/
            list-style: none;
            /*设置ul的宽度*/
            /*width: 1920px;*/
            /*开启绝对定位*/
            position: absolute;
            /*设置偏移量*/
            left: 0;
        }

        /*设置图片中的li*/
        #imgList li{
            /*设置浮动*/
            float: left;
            /*设置左右外边距*/
            margin: 0 10px;
        }

        /*设置导航按钮*/
        #navDiv{
            /*开启绝对定位*/
            position: absolute;
            /*设置位置*/
            bottom: 18px;
            /*设置left的值
             *outer宽度320
             *navDiv宽度108
            */
            /*left: 106px;*/
        }

        #navDiv a{
            /*直接超链接浮动*/
            float: left;
            /*设置宽高*/
            width: 15px;
            height: 15px;
            /*设置背景颜色*/
            background-color: red;
            /*设置左右外边距*/
            margin: 0 3px;
            /*设置透明度*/
            opacity: 0.6;
            /*兼容IE8透明*/
            filter: alpha(opacity=60);
        }

        /*设置鼠标移入的效果*/
        #navDiv a:hover{
            background-color: black;
        }
    </style>
    <script type="text/javascript" src="js/tools.js"></script>
    <script type="text/javascript">
        window.onload = function (){
            var auto;
            //设置img的宽度
            //获取imgList
            var imgList = document.getElementById("imgList");

            //获取页面中所有的img标签
            var imgArr = document.getElementsByTagName("img");

            //设置imgList的宽度
            imgList.style.width = imgArr.length * 320 + "px";

            /**
             * 设置导航按钮居中
             */
            //获取navDiv
            var navDiv = document.getElementById("navDiv");
            //获取outer
            var outer = document.getElementById("outer");
            //设置navDiv
            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(auto);

                    //获取点击超链接的索引
                    index = this.num;

                    //切换图片
                    // imgList.style.left = "-" + (index * 320) + "px";
                    move(imgList,"left",-320*index,20,function (){
                        auto = setInterval(autoChange,2000);
                    });

                    //修改导航栏颜色
                    setA();
                }
            }

            //创建一个方法用来设置选择的a
            function setA(){
                for (var i = 0; i <allA.length ; i++) {
                    allA[i].style.backgroundColor = "";
                }
                allA[index].style.backgroundColor = "black";
            }

            /**
             * 自动切换图片
             *
             */

            auto = setInterval(autoChange,2000);

            function autoChange(){
                index = (index + 1) % imgArr.length;
                move(imgList,"left",-320*index,20,function (){
                    if(index === imgArr.length-1){
                        index = 0;
                        imgList.style.left = "0px";
                    }
                    setA();
                });
            }
        };
    </script>
</head>
<body>
    <!-- 创建一个外部的DIV,来作为大的容器 -->
    <div id="outer">
        <!-- 创建一个u1,用于放置图片 -->
        <ul id="imgList">
            <li><img src="img/1.jpeg" width="300" height="150"/></li>
            <li><img src="img/2.jpeg" width="300" height="150"/></li>
            <li><img src="img/3.jpeg" width="300" height="150"/></li>
            <li><img src="img/4.jpeg" width="300" height="150"/></li>
            <li><img src="img/5.jpeg" width="300" height="150"/></li>
            <li><img src="img/6.jpeg" width="300" height="150"/></li>
            <li><img src="img/1.jpeg" width="300" height="150"/></li>
        </ul>
        <!-- 创建导航按钮 -->
        <div id="navDiv">
            <a href="javascript:;"></a>
            <a href="javascript:;"></a>
            <a href="javascript:;"></a>
            <a href="javascript:;"></a>
            <a href="javascript:;"></a>
            <a href="javascript:;"></a>
        </div>
    </div>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值