2013-03-05 110 views
15

当使用“画布=新fabric.Canvas(”富“)”,织物转换具有与宽度的CSS类画布元素= 100%附着到它变成类似的东西:Fabric.js:可能有100%宽度的画布?

<div class="canvas-container" style="position: relative" width="293px"> 
    <canvas class="upper-canvas"></canvas> 
    <canvas class="lower-canvas" id="c"></canvas> 
</div> 

缠绕div以及两个画布元素都获取样式标签和固定宽度/高度。在初始化方面,我只找到了canvas.setWdith,虽然只有数值(没有百分比值)。

有没有办法将Fabric初始化为尊重/使用给定的100%宽度?

更新: 例子:http://jsfiddle.net/thomasf1/kb2Hp/

+0

似乎没有办法设置宽度为100%,试图通过CSS,面料以迫使其时按预期停止工作。 – thomasf1 2013-03-05 04:48:18

+1

解决方案 - http://stackoverflow.com/a/8486324/104380 – vsync 2013-05-19 13:18:13

回答

6

我不知道,如果你能明确告诉面料使用100%的宽度,但是可能通过$('.canvas-container').width()document.getElementById('canvas-container').clientWidth得到canvas-container的宽度,然后该值使用canvas.setWidth ?例如: -

canvas.setWidth($('.canvas-container').width()); 


普罗蒂普:还要记得设置这个窗口上调整大小,以防止任何内容溢出。

+0

小的改变,但'帆布容器'注入作为一个类,而不是一个ID。所以它应该是'.canvas-container'而不是'#canvas-container' – 2016-10-31 08:35:32

1

因为canvas element,widthheight的性质需要在像素中使用。所以,Fabric不会在画布上使用百分比值。

attribute unsigned long width;
attribute unsigned long height;
17

大小调整结构的画布使用其对象和窗口innerWidth和innerHeight

(function(){ 
    var canvas = new fabric.Canvas('app'); 

    window.addEventListener('resize', resizeCanvas, false); 

    function resizeCanvas() { 
    canvas.setHeight(window.innerHeight); 
    canvas.setWidth(window.innerWidth); 
    canvas.renderAll(); 
    } 

    // resize on init 
    resizeCanvas(); 
})(); 
+2

确保去除调整大小 - 例如https://lodash.com/docs#debounce – drzaus 2015-01-14 21:59:15

+1

以防万一,如果有人想给特定的div尺寸 canvas.setHeight($('。yourDiv')。height()); canvas.setWidth($('。yourDiv')。width()); – saad 2016-02-29 10:11:15