关于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 相关文章推荐
JavaScript中两种链式调用实现代码
Jan 12 Javascript
jQuery extend 的简单实例
Sep 18 Javascript
setInterval与clearInterval的使用示例代码
Jan 28 Javascript
JS实现一个列表中包含上移下移删除等功能
Sep 24 Javascript
jQuery选择器之基本选择器与层次选择器
Mar 03 Javascript
介绍一个简单的JavaScript类框架
Jun 24 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
Aug 06 Javascript
Angularjs之filter过滤器(推荐)
Nov 27 Javascript
教你一步步用jQyery实现轮播器
Dec 18 Javascript
JavaScript实现无穷滚动加载数据
May 06 Javascript
jQuery扇形定时器插件pietimer使用方法详解
Jul 18 jQuery
AJAX检测用户名是否存在的方法
Mar 24 Javascript
原生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
JAVA/JSP学习系列之六
2006/10/09 PHP
一些 PHP 管理系统程序中的后门
2009/08/05 PHP
php 上传功能实例代码
2010/04/13 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
JQuery的read函数与js的onload不同方式实现
2013/03/18 Javascript
js抽奖实现随机抽奖代码效果
2013/12/02 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
5种处理js跨域问题方法汇总
2014/12/04 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
Vue实现侧边菜单栏手风琴效果实例代码
2018/05/31 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
JS实现星星海特效
2019/12/24 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
关于ES6尾调用优化的使用
2020/09/11 Javascript
python使用scrapy解析js示例
2014/01/23 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
tensorflow 实现数据类型转换
2020/02/17 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
Baracuta官方网站:Harrington夹克,G9,G4,G10等
2018/03/06 全球购物
中科软测试工程师面试题
2012/06/16 面试题
大三学生入党思想汇报
2014/01/02 职场文书
2015年教研员工作总结
2015/05/26 职场文书
Pytest之测试命名规则的使用
2021/04/16 Python
Spring 使用注解开发
2022/05/20 Java/Android