setInterval多组定时器函数封装传参

昨天的例子是针对只有单个函数运行的结果,但是实际中可能会有多组函数这样同时进行,那么这个时候就要对函数进行封装传参,来实现效果了。就还拿昨天的例子来说吧,昨天写的例子实现的效果是点击按钮,让div向前移动,那么今天就扩展一下,点击按钮让div向后移动,想要实现这个效果,就必须要传参了,来看代码:

css代码
<style>
#box{width:50px;height:50px;background:#ff6b0e;position: absolute;top:50px;left:50px;}
</style>

html代码
</head>
<body>
<input id="btn1" type="button" value="向前"/>
<input id="btn2" type="button" value="向后"/>
<div id="box"></div>
</body>

那么js实现是这样的:

<script>
    //兼容不同浏览器获取行间样式
    function getStyle ( obj, attr ) {
        return obj.currentStyle?obj.currentStyle[attr] : getComputedStyle( obj )[attr];
    }

    window.onload=function(){
        var aBtn1=document.getElementById("btn1");
        var aBtn2=document.getElementById("btn2");
        var oBox=document.getElementById("box");

        aBtn1.onclick=function(){
            fn(oBox,18,500)
        };
        aBtn2.onclick=function(){
            fn(oBox,-18,10)
        };
        //以上参数的区别是dir一个大于0,一个小于0,所以下面可以针对符号做判断
        //大于和小于这些符号是不能当参数被传的
        function fn(obj,dir,target){
            clearInterval(obj.timer);//这里先要清除一下定时器是为了防止一直点击按钮,div一直加速

            //开启定时器,假定让其等于500的时候,停止下来
            obj.timer=setInterval(function(){
                var speed=parseInt(getStyle(obj,"left")) + dir;

                if( speed > target && dir>0){//这里要做判断大于目标数并且dir为大于0的数
                    speed = target
                }
                if( speed < target && dir<0){//这里要做判断小于目标数并且dir为小于0的数
                    speed = target
                }
                obj.style.left= speed +"px";

                if( speed == target){
                    clearInterval(timer)
                }

            },50)

            }

    };
</script>

其实这个例子是很简单的,但是需要注意的细节是符号是不能向参数一样被传的,所以就要做判断,因为有大量相同的代码。那么就把共通的可以专门提出来卸载函数里,然后将可变化的值设定为参数来传递即可。这是比较通俗的说法,当然可能用语上会不太准确,但是能明白就行,也欢迎大神指出!

好了,今天就这样了!

时间: 2024-10-08 10:42:12

setInterval多组定时器函数封装传参的相关文章

Python之函数(一)定义函数以及传参

定义函数以及传参 函数的定义 def 函数名(): 函数体 例子: def func():#def关键字--定义 func函数名--和变量定义规则一样 ()必须要写格式 :声明 语句结束 s=[1,2,3] count=0 for i in s: count+=1 print(count) 调用函数: def my_len(): s = (1,2,23,3,4,5,6) count = 0 for i in s: count += 1 print(count) #调用函数 函数名+() myle

PHP_零基础学php_3PHP函数、传参函数、默认参数、函数返回值

<?php function say_hello() //无参数 { $name="tang"; echo "hello,".$name; echo "<br />"; echo "<hr />"; } say_hello();//函数调用 function say_helloS($some_name)//有参数 { echo "hello,".$some_name; echo

C#为什么不能像C/C++一样的支持函数只读传参

C#为什么不能像C/C++一样的支持函数只读传参? 这个问题其实问的人挺多的,我自己也经常想实现这个功能,但是发现总是那么的不尽人意. 有些人倒是给出了一下答案,但是都不能很好的解决像C/C++一样的支持函数只读传参这个问题. 其实这块我觉得我们可能有个误区.就是我们为什么要这样做呢?这样做的目的是什么?对了就是这个.答案也在这里面.关键就在这目的上.我们用C/C++可能有 function(Data const * const pcData),但是在C#里面没有了.感觉似乎少了点什么.对就是少

函数间传参实例(前一个函数产生的数据传到给后一个函数应用)

场景描述:A函数通过一系列的请求与执行,创建并产生订单 B函数获取该订单,然后查询该订单,获取订单信息 本次实例的关键就是,A产生的订单号,传给B,实现函数间传参 代码如下: import requests # 先导入包,这是必须的 import json ordid="190416111501017074" #A函数产生的订单号,具体过程不在此书写 #ordid为定义的变量,需要写到下面函数的括号中,可理解为把变量ordid传到函数search中 def search(ordid):

初识python 函数(定义,传参,返回值)

python基础(二): 菜鸟教程基础知识讲解的非常全面,内容选择我认为的重点输出一遍 函数: 定义一个函数: 你可以定义一个由自己想要功能的函数,以下是简单的规则: def fun(arg): pass return arg # 函数调用语法 fun(arg) arg:argument,参数(也叫prarmeter) ,任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数. def:define,定义,创建函数 ,函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()

C++类成员函数的传参问题

最近代码中经常会出现,成员函数传参经常会发生值传不进去的情况,也是比较低级的错误,这里整理一下供大家参考一下.   (1)成员变量名与形参名相同 World::World(unsigned maxContacts, unsigned iterators) { resolver = iterators; maxContacts = maxContacts; contacts = new ParticleContact[maxContacts]; calculateIterations = (ite

js函数的传参问题

<!Doctype html> <html> <head> <title>js的传参问题</title> <script type="text/javascript"> function get(username) { alert(username); } </script> </head> <body> <input type="button" val

js函数动态传参

js函数体内可以通过arguments对象来接收传递进来的参数,利用这一对象属性可以动态传参. function box() { return arguments[0]+' | '+arguments[1]; //得到每次参数的值 } alert(box(1,2,3,4,5,6)); //传递参数 arguments对象的length属性可以得到参数的数量. function box() { return arguments.length; //得到6 } alert(box(1,2,3,4,5

Java函数的传参机制

一 最近的一个项目,里面各种返回void,参数用引用类型,那叫一个熟和多,但是也把我绕糊涂了. 我就打算好好理一理java的传参机制,整理一番 二 很多人一听Java的传参,那一定会脱口而出,java都是值传递的.恭喜各位,答对了. 那么,传的是什么值? 如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的.如果在函数中改变了副本的值不会改变原始的值. 如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地