由一次课上作业而制作的代码块

@author QYX

今天课上老师让做一个图片切换,闲的无聊,花了4,5分钟,增加了几个功能,手写了一个工具函数,实现了轮播图,使用定时器自动切换图片,实现点击下方小方块切换相应图片(每个小方块对应一个图片),点击方框时自动切换图片并停止定时器,待选择的图片切换后使用回调函数继续执行轮播功能,类似于电商网站的图片切换模块(当然由于花费时间很短,所以没有进行优化,逃 :))

提供一下此代码块的代码(有人说这为什么不算项目,因为项目最低都是2000+行起步,所以叫做代码块)

实现此功能只使用了原生JS的原始知识,项目十分简单易学,可供新人练手。

这篇就当我水了

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            #outer{
                width: 320px;
                height: 400px;
                margin: 50px auto;
                background-color: #9ACD32;
                /*设置padding*/
                padding: 10px 0;
                position: relative;
                /*裁剪溢出的内容*/
                overflow: hidden;
            }
            /*设置list*/
            #imgList{
                list-style: none;
                /*设置ul宽度*/
                width: 1600px;
                position: absolute;
                margin: 0px auto;
            }
            #imgList li{
                float: left;
                margin: 0 10px;
            }
            #navDiv{
                /*开启绝对定位*/
                position: absolute;
                /*设置位置*/
                bottom: 15px;
                left: 117px;
            }
            #navDiv a{
                float: left;
                width: 10px;
                height: 10px;
                background-color: ##FF0000;
                /*设置左右外边距*/
                margin: 0 5px;
                opacity: 0.5;
                /*兼容IE8透明*/
                filter: alpha(opactiy=50);
                background-color: #87CEEB;
            }
            #navDiv a:hover{
                background-color: #000000;
                opacity: 0.5;
                /*兼容IE8透明*/
                filter: alpha(opactiy=50);
            }
            img{
                width: 300px;
                height: 400px;
            }
        </style>
        <script type="text/javascript">
            /**
             * author:QYX
             */
            window.onload=function()
            {
                //imgList的宽度
                var imgList=document.getElementById('imgList');
                //获取页面中所有的图片
                var imgArr=document.getElementsByTagName('img');
                imgList.style.width=400*imgArr.length+'px';
                /*设置导航按钮*/
                var navDiv=document.getElementById('navDiv');
                //获取outer
                var outer=document.getElementById('outer');
                navDiv.style.left=(outer.offsetWidth-navDiv.offsetWidth)/2;
                //获取所有的a
                var allA=document.getElementsByTagName('a');
                var index=0;
                //设置默认选中的效果
                allA[index].style.background="black";
                for(var i=0;i<allA.length;i++)
                {
                    //为每个超链接都添加一个num属性
                    allA[i].num=i;
                    allA[i].onclick=function()
                    {
                        //关闭自动切换的定时器
                        clearInterval(timer);
                        //并将其设置为index
                        index=this.num;
                        //切换图片
                        //imgList.style.left=-320*index+"px";
                        setA();
                        move('left',imgList,20,-320*(index),function(){
                            autoChange();
                        });
                    }
                }
                autoChange();
                function setA()
                {
                    //判断当前索引是否为最后一张图片
                    if(index>=imgArr.length-1)
                    {
                        //则将index设置为0
                        index=0;
                        //通过css将最后一张直接切换为第一章
                        imgList.style.left=0;
                    }
                    for(var i=0;i<allA.length;i++)
                    {
                        allA[i].style.backgroundColor="";
                    }
                    //将选中的A设置为黑色
                    //修改正在选中的A
                    allA[index].style.backgroundColor="black";
                };
                //定义自动切换定时器标识
                var timer;
                function autoChange()
                {
                    //开启一个定时器用于定时去切换图片
                        timer=setInterval(function(){
                        //使索引自增
                        index++;
                        index%=imgArr.length;
                        move('left',imgList,20,-320*index,function(){
                            // for(var i=0;i<allA.length;i++)
                            // {
                            //     allA[i].style.backgroundColor="";
                            // }
                            // //将选中的A设置为黑色
                            // //修改正在选中的A
                            // allA[index].style.backgroundColor="black";
                            setA.call();
                        });
                    },3000);
                };
                //创建一个方法用来设置选中的A
            };
            function getStyle(obj,name)
            {
                //正常浏览器的方式
                /**
                 * 对象没找到会报错,属性没找到会返回undefined,所以必须带window
                 * 这种getComputedStyle就成了属性,不会报错
                 */
                if(window.getComputedStyle){
                return getComputedStyle(obj,null)[name];
                }else{
                //IE8的方式
                return obj.getComputedStyle[name];
                }
            }
            /**
             * @param {Object} attr 要执行的动画的样式
             * @param {Object} obj 要执行动画的对象
             * @param {Object} speed 移动的速度
             * @param {Object} target 执行动画的目标位置(正数向右,负数向左)
             * @param {Object} callback 回调函数
             */
            function move(attr,obj,speed,target,callback)
            {
                
                clearInterval(obj.timer);
                //获取元素目标位置
                var current=parseInt(getStyle(obj,attr));
                //判断速度的正负值
                if(current>target)
                {
                    //此时速度应为负值
                    speed=-speed;
                }
                obj.timer=setInterval(function(){
                    //获取obj原来的left值
                    var oldValue=parseInt(getStyle(obj,attr));
                    //在旧值的基础上增加
                    var newval=oldValue+speed;
                    if((speed<0 && newval<target)||(speed>0 && newval>target))
                    {
                        newval=target;
                    }
                    obj.style[attr]=newval+'px';
                    if(newval == target)
                    {
                        clearInterval(obj.timer);
                        callback&&callback();
                    }
                },30);
        }
        </script>
    </head>
    <body>
        <div>
            <div id="outer">
                <ul id="imgList">
                    <li>
                        <img src="img/1.jpg"/>
                    </li>
                    <li>
                        <img src="img/2.jpg"/>
                    </li>
                    <li>
                        <img src="img/3.jpg"/>
                    </li>
                    <li>
                        <img src="img/4.jpg"/>
                    </li>
                    <li>
                        <img src="img/1.jpg"/>
                    </li>
                    <!--创建导航按钮-->
                </ul>
                <div id="navDiv">
                    <a href="javascript:;"></a>
                    <a href="javascript:;"></a>
                    <a href="javascript:;"></a>
                    <a href="javascript:;"></a>
                </div>
        </div>
    </body>
</html>

实现效果如下:

 图片是我女神

 轮播图,使用定时器自动切换图片,实现点击下方小方块切换相应图片(每个小方块对应一个图片),点击方框时自动切换图片并停止定时器,待选择的图片切换后使用回调函数继续执行轮播功能。

posted @ 2020-03-17 13:14  计算机的探索者  阅读(179)  评论(0编辑  收藏  举报