javascript - 连接拉斐尔集

标签 javascript arrays svg raphael concatenation

Raphaël library ,您可以创建集合,它们是保存 Raphaël 元素的类似数组的对象,并且可以在调用元素方法时隐式循环这些元素。问题是,虽然这些集合是类似数组的,但并非 Array 中的所有函数。原型(prototype)可用于拉斐尔套装,包括 Array.concat() 。如何将两个拉斐尔集连接成一个新集?我不想修改任何原始集。

最佳答案

好吧,我想到了一个办法。 secret 在于拉斐尔集有一个名为 items 的未记录属性。 ,这是该集合所包含的 Raphaël 元素的普通数组。

拉斐尔的一套确实有类似Array.splice()的东西方法,用于从数组中删除和插入元素。 Array.splice() 的语法是 anArray.splice(startingIndex, numberOfItemsToRemove, itemToInsert[, anotherItemToInsert...]) 。该函数创建一个空集,它们只是 splice将两个现有集合中的项目放入新集合中。在这种情况下,startingIndexnumberOfItemsToRemove应该是0因为新集合有 length0 ,这意味着唯一的索引是 0并且您不可能删除超过 0元素。

下面的函数利用了 JavaScript 的 function.apply()方法splice() (如 splice.apply() )。 apply()有两个参数:一个分配给 this 的值函数内的关键字和成为函数参数的数组。我们可以创建一个数组来传递给 apply()作为 splice() 的参数。该数组中的前两项是 startingIndexnumberOfItemsToRemove ,所以它们都将被设置为 0 。所有后续参数都是要插入到新集合中的项目。我们可以用 [0, 0] 初始化这个数组,这是一个真正的数组,确实concat()方法。我们现在要做的就是concat()每个集合的元素,我们可以从 item 中获取集合的属性,到 [0, 0] 的末尾,创建一个参数数组,该数组将传递给 splice()新的空集的方法。

function concatSets(paper, setA, setB){
    var newSet = paper.set(); // Creates a new, empty set
    newSet.splice.apply(newSet, [0, 0].concat(setA.items, setB.items));
    return newSet;
}

下面的函数可以根据需要连接任意数量的集合;只需传入一个集合数组作为第二个参数,并将纸张对象作为第一个参数。如果arrayOfSets.length == 1 ,那么该函数只是创建该集合的副本。

function concatManySets(paper, arrayOfSets){
    var i, newSet, argsToPass;
    argsToPass = [0, 0]; // The first two parameters of a normal call to Array.splice()
    newSet = paper.set(); // Creates a new, empty set
    for(i = 0; i < arrayOfSets.length; i++){
        argsToPass = argsToPass.concat(arrayOfSets[i].items);
    }
    newSet.splice.apply(newSet, argsToPass);
    return newSet;
}

关于javascript - 连接拉斐尔集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17893400/

相关文章:

javascript - Omniture PageName 在 Omniture 套件中跟踪自定义页面名称和页面 URL 我只想跟踪自定义页面名称

javascript - 有效的查询参数 - 在 URL 中传递数据

javascript - 选择面时更改 block 引号

jQuery Mozilla Firefox svg.height() 错误?

svg - 将 clipPath 应用于转换后的 g 元素

javascript - knockout 自动完成实现

javascript - 使用 $.each 后如何更新数组的索引

javascript - 在一定时间间隔后更新 react 状态

javascript - JSON.parse 错误 Javascript

javascript - 将箭头颜色与 D3 中的线条颜色匹配