RaphaelJS Set.forEach()

时间:2012-01-27 14:25:42

标签: javascript raphael

我在文档raphaeljs中读到Set.forEach的描述,并且无法理解 这个怎么运作。请任何人都可以给我一个使用示例。

3 个答案:

答案 0 :(得分:18)

这里有一个有效的例子:

http://jsfiddle.net/9X6rM/

这是它的重要部分:

set.forEach(function(e){
    e.attr({fill:'#000'})
})

起初它有点棘手,但是当它得到它时它非常方便。您需要将要在每个元素上执行的函数传递给forEach()方法,并且此函数需要像参数一样具有绑定到元素的变量名称。因此,在这种情况下,e是正在处理的矩形。知道了吗?

答案 1 :(得分:3)

This thread非常有助于了解forEach的工作原理

编辑:

您在Raphaël Documentation

中有一个有效的例子
Raphael.el.red = function () {
    this.attr({fill: "#f00"});
};
Raphael.st.red = function () {
    this.forEach(function (el) {
        el.red();
    });
};
// then use it
paper.set(paper.circle(100, 100, 20), paper.circle(110, 100, 20)).red();

答案 2 :(得分:2)

Raphael forEach文档中遗漏了一些内容:

传递给您定义的函数的内容

set.forEach(function(element, index){
    element.attr({fill:'#000'});
    alert('This is the element that can be accessed as set['+index+']');
})

传递给回调函数的两个参数:

  1. 目前正在研究的Raphael元素。
  2. 索引号,表示该集合中Raphael元素的位置。
  3. 拉斐尔this周期范围内的

    forEach与周围的函数没有变化(与jQuery的.each()不同)。

    可能发生崩溃或意外行为

    • 与jQuery的.each()函数不同,Raphael的.forEach()如果传递了一个单独的Raphael元素而不是一个集合,则会崩溃。如果变量可能包含一个元素,或者可能包含一组多个元素check what type of Raphael object it is first
    • 如前所述,Raphael的.forEach()并没有像jQuery那样创建一个闭包 - 它实际上只是一个数组的迭代。每次迭代中的变量在该迭代中不会被“冻结”,可以通过以下迭代覆盖它们。