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