最近在看JS DOM编程艺术,在第十章的动画里面有个setTimeout函数的例子中涉及了很多的引号,研究了好大一会才看明白,综合网上各个大神的解释和自己的理解,其原理是这样的:

首先看下程序源代码:

 function moveElement(elementID,final_X,final_Y,interval){
if(!document.getElementById) return false;
if(!document.getElementById(elementID)) return false;
var elem = document.getElementById(elementID);
var xpos = parseInt(elem.style.left);
var ypos = parseInt(elem.style.top);
if (xpos==final_X && ypos==final_Y){
return true;
}
if(xpos<final_X){
xpos++;
}
if(xpos>final_X){
xpos--;
}
if(ypos<final_Y){
ypos++;
}
if(ypos>final_Y){
ypos--;
}
elem.style.left = xpos +"px";
elem.style.top = ypos +"px";
var repeat = "moveElement('"+elementID+"',"+final_X+","+final_Y+","+interval+")";
moveMent = setTimeout(repeat,interval);
}
这段代码的功能是通过elementID获得元素每隔interval的时间移动元素的位置至final_X,final_Y。
为了使函数能够一直执行到最终位置需要调用setTimeout来循环执行,可能很多初学者像我一样卡在了repeat变量这里。我们首先看setTimeout(code,millisec),其中code可以为字符串或者函数,在本例中作者采用了字符串的形式来传值。如果我们相用字符串的话需要将变量 elementID final_X final_Y interval 和其他的常量一起拼起来做成如下的效果:
setTimeout(moveElement('elementID',final_X,final_Y,interval),interval).
也就是说setTimeout 里面的repeat = moveElement('elementID',final_X,final_Y,interval) 那么拼接前是这样的:
moveElement('
elementID
',
final_X
,
final_Y
,
interval
)
字符串的拼接只需要在每个字符上面加上双引号就行了 最终就是: repeat = "moveElement('"+elementID+"',"+final_X+","+final_Y+","+interval+")";
特别注意不要把 "" 给弄混掉了。 另外如果直接传给setTimeout变量函数的话是这样的:
repeat = function(){moveElement(elementID,final_X,final_Y,interval)};
这样更容易读一些,效果也完全一样。

js setTimeout函数的更多相关文章

  1. js setTimeout 传递带参数的函数的2种方式

      js setTimeout 传递带参数的函数的2种方式 Created by Marydon on 2018年9月14日 1.准备工作 function sayYourName(param) { ...

  2. JS中的setTimeout()函数

    1.setTimeout() 方法 setTimeout() 方法用于在指定的毫秒数后调用函数或执行表达式.返回一个 ID(数字),可以将这个ID传递给 clearTimeout() 来取消执行. s ...

  3. js setTimeout运用

    js setTimeout运用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...

  4. js:setTimeout 与 setInterval 比较

    在javascript中有两个非常有用的函数:setTimeout 和setInterval ,都是定时器:但是两者存在着一些区别: 1. setTimeout函数 用法:setTimeout(fn, ...

  5. 浅谈setTimeout函数和setInterval函数

    前几天学了js,看到了两个非常有趣的函数,他们分别是setTimeout函数和setInterval函数,这两个函数能使网页呈现非常一些网页中比较常见的效果,比如说图片轮播,等一些非常好玩的效果.下面 ...

  6. [概念] js的函数节流和throttle和debounce详解

    js的函数节流和throttle和debounce详解:同样是实现了一个功能,可能有的效率高,有的效率低,这种现象在高耗能的执行过程中区分就比较明显.本章节一个比较常用的提高性能的方式,通常叫做&qu ...

  7. C# dll 事件执行 js 回调函数

      C# dll 事件执行 js 回调函数   前言: 由于js 远程请求  XMLHttpRequest() 不支持多线程,所以用C# 写了个dll 多线程远程抓住供js调用. 最初代码为: C#代 ...

  8. js倒计时函数和(js禁用和恢复a标签的操作)

    <script type="text/javascript"> /*获取手机号*/ var start_time=60; function get_phone_nums ...

  9. JS异步函数 返回值

    1.  js 异步的几种情况 : 1.1 异步操作由浏览器内核的 webcore 来执行: onclick 由浏览器内核的 DOM Binding 模块来处理,当事件触发的时候,回调函数会立即添加到任 ...

随机推荐

  1. oc26--Property,省略setget的声明

    // // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject { int _age; } /* ...

  2. splay树入门(带3个例题)

    splay树入门(带3个例题) 首先声明,本教程的对象是完全没有接触过splay的OIer,大牛请右上角.. PS:若代码有误,请尽快与本人联系,我会尽快改正 首先引入一下splay的概念,他的中文名 ...

  3. IJ-Error:常见错误

    ylbtech-IJ-Error:常见错误 1.返回顶部 1. This application has no explicit mapping for /error, so you are seei ...

  4. uva1084

    状压dp+凸包 并没有看出来凸包的性质 首先答案一定在凸包上,然后每个凸包的角加起来是一个圆,那么就相当于凸包周长加一个圆了.然后预处理,再状压dp计算即可. #include<bits/std ...

  5. PCB Windows远程桌面一键登录

    开发时会经常需远程操作服务器,每次运行再也熟悉不过的命令 mstsc 或 mstsc -v  120.79.36.65 远程到目标服务器, 每次需输入密码,弹出烦人的 如何免密码一键登录呢,其实微软已 ...

  6. javascript之模块加载方案

    前言 主要学习一下四种模块加载规范: AMD CMD CommonJS ES6 模块 历史 前端模块化开发那点历史 require.js requirejs 为全局添加了 define 函数,你只要按 ...

  7. go的基础数据类型

    一.基础数据类型 在go语言中,数据类型用于申明函数和变量 go语言的类型 数据类型 描述 布尔型 布尔型值的只能是true 和 false ,例如 var b bool = true, 布尔型值声明 ...

  8. android ui篇

    android ui篇主要做两件事情. 第一件事情就是能够自己去定义基本的简单的界面. 第二件事情就是能够使用开源library去构造一些复杂的界面. 第一件事情就需要对于布局等方面知识有着基本的掌握 ...

  9. POJ 1985 求树的直径 两边搜OR DP

    Cow Marathon Description After hearing about the epidemic of obesity in the USA, Farmer John wants h ...

  10. MemcachedClient 使用说明

    上一篇介绍了Memcached基本使用方法<Memcached使用手册>,下面介绍java如何操作memcached.使用的是java_memcached-release_2.6.6. 一 ...