首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Raphaeljs:复制元素或设置到另一张纸

Raphaeljs:复制元素或设置到另一张纸
EN

Stack Overflow用户
提问于 2013-05-22 17:11:20
回答 2查看 1.7K关注 0票数 1

是否可以将一张纸中存在的元素或集合添加到另一张纸中,而无需从头创建每个元素两次?

背景:我可视化了一个大的节点图,并想在一篇单独的论文中创建一个“概览图”。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-22 20:22:48

拉斐尔不允许将元素从一张纸直接移动到另一张纸上。因此,最好在目标论文中创建一个具有相同属性的新元素。我创建了以下示例方法。您可以将代码添加到页面中,并使用cloneToPaper函数将元素或集合克隆到另一张纸上。

代码语言:javascript
复制
function extractJSON(element) {
    var attr = element.attr(),
    newNodeJSON = {type: element.type},
    key;
    for (key in attr) {
        newNodeJSON[key] = attr[key];
    }
    return newNodeJSON;
}
/*
 * @param {Object} element: raphael element or set
 * @param {Object} paper: Target paper where to clone
 * @return {object}: newly created set or element
 */
function cloneToPaper(element, paper) {
    var isSet = element.type === 'set',
    elementJSONArr = [],
    i, ln, newSet;

    if (isSet) {
        ln = element.items.length;
        for (i = 0; i < ln; i += 1) {
            elementJSONArr.push(extractJSON(element.items[i]));
        }
    }
    else {
        elementJSONArr.push(extractJSON(element));
    }
    newSet = paper.add(elementJSONArr);
    return isSet ? newSet : newSet[0];
}
票数 1
EN

Stack Overflow用户

发布于 2013-05-23 16:59:20

下面的代码集将nw函数添加到拉斐尔集合和拉斐尔元素中。其用法是在任何集合或元素上简单地调用.cloneToPaper(targetPaper)

代码语言:javascript
复制
(function (R) {
    var cloneSet; // to cache set cloning function for optimisation

    /**
     * Clones Raphael element from one paper to another
     *     
     * @param {Paper} targetPaper is the paper to which this element 
     * has to be cloned
     *
     * @return RaphaelElement
     */
    R.el.cloneToPaper = function (targetPaper) {
        return (!this.removed &&
            targetPaper[this.type]().attr(this.attr()));
    };

    /**
     * Clones Raphael Set from one paper to another
     *     
     * @param {Paper} targetPaper is the paper to which this element 
     * has to be cloned
     *
     * @return RaphaelSet
     */
    R.st.cloneToPaper = function (targetPaper) {
        targetPaper.setStart();
        this.forEach(cloneSet || (cloneSet = function (el) {
            el.cloneToPaper(targetPaper);
        }));
        return targetPaper.setFinish();
    };
}(Raphael));

对于示例实现,您可以查看此小提琴:http://jsfiddle.net/shamasis/39yTS/

请注意,如果源元素上有事件,则不会将它们克隆到目标论文中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16687873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档