画布旋转 - Fabric js

穆图

我已经创建了一个画布元素并使用 fabric js 完成了旋转功能。一切正常。但是我只在 Windows 7 的 Chrome 浏览器中看到一组虚线指向画布的中心,在某些设备中也是如此,而不是在所有 Windows 7 和 chrome 组合中。请参阅以下链接“canvas_rotate”。有没有人遇到过这个问题。?画布_旋转

fabric.loadSVGFromString(svgStr, function(objects, options) {
        console.log("fabric.loadSVGFromString",svgStr)
            var obj = fabric.util.groupSVGElements(objects, options);
            obj.scaleToHeight(70) // Scales it down to some small size
            .scaleToWidth(70)
            .setTop(_t) // Centers it (no s**t, Sherlock)
            .setLeft(_l)

            // Centers it (no s**t, Sherlock)
            .setCoords();
            obj.set({lockUniScaling: true, shapeType:shapeType, cornerColor:'rgba(71,71,71,1)',  cornerSize: 17, cornerStyle : 'circle', transparentCorners: false, borderColor: 'rgba(71,71,71,1)', padding: -1});
            /*Rotation Icon*/
            obj.drawControls = function (ctx) {
                if (!this.hasControls) {return this;}
                var wh = this._calculateCurrentDimensions(),
                width = wh.x,
                height = wh.y,
                scaleOffset = this.cornerSize,
                left = -(width + scaleOffset) / 2,
                top = -(height + scaleOffset) / 2,
                methodName = this.transparentCorners ? 'stroke' : 'fill';

                ctx.save();
                ctx.strokeStyle = ctx.fillStyle = this.cornerColor;
                if (!this.transparentCorners) {
                    ctx.strokeStyle = this.cornerStrokeColor;
                }
                this._setLineDash(ctx, this.cornerDashArray, null);
                // top-left
                this._drawControl('tl', ctx, methodName,
                left,
                top);

                // top-right
                this._drawControl('tr', ctx, methodName,
                left + width,
                top);

                // bottom-left
                this._drawControl('bl', ctx, methodName,
                left,
                top + height);

                // bottom-right
                this._drawControl('br', ctx, methodName,
                left + width,
                top + height);
                if (this.hasRotatingPoint) {
                    var rotate = new Image(), rotateLeft, rotateTop;
                    rotate.src = 'content/assets/image/icon_rotate_canvas.png';
                    rotateLeft = left + width / 2;
                    rotateTop = top - this.rotatingPointOffset;
                    ctx.drawImage(rotate, rotateLeft, rotateTop, 17, 17);
                }
                ctx.restore();
                return this;
            }
            /*Rotation Icon Ends */
            canvasWrap.add(obj);

            canvasWrap.discardActiveObject();
            canvasWrap.setActiveObject(obj);
            canvasWrap.selection = false;
            canvasWrap.renderAll();
        });

我也尝试了一个简单的例子,但面临同样的问题。虚线指向画布中心点的中心。

simple_page_rotate 的屏幕截图

<html>
<head>
    <title>Page Title</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.22/fabric.min.js"></script>
    <script src="custom.js"></script>
</head>
<body>
    <canvas id="c" width="700px" height="500px" style="outline:1px solid red"></canvas>
    <!-- source: http://commons.wikimedia.org/wiki/File:Bort_znamia_3.svg -->
    <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
         width="57.08px" height="74.223px" viewBox="0 0 57.08 74.223" enable-background="new 0 0 57.08 74.223" xml:space="preserve">
    <path d="M6.572,43.413l0.505,7.576l50.003,0.505l-0.505-7.071L6.572,43.413z"/>
    <path d="M7.077,54.02l0.505,7.576l49.498,1.01l-0.505-7.071L7.077,54.02z"/>
    <path d="M7.582,65.131l0.505,8.586l48.993,0.505v-6.566L7.582,65.131z"/>
    </svg>
</body>

setTimeout(function(){ 

var svgEl = document.body.getElementsByTagName('svg')[0];
var serializer = new XMLSerializer();
var svgStr = serializer.serializeToString(svgEl);

var canvas = new fabric.Canvas('c');

var path = fabric.loadSVGFromString(svgStr,function(objects, options) {
  var obj = fabric.util.groupSVGElements(objects, options);
  obj.set({ left: 0, top: 0 })
    .setCoords();

  canvas.add(obj).renderAll();
});}, 0);

小提琴链接供您参考旋转的简单页面

穆图

该问题已通过使用 2.x 版本的 Fabric js 解决。请参阅下文。https://github.com/fabricjs/fabric.js/issues/5012

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用fabric.js在画布上免费绘制

来自分类Dev

Fabric.js橡皮擦问题画布

来自分类Dev

在Fabric.js中全屏显示画布

来自分类Dev

单击Fabric.js画布时如何获取图像的src?

来自分类Dev

使用Fabric.js选择画布上的所有对象

来自分类Dev

Fabric.js画布混合模式

来自分类Dev

iPad和iPhone中的Fabric.js画布闪烁

来自分类Dev

fabric.js画布监听键盘事件吗?

来自分类Dev

使用fabric.js的全屏画布模式

来自分类Dev

如何使用按钮从Fabric.js画布中删除图像

来自分类Dev

Canvas / Fabric.js .loadFromJSON()替换整个画布

来自分类Dev

Fabric.js画布上的GIF动画

来自分类Dev

缩放fabric.js画布对象

来自分类Dev

保存用fabric.js创建的画布

来自分类Dev

fabric.js调整画布大小以适合屏幕

来自分类Dev

使用Fabric.js启用和禁用画布的鼠标事件

来自分类Dev

如何使用Fabric.js实现画布平移

来自分类Dev

Fabric.js在画布上的图像上分层文本

来自分类Dev

Fabric.js画布图像抗锯齿

来自分类Dev

如何在画布上更改SVG颜色-Fabric.js

来自分类Dev

调整画布的背景图像大小-Fabric.js

来自分类Dev

Fabric.js:如何计算旋转组内对象的画布相对位置

来自分类Dev

Fabric.js-淡出对象并从画布中删除

来自分类Dev

Fabric.js画布选择位置不正确

来自分类Dev

SVG无法使用Fabric.js在画布上正确渲染

来自分类Dev

Fabric.js中彼此重叠的两个画布

来自分类Dev

Fabric.js:如何计算旋转组内对象的画布相对位置

来自分类Dev

JS画布中ctx的旋转线

来自分类Dev

fabric.js 围绕画布中心平滑地旋转对象