zoukankan      html  css  js  c++  java
  • 由一次课上作业而制作的代码块

    @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>

    实现效果如下:

     图片是我女神

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

  • 相关阅读:
    软能力
    git 使用命令
    jQuery插件stickup.js 源码解析初步
    HTML不常用的标签
    HTML笔记
    can't load XRegExp twice in the same frame
    IE8 不支持Date.now()
    href="#" href="javascript:void(0);" href="###"
    前端源码-部分资源
    javascript笔记
  • 原文地址:https://www.cnblogs.com/qyx66/p/12510032.html
Copyright © 2011-2022 走看看