Javascript:将函数作为变量传递并执行
Javascript : pass function as variable and execute it
我正在学习javascript,为此我正在创建一个简单的效果库,具有渐隐淡出等功能。一切工作正常,但它不执行我传递的函数,当效果完成时执行。
我得到错误
element[3] is not a function
我代码://add the effect
jlqAddEffect(document.getElementById("mainBoard"),"fadeout",10,function(){
alert("done"); //->>>I dont get this executed when the effect is done
});
//EFFECTS
var effectElements=new Array();
function jlqAddEffect(element,type,speed,func)
{
var effect=[element,type,setInterval(function(){jlqUpdateEffect(effect);},speed),func];//->>Here i pass the function in the 3d element of the array
effectElements.push(effect);
jlqInitEffect(effect);
}
function jlqInitEffect(element)
{
if(element[1]=="fadein")element[0].style.opacity=0;
if(element[1]=="fadeout")element[0].style.opacity=1;
}
function jlqUpdateEffect(element)
{
var done=false;
if(element[1]=="fadein"){
if(parseFloat(element[0].style.opacity)<1){
element[0].style.opacity=parseFloat(element[0].style.opacity)+0.01;
}
else done=true;
}
if(element[1]=="fadeout"){
if(parseFloat(element[0].style.opacity)>0){
element[0].style.opacity=parseFloat(element[0].style.opacity)-0.01;
}
else done=true;
}
if(done){
alert("effect done");//->>I get this executed when the effect is done
element[3](); // ->>here it should be calling the function but it gives me the error
clearInterval(element[2]);
effectElements.splice(effectElements.indexOf(element),1);
}
}
编辑:哦,我现在觉得自己很傻。问题不在我发布的代码上。我放了两个效果,一个当页面加载,一个当它关闭在页面加载时,我没有传递一个函数我只是有这个
jlqAddEffect(document.getElementById("mainBoard"),"fadein",10);
因为我没有传递一个函数元素[3]不是一个函数…
在Chrome中测试时出现了两个问题:
-
在
effectElements
变量初始化为数组之前调用jlqAddEffect()
函数,这会导致在尝试effectElements.push(effect);
时出现错误。通过将jlqAddEffect()
调用移动到代码的末尾,可以轻松修复。 -
你的动画从来没有真正完成,因为JavaScript的浮点运算(和/或在处理
opacity
属性时的一些奇怪的东西)阻止了不透明度一直到0
。它下降到0.009999999999999247
,然后被"卡住"。你可以通过测试不透明度是否大于0.01
而不是大于0
来解决这个问题。
演示:http://jsfiddle.net/nZpSs/1/
相关文章:
- 当JSON数据=变量时,需要执行循环
- 匿名自执行js函数内部的全局变量在外部仍然可用
- 当输入为变量时,.replace.不执行任何操作
- 如何执行“变量”ES6导入
- 流星技术/模式,用于等待数据库变量更改,然后在 in 之后执行某些操作
- 执行上下文和变量对象在 JavaScript 中实际上是一回事吗?
- 用php执行Javascript并回显一些变量
- 执行批处理文件的Javascript,该文件包含基于每个会话的环境变量设置
- 如何通过pickink外部变量在jsfiddle中执行javascript函数
- 如何将变量表达式转换为可执行代码(而不是替换值)
- toString似乎导致setTimeout不总是为toString的变量参数执行函数
- 在JavaScript或使用Chrome更改变量引用时,是否有暂停执行的方法
- Jquery:在Jquery的(字符串)变量中执行Jquery脚本
- javascript中的全局和局部变量执行上下文
- 是否可以存储javascript函数调用并在设置某些变量时执行它
- JSHINT:有没有办法忽略仅驼峰大小写属性并将其强制执行到变量和函数上
- 循环遍历数组匹配变量并分配要执行的条件
- 如何获取不同选项卡的实例,以便我可以存储变量/执行特定于各个选项卡的操作
- 在 AngularJS 中执行作用域函数内的服务后,范围变量不会更新
- 在字符串中执行变量