Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数在循环中的Javascript Raphael问题_Javascript_Function_For Loop_Raphael - Fatal编程技术网

函数在循环中的Javascript Raphael问题

函数在循环中的Javascript Raphael问题,javascript,function,for-loop,raphael,Javascript,Function,For Loop,Raphael,请容忍我,我对Javascript还是新手 这里有两把小提琴。它们之间唯一的区别是一个有一个文本对象作为标题,而另一个没有;但这种差异深刻地影响了当我将鼠标移到圆形对象上时发生的事情 我想要的是第二把小提琴的行为,当有一个像第一把小提琴一样的标题时 我一直在试图找出如何让我的函数退出循环,这样JSHint就不会再给我错误了。。。我觉得这种行为是由于我对闭包、绑定等缺乏理解造成的 //小提琴1的代码:小提琴2的唯一区别是所示部分被注释掉 var rsr=Raphael(“持有人”、“1160”

请容忍我,我对Javascript还是新手

这里有两把小提琴。它们之间唯一的区别是一个有一个文本对象作为标题,而另一个没有;但这种差异深刻地影响了当我将鼠标移到圆形对象上时发生的事情

我想要的是第二把小提琴的行为,当有一个像第一把小提琴一样的标题时

我一直在试图找出如何让我的函数退出循环,这样JSHint就不会再给我错误了。。。我觉得这种行为是由于我对闭包、绑定等缺乏理解造成的

//小提琴1的代码:小提琴2的唯一区别是所示部分被注释掉
var rsr=Raphael(“持有人”、“1160”、“1400”);
//在下一个提琴中,这将被注释掉
rsr.text(220,50,'标题').attr({
“字体大小”:32,
“文本锚定”:“中间”
});
//在小提琴2中结束注释
var cir=[];//一排圆圈
var xco=[206144.9317.4317.5];//圆心的x坐标
var yco=[167.7231.8191.4256.8];//圆心的y坐标
var rd=[25.5,46,34,18.5];//圆半径
var circcolr=['#939dac'、'#000000'、'#ecea5a'、'#0da9f2'];//填充圆的颜色
对于(var i=0;i<4;i++){//循环绘制圆
cir[i]=rsr.圆(xco[i],yco[i],rd[i]);
cir[i].attr({
填充:circcolr[i],
“填充不透明度”:1,
中风:“没有”
});
}
用于(cir中的var i){
(功能(st){
控制台日志(st.id);
st.node.onmouseover=函数(){
圣动画({
r:rd[st.id]*1.2
}, 200);
};
st.node.onmouseout=函数(){
圣动画({
r:rd[st.id]
}, 100);
};
})(cir[i]);
}

答案就在您已经在做的控制台日志记录中

  • 在第一种情况下,创建5个对象,即标题和4个圆,以便标题id=0,圆id=1、2、3和4

  • 在第二种情况下,您仅创建圆,使其id=0、1、2、3

当您索引到rd数组中时,在标题框中您将被关闭1。将最后的代码更改为此,使其工作方式相同

for (var i in cir) {
    (function (cir, i) {
        console.log(cir[i]);
        cir[i].node.onmouseover = function () {
            cir[i].animate({
                r: rd[i] * 1.2
            }, 200);
        };
        cir[i].node.onmouseout = function () {
            cir[i].animate({
                r: rd[i]
            }, 100);
        };
    })(cir, i);
}

因为一个错误,我很尴尬。。。尽管我对javascript很陌生,但我还是混淆了对象的ID号和数组的索引号。谢谢你的帮助。
for (var i in cir) {
    (function (cir, i) {
        console.log(cir[i]);
        cir[i].node.onmouseover = function () {
            cir[i].animate({
                r: rd[i] * 1.2
            }, 200);
        };
        cir[i].node.onmouseout = function () {
            cir[i].animate({
                r: rd[i]
            }, 100);
        };
    })(cir, i);
}