zoukankan      html  css  js  c++  java
  • js轮播图

    //尝试创建一个可以执行简单动画的函数
    /*
     * 参数:
     *     obj:要执行动画的对象
     *     attr:要执行动画的样式,比如:left top width height
     *     target:执行动画的目标位置
     *     speed:移动的速度(正数向右移动,负数向左移动)
     *  callback:回调函数,这个函数将会在动画执行完毕以后执行
     */
    function move(obj, attr, target, speed, callback) {
        //关闭上一个定时器
        clearInterval(obj.timer);
    
        //获取元素目前的位置
        var current = parseInt(getStyle(obj, attr));
    
        //判断速度的正负值
        //如果从0 向 800移动,则speed为正
        //如果从800向0移动,则speed为负
        if(current > target) {
            //此时速度应为负值
            speed = -speed;
        }
    
        //开启一个定时器,用来执行动画效果
        //向执行动画的对象中添加一个timer属性,用来保存它自己的定时器的标识
        obj.timer = setInterval(function() {
    
            //获取box1的原来的left值
            var oldValue = parseInt(getStyle(obj, attr));
    
            //在旧值的基础上增加
            var newValue = oldValue + speed;
    
            //判断newValue是否大于800
            //从800 向 0移动
            //向左移动时,需要判断newValue是否小于target
            //向右移动时,需要判断newValue是否大于target
            if((speed < 0 && newValue < target) || (speed > 0 && newValue > target)) {
                newValue = target;
            }
    
            //将新值设置给box1
            obj.style[attr] = newValue + "px";
    
            //当元素移动到0px时,使其停止执行动画
            if(newValue == target) {
                //达到目标,关闭定时器
                clearInterval(obj.timer);
                //动画执行完毕,调用回调函数
                callback && callback();
            }
    
        }, 30);
    }
    
    /*
     * 定义一个函数,用来获取指定元素的当前的样式
     * 参数:
     *         obj 要获取样式的元素
     *         name 要获取的样式名
     */
    function getStyle(obj, name) {
    
        if(window.getComputedStyle) {
            //正常浏览器的方式,具有getComputedStyle()方法
            return getComputedStyle(obj, null)[name];
        } else {
            //IE8的方式,没有getComputedStyle()方法
            return obj.currentStyle[name];
        }
    
    }
    
    //定义一个函数,用来向一个元素中添加指定的class属性值
    /*
     * 参数:
     *     obj 要添加class属性的元素
     *  cn 要添加的class值
     *     
     */
    function addClass(obj, cn) {
    
        //检查obj中是否含有cn
        if(!hasClass(obj, cn)) {
            obj.className += " " + cn;
        }
    
    }
    
    /*
     * 判断一个元素中是否含有指定的class属性值
     *     如果有该class,则返回true,没有则返回false
     *     
     */
    function hasClass(obj, cn) {
    
        //判断obj中有没有cn class
        //创建一个正则表达式
        //var reg = /b2/;
        var reg = new RegExp("\b" + cn + "\b");
    
        return reg.test(obj.className);
    
    }
    
    /*
     * 删除一个元素中的指定的class属性
     */
    function removeClass(obj, cn) {
        //创建一个正则表达式
        var reg = new RegExp("\b" + cn + "\b");
    
        //删除class
        obj.className = obj.className.replace(reg, "");
    
    }
    
    /*
     * toggleClass可以用来切换一个类
     *     如果元素中具有该类,则删除
     *     如果元素中没有该类,则添加
     */
    function toggleClass(obj, cn) {
    
        //判断obj中是否含有cn
        if(hasClass(obj, cn)) {
            //有,则删除
            removeClass(obj, cn);
        } else {
            //没有,则添加
            addClass(obj, cn);
        }
    
    }
    js/tools.js
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>轮播图</title>
            <style type="text/css">
                *{
                    margin: 0px;
                    padding: 0px;
                }
                #outer{
                    height: 333px;
                    width: 520px;
                    margin: 50px auto;
                    background-color: yellowgreen;
                    padding: 10px 0;
                    position: relative;
                    overflow: hidden;
                }
                #imgList{
                    list-style: none;
                    
                    position: absolute;
                    left: 0px;
                }
                #imgList li{
                    float: left;
                    margin: 0px 10px;
                }
                #navDiv{
                    position: absolute;
                    bottom: 15px;
                }
                #navDiv a{
                    /*设置超链接浮动*/
                    float: left;
                    /*设置超链接的宽和高*/
                    width: 15px;
                    height: 15px;
                    /*设置背景颜色*/
                    background-color: red;
                    /*设置左右外边距*/
                    margin: 0 5px;
                    /*设置透明*/
                    opacity: 0.5;
                    /*兼容IE8透明*/
                    filter: alpha(opacity=50);
                }
                #navDiv a:hover{
                    background-color: black;
                }
    
            </style>
            <script type="text/javascript" src="js/tools.js">
            </script>
            <script type="text/javascript">
                window.onload=function(){
                    var imgList=document.getElementById("imgList");
                    var imgArr=document.getElementsByTagName("img");
                    imgList.style.width=520*imgArr.length+"px";
                    var navDiv=document.getElementById("navDiv");
                    var outer=document.getElementById("outer");
                    navDiv.style.left=(outer.offsetWidth-navDiv.offsetWidth)/2+"px";
                    var allA=document.getElementsByTagName("a");
                    var index=0;
                    var timer;
                    allA[index].style.backgroundColor="black";
                    for(var i=0;i<allA.length;i++){
                        allA[i].num=i;
                        allA[i].onclick=function(){
                            clearInterval(timer);    
                            index=this.num;
                            //imgList.style.left="-520*index"+"px";
                            setA();
                            move(imgList , "left" , -520*index , 20 , function(){
                                autoChange();
                            });
                        }
                    }
                                autoChange();
                    function setA(){
                        for(var i=0;i<allA.length;i++){
                            allA[i].style.backgroundColor="";
                            
                        }
                        allA[index].style.backgroundColor="black";
                    }
                    
                    function autoChange(){
                        timer=setInterval(function(){
                            index++;
                            index%=imgArr.length;
                            move(imgList,"left",-520*index,20,function(){
                                setA();
                            })
                        },3000);
                    }
                    
                }
            </script>
        </head>
        <body>
            <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/5.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>
                    <a href="javascript:;"></a>
                </div>
            </div>
        </body>
    </html>
  • 相关阅读:
    ACM学习历程—HDU5410 CRB and His Birthday(动态规划)
    ACM学习历程—HDU1028 Ignatius and the Princess III(递推 || 母函数)
    ACM学习历程—HDU5396 Expression(递推 && 计数)
    ACM学习历程—HDU 5317 RGCDQ (数论)
    ACM学习历程—HDU 5326 Work(树形递推)
    ACM学习历程—SNNUOJ 1110 传输网络((并查集 && 离线) || (线段树 && 时间戳))(2015陕西省大学生程序设计竞赛D题)
    jquery开发js插件
    requireJS
    java进阶之-Maven,svn,git,maven合拼多个项目
    java 项目中每个jar包的作用总结
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/11367351.html
Copyright © 2011-2022 走看看