• 定时器应用-最终版


    根据上一个实例,做到灵活应用和代码复用,把参数大部分改为形参形式传进来。

    代码如下:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <style type="text/css">
                *{
                    margin: 0;
                    padding: 0;
                }
                #box1{
                    width: 100px;
                    height: 100px;
                    background: red;
                    /*因为在IE浏览器中如果没有指定的值,就默认auto,所以我们需要先指定一个值*/
                    position: absolute;
                    left: 0;
                }
                #box2{
                    width: 100px;
                    height: 100px;
                    background: red;
                    /*因为在IE浏览器中如果没有指定的值,就默认auto,所以我们需要先指定一个值*/
                    position: absolute;
                    left: 0;
                    top: 200px;
                }
            </style>
            <script type="text/javascript" src="../js/tools.js"></script>
            <script type="text/javascript">
            
                window.onload = function(){
                    
                    /*
                     * 假如我们创建多个按钮来同时控制多个div移动的话,但是每次都是点击后,就关闭上一个定时器标识
                     * 所以点击第一个div移动后再点击第二个div移动的时候,第一个div就会停下来了,因为关闭了上一个定时器的标识了。
                     * 目前我们的定时器的标识由全局变量timer保存。
                     * 所有的执行正在执行的定时器都在这个变量中保存。
                     * 那么所要操作的就是把timer变成对象自己的就可以了,给timer添加一个这样子的属性就好了。
                     * 就不需要定义一个全局的timer了。
                     */
                    
    //                var timer;
                    
                    box1 = document.getElementById("box1");
                    box2 = document.getElementById("box2");
                    
                    btn = document.getElementById("btn");
                    btn01 = document.getElementById("btn1");
                    btn02 = document.getElementById("btn2");
                    test = document.getElementById("test");
                    
                    btn.onclick = function(){
                        
                        move(box1,800,10,'left');
                        
                    }
                    btn01.onclick = function(){
                        
                        move(box1,0,10,'left');
                        
                    }
                    btn02.onclick = function(){
                        
                        move(box2,800,10,'left');
                        
                    };
                    test.onclick = function(){
    //                        move(box2,800,10,'width');
    //                        move(box2,800,10,'top');
                            move(box2,800,10,'height',function(){
                                move(box2,800,10,'width');
                            });
                            
                    }
                    
                    
                    //获取元素的值
                    function getStyle(obj,name){
                        if(window.getComputedStyle){
                            return getComputedStyle(obj,null)[name]
                        }
                        else{
                            return obj.currentStyle[name]
                        }
                        
                    }
                    //需求是点击button,div就一直往左移动
                    /*
                     * 如果存在多个按钮的话,不能直接复制太多重复的代码,希望可以复用代码,
                     * 所以需要写一个移动的函数来操作
                     * 参数:
                     * obj:哪个按钮
                     * attr:要执行动画的样式,比如:left top width,height
                     * target:移动停止的阈值
                     * speed :移动的速度,如果为正则向右移动,为负则向左移动
                     * 但是每次move都要传正负,不太好,希望程序自己可以判断
                     * 判断速度的正负值
                     * 如果从0向800移动,则speed为正
                     * 如果从800向0移动,则speed为负
                     * 
                     * attr  width top hegiht left
                     * 
                     * 回调函数 callback  动画执行完毕后执行。比如说执行向左还想执行向右,那就需要根据回调函数执行
                     */
                    function move(obj,target,speed,attr,callback){
                        
                        //清除上一个定时器
                        clearInterval(obj.timer);
                        
                        
    
                        //开启一个定时器,用来执行动画效果
                        //向执行动画的对象中添加一个timer属性,用来半寸它自己的定时器的标识。
                        obj.timer = setInterval(function(){
                            //获取box1原来的left值,通过复用的函数去获取,parseInt是把字符串的数字部分转换为number
                        var oldlvalue = parseInt(getStyle(obj,attr));
                        //判断是向左还是向右
                        if(oldlvalue>target){
                            speed = -speed;
                        }
                        
                        newvalue = oldlvalue + speed;
                        /*
                         * 判断newvalue是否大于800
                         * 从800向0移动
                         * 向左移动时,需要判断newvalue是否小于target
                         * 向右移动时,需要判断newvalue是否大于target
                         */
                        if((speed>0&&newvalue>target) || (speed<0&&newvalue<target)){
                            newvalue = target;
                        }
                        obj.style[attr] = newvalue + "px";
                        /*
                         * 控制移动的位置,当800px时,就停止移动
                         */
                        if(newvalue ===  target){
                            clearInterval(obj.timer);
                            callback && callback()
                        }
                        },300)
                        
                    }    
                }
            </script>
        </head>
        <body>
            
            <button id="btn">点击div向右移动</button>
            <button id="btn1">点击div向左移动</button>
            <button id="btn2">点击div2向右移动</button>
            <button id="test">测试按钮</button>
            
            <br /><br />
            <div id="box1"></div>
            <div id="box2"></div>
            <br />
            
        </body>
    </html>

    这里的js是一个内部的js,做到多人应用,需要提取到外部js

    新建一个tools.js

                    //需求是点击button,div就一直往左移动
                    /*
                     * 如果存在多个按钮的话,不能直接复制太多重复的代码,希望可以复用代码,
                     * 所以需要写一个移动的函数来操作
                     * 参数:
                     * obj:哪个按钮
                     * attr:要执行动画的样式,比如:left top width,height
                     * target:移动停止的阈值
                     * speed :移动的速度,如果为正则向右移动,为负则向左移动
                     * 但是每次move都要传正负,不太好,希望程序自己可以判断
                     * 判断速度的正负值
                     * 如果从0向800移动,则speed为正
                     * 如果从800向0移动,则speed为负
                     * 
                     * attr  width top hegiht left
                     * 
                     * 回调函数 callback  动画执行完毕后执行。比如说执行向左还想执行向右,那就需要根据回调函数执行
                     */
                    function move(obj,target,speed,attr,callback){
                        
                        //清除上一个定时器
                        clearInterval(obj.timer);
                        
                        
    
                        //开启一个定时器,用来执行动画效果
                        //向执行动画的对象中添加一个timer属性,用来半寸它自己的定时器的标识。
                        obj.timer = setInterval(function(){
                            //获取box1原来的left值,通过复用的函数去获取,parseInt是把字符串的数字部分转换为number
                        var oldlvalue = parseInt(getStyle(obj,attr));
                        //判断是向左还是向右
                        if(oldlvalue>target){
                            speed = -speed;
                        }
                        
                        newvalue = oldlvalue + speed;
                        /*
                         * 判断newvalue是否大于800
                         * 从800向0移动
                         * 向左移动时,需要判断newvalue是否小于target
                         * 向右移动时,需要判断newvalue是否大于target
                         */
                        if((speed>0&&newvalue>target) || (speed<0&&newvalue<target)){
                            newvalue = target;
                        }
                        obj.style[attr] = newvalue + "px";
                        /*
                         * 控制移动的位置,当800px时,就停止移动
                         */
                        if(newvalue ===  target){
                            clearInterval(obj.timer);
                            callback && callback()
                        }
                        },300)
                        
                    }
                    //获取元素的值
                    function getStyle(obj,name){
                        if(window.getComputedStyle){
                            return getComputedStyle(obj,null)[name]
                        }
                        else{
                            return obj.currentStyle[name]
                        }
                        
                    }

    应用的时候只要引入就可以了

    <script type="text/javascript" src="../js/tools.js"></script>

  • 相关阅读:
    SpringSecurity实现权限管理和页面导航栏动态实现
    “菜鸟”程序员和“大神”程序员差距在哪里
    错误提示:Dynamic Performance Tables not accessible, Automatic Statistics Disabled for this session You can disable statistics in the preference menu,or obtanin select priviliges on the v$session,v$sess
    oracle的知识点总结
    linuxVim命令合集
    Spring Security 整合freemaker 实现简单登录和角色控制
    oracle 创建的表为什么在table里没有,但是可以查出来
    头发对我来说已经不重要了!
    IntelliJ Idea 常用快捷键列表
    Firefox 笔记
  • 原文地址:https://www.cnblogs.com/caicaihong/p/9353205.html
Copyright © 2020-2023  润新知