首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Raphael JS轮换组/不单独设置

问Raphael JS轮换组/不单独设置
EN

Stack Overflow用户
提问于 2013-08-27 07:49:01
回答 3查看 3.9K关注 0票数 2

我一直在玩Raphael,但是没有找到任何解决方案来将一组/一组路径作为组旋转,而不是单独地旋转。

一组/一组路径:

​

​

每个元素被旋转。不是整个组/集:

​

​

How How:

代码语言:javascript
复制
var bobble = map.paper.set();

bobble.push(map.paper.add([{
    "fill":fill,
    "stroke":"none",
    x: 50,
    y: 50,
    width: 100,
    height: 100,
    "type":"rect",
    "r": 4
},{
    "fill":fill,
    "stroke":"none",
    x: 100,
    y: 25,
    width: 200,
    height: 50,
    "type":"rect",
    "r": 4
}]));

bobble.rotate(45);

我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-27 15:38:55

给你,演示

代码语言:javascript
复制
var paper = Raphael('arrows');

var r1 = paper.rect(100,100,200,10,5).attr({fill:'white'});
var r2 = paper.rect(50,200,100,15,5).attr({fill:'white'});

var st = paper.set(r1,r2);

var l_coord = st.getBBox().x,
    r_coord = st.getBBox().x2,
    t_coord = st.getBBox().y,
    b_coord = st.getBBox().y2;

var cx = (l_coord + r_coord)/2,
    cy = (t_coord + b_coord)/2;

st.rotate(54,cx,cy);

​

​

由于需要获取Raphael set's中心坐标,所以可以使用getBBox()函数返回:

​

​

票数 7
EN

Stack Overflow用户

发布于 2013-08-27 15:25:18

raphaeljs集合是一个元素列表。因此,当您使用transform方法时,它只是对集合中列表中唯一元素的转换。

我为我的项目创建了一个支持g标记的插件。但我还没有实现转换方法。

代码语言:javascript
复制
const SVG = 'http://www.w3.org/2000/svg';
function TCRaphael(container, width, height) {
    var paper = new Raphael(container, width, height);
    paper.node = document.getElementById(container).getElementsByTagName("svg")[0];
    console.log(paper.node)
    paper.group = function (parent) {
        return new Group(parent);
    };

    function Group(parent) {
        var me = this;
        this.node = document.createElementNS(SVG, "g");
        if (typeof parent !== 'undefined') {
            if (typeof parent.node != 'undefined')
                parent.node.appendChild(me.node);
            else{
                parent.appendChild(me.node);
            }
        }

        this.append = function (child) {
            me.node.appendChild(child.node);
            return child;
        };

        this.appendNode = function (childNode) {
            me.node.appendChild(childNode);
        };

        this.appendTo = function (parent) {
            if (typeof parent !== 'undefined') {
                if (typeof parent.node != 'undefined')
                    parent.node.appendChild(me.node);
                else{
                    parent.appendChild(me.node);
                }
            }
        };

        this.remove = function(){
            me.node.parentNode.remove();
        };

        this.circle = function(x, y, r){
            return me.append(paper.circle(x, y, r));
        };

        this.ellipse =function(x, y, rx, ry){
            return me.append(paper.ellipse(x, y, rx, ry));
        };

        this.image = function(src, x, y, width, height){
            return me.append(paper.image(src, x, y, width, height));
        };

        this.path = function(pathString){
            return me.append(paper.path(pathString));
        };

        this.rect = function(x, y, width, height, r){
            return me.append(paper.rect(x, y, width, height, r));
        };

        this.text = function(x, y, text){
            return me.append(paper.text(x, y, text));
        }


    }
    return paper;
}

您可以添加更多要添加到TCRaphael的函数。

票数 1
EN

Stack Overflow用户

发布于 2014-06-12 13:42:21

我觉得比较容易点。

代码语言:javascript
复制
myset.transform("R45,20,20")

就像

代码语言:javascript
复制
myset.rotate(45,20,20)  // deprecated

否则,整个myset将在20、20(可能是该集合的中心)围绕中心旋转。

代码语言:javascript
复制
myset.transform("R45")

将围绕它自己的中心旋转集合的每一个元素

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

https://stackoverflow.com/questions/18459850

复制
相关文章

相似问题

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