关于JS中setTimeout()无法调用带参函数问题的解决方法


Posted in Javascript onJune 21, 2016

本文实例分析了JS中setTimeout()无法调用带参函数问题的解决方法。分享给大家供大家参考,具体如下:

解决方法:重写setTimeout() 方法,需要用到闭包函数。如下:

var _st = window.setTimeout;
window.setTimeout = function(fRef, mDelay){
 if (typeof fRef == 'function') {
  var argu = Array.prototype.slice.call(arguments, 2);
  var f = function(){
    fRef.apply(null, argu);
  };
  return _st(f, mDelay);
 }
 return _st(fRef, mDelay);
}

有了这样的改写,用setTimeout()调用带参函数的时候,就可以用如下的形式:

setTimeout(fun,10,param);

其中,fun 是被函数;10为调用周期,单位是 毫秒;param是fun函数的参数。

另一种更为简单的方法:

function moveing(id,target_x,target_y,t){
 var ele = document.getElementById(id);
 //alert("divObject: "+ele)
 var xpos = parseInt(ele.style.left);
 //alert(ele.style.left)
 var ypos = parseInt(ele.style.top);
 if(xpos < target_x){
 xpos++;
 }
 if(ypos < target_y ){
 ypos++;
 }
 ele.style.left = xpos + "px";
 ele.style.top = ypos + "px";
//被递归调用的函数本身,拼成字符串形式,注意第一个参数的引号
 var repeat ="moveing('"+id+"',"+target_x+","+target_y+","+t+")"; 
 var movment = setTimeout(repeat,t);
}

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jQuery 表单验证插件formValidation实现个性化错误提示
Jun 23 Javascript
Javascript跨域请求的4种解决方式
Mar 17 Javascript
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
May 15 Javascript
多种方法实现load加载完成后把图片一次性显示出来
Feb 19 Javascript
javascript设计模式之工厂模式示例讲解
Mar 04 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
Feb 15 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
Sep 01 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
Sep 04 Javascript
使用Vuex解决Vue中的身份验证问题
Sep 28 Javascript
Vue运用transition实现过渡动画
May 06 Javascript
redux.js详解及基本使用
May 24 Javascript
Vue+Flask实现图片传输功能
Apr 01 Vue.js
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
Jun 21 #Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
Jun 21 #Javascript
带有定位当前位置的百度地图前端web api实例代码
Jun 21 #Javascript
jQuery中的ready函数与window.onload谁先执行
Jun 21 #Javascript
纯JS前端实现分页代码
Jun 21 #Javascript
jQuery AJAX timeout 超时问题详解
Jun 21 #Javascript
jQuery代码性能优化的10种方法
Jun 21 #Javascript
You might like
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
用PHP实现图象锐化代码
2007/06/14 PHP
PHP5+UTF8多文件上传类
2008/10/17 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
10个超级有用的PHP代码片段果断收藏
2015/09/23 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
jquery select选中的一个小问题
2009/10/11 Javascript
js parsefloat parseint 转换函数
2010/01/21 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
加载 Javascript 最佳实践
2011/10/30 Javascript
YUI Compressor压缩JavaScript原理及微优化
2013/01/07 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
微信小程序 location API接口详解及实例代码
2016/10/12 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
vue中axios处理http发送请求的示例(Post和get)
2017/10/13 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
JS 实现分页打印功能
2018/05/16 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
vue实现移动端拖动排序
2020/08/21 Javascript
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
Python远程桌面协议RDPY安装使用介绍
2015/04/15 Python
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
python远程邮件控制电脑升级版
2019/05/23 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
EJB发布WEB服务一般步骤
2012/10/31 面试题
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
违纪检讨书范文
2015/01/27 职场文书
openstack中的rpc远程调用的方法
2021/07/09 Python
SQL实现LeetCode(175.联合两表)
2021/08/04 MySQL