关于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 相关文章推荐
DIV始终居中的js代码
Feb 17 Javascript
在JavaScript中正确引用bind方法的应用
May 11 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
May 19 Javascript
jquery 实现回车登录详解及实例代码
Oct 23 Javascript
详解angular中通过$location获取路径(参数)的写法
Mar 21 Javascript
Vue的Flux框架之Vuex状态管理器
Jul 30 Javascript
AngularJS 表单验证手机号的实例(非必填)
Nov 12 Javascript
layui表格checkbox选择全选样式及功能的实例
Mar 07 Javascript
微信小程序实现留言功能
Oct 31 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
Vue多环境代理配置方法思路详解
Jun 21 Javascript
微信小程序全选多选效果实现代码解析
Jan 21 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
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
jQuery实现大图轮播
2017/02/13 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
Vue-resource拦截器判断token失效跳转的实例
2017/10/27 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
vue-cli随机生成port源码的方法
2019/09/02 Javascript
解决layui弹出层layer的area过大被遮挡的问题
2019/09/21 Javascript
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
Python的GUI框架PySide的安装配置教程
2016/02/16 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
浅谈html5增强的页面元素
2016/06/14 HTML / CSS
大二自我鉴定
2014/01/31 职场文书
感情真挚的毕业生求职信
2014/07/19 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
2015年酒店前台工作总结
2015/04/20 职场文书
2015入党自传格式范文
2015/06/26 职场文书
MySQL中distinct和count(*)的使用方法比较
2021/05/26 MySQL
浅谈MySQL之select优化方案
2021/08/07 MySQL
python语言中pandas字符串分割str.split()函数
2022/08/05 Python
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript