js setTimeout函数
最近在看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函数的更多相关文章
- js setTimeout 传递带参数的函数的2种方式
js setTimeout 传递带参数的函数的2种方式 Created by Marydon on 2018年9月14日 1.准备工作 function sayYourName(param) { ...
- JS中的setTimeout()函数
1.setTimeout() 方法 setTimeout() 方法用于在指定的毫秒数后调用函数或执行表达式.返回一个 ID(数字),可以将这个ID传递给 clearTimeout() 来取消执行. s ...
- js setTimeout运用
js setTimeout运用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...
- js:setTimeout 与 setInterval 比较
在javascript中有两个非常有用的函数:setTimeout 和setInterval ,都是定时器:但是两者存在着一些区别: 1. setTimeout函数 用法:setTimeout(fn, ...
- 浅谈setTimeout函数和setInterval函数
前几天学了js,看到了两个非常有趣的函数,他们分别是setTimeout函数和setInterval函数,这两个函数能使网页呈现非常一些网页中比较常见的效果,比如说图片轮播,等一些非常好玩的效果.下面 ...
- [概念] js的函数节流和throttle和debounce详解
js的函数节流和throttle和debounce详解:同样是实现了一个功能,可能有的效率高,有的效率低,这种现象在高耗能的执行过程中区分就比较明显.本章节一个比较常用的提高性能的方式,通常叫做&qu ...
- C# dll 事件执行 js 回调函数
C# dll 事件执行 js 回调函数 前言: 由于js 远程请求 XMLHttpRequest() 不支持多线程,所以用C# 写了个dll 多线程远程抓住供js调用. 最初代码为: C#代 ...
- js倒计时函数和(js禁用和恢复a标签的操作)
<script type="text/javascript"> /*获取手机号*/ var start_time=60; function get_phone_nums ...
- JS异步函数 返回值
1. js 异步的几种情况 : 1.1 异步操作由浏览器内核的 webcore 来执行: onclick 由浏览器内核的 DOM Binding 模块来处理,当事件触发的时候,回调函数会立即添加到任 ...
随机推荐
- log4net preserveLogFileNameExtension 和 watch
preserveLogFileNameExtension <log4net> <appender name="fileappender" type="l ...
- Expression Trees (C# and Visual Basic)
https://msdn.microsoft.com/en-us/library/bb397951.aspx Expression trees represent code in a tree-lik ...
- 79.员工薪水报表 Extjs 页面
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" ...
- Spring Boot (11) mybatis 关联映射
一对多 查询category中的某一条数据,同时查询该分类下的所有Product. Category.java public class Category { private Integer id; ...
- Hibernate基础(二)
Hibernate中的实体规则 创建实体类注意事项: 1.持久化类提供无参构造函数 2.成员变量私有 提供共有get set 方法 3.属性应尽量使用包装类 Integer.Float.Double等 ...
- ThreadPoolExecutor理解
ThreadPoolExecutor组成 ThreadPoolExecutor的核心构造函数: public ThreadPoolExecutor(int corePoolSize, int maxi ...
- Block的本质与使用
1.block的基本概念及使用 blcok是一种特殊的数据结构,它可以保存一段代码,等到需要的时候进行调用执行这段代码,常用于GCD.动画.排序及各类回调. Block变量的声明格式为: 返回值类型( ...
- 【Oracle】重命名数据文件
1)查看当前数据文件位置 SQL> select file_id,file_name,tablespace_name from dba_data_files; FILE_ID FILE_NAME ...
- AI:IPPR的数学表示-CNN结构进化(Alex、ZF、Inception、Res、InceptionRes)
前言: 文章:CNN的结构分析-------: 文章:历年ImageNet冠军模型网络结构解析-------: 文章:GoogleLeNet系列解读-------: 文章:DNN结构演进Histor ...
- C++多行文本读取
使用的多行读取的代码如下: //读取文本浮点数到多个模式 序列 bool CPicToolsDlg::readTxt2SeqMulti( std::string TxtName, std::vecto ...