我如何使用jquery在窗口调整大小上缩放Raphael js元素

Min*_*iel 24 jquery svg raphael html5-canvas

如何Raphael在窗口更改时重新缩放画布内的所有元素?

考虑下面的代码/ DEMO如果我重新div container调整我的窗口大小只是缩放,因为我将其宽度设置为窗口宽度的50%而没有(rect,circlepath)更改

<div id="container"></div>?
 #container{border : 1px solid black ;
               width : 50% ;
               height:300px}?
var con = $("#container");
var paper = Raphael(con.attr('id'), con.attr('width'), con.attr('height'));
var win = paper.rect(0,0,400,300).attr({stroke: 'black' }) ; 
var path = paper.path("M 200 100 l 100 0 z") ; 
var cir = paper.circle(50, 50, 40);
Run Code Online (Sandbox Code Playgroud)

Eri*_*röm 31

如果您使用Raphaël2.0或更高版本,则可以选择调用paper.setViewBox来设置坐标系,然后让浏览器自动处理调整大小.

更新:好的,事实证明Raphaël的自动缩放程度比我想象的要少......无论如何,这是一个例子(raphaël仍然在根<svg>上设置绝对宽度/高度,所以它们需要被删除才能正常svg缩放发生).然后由CSS决定大小,svg恰好适合给定的区域.可以调整这个以处理溢出的内容,这可能是由于svg viewBox的纵横比与它所放置的CSS框不匹配而发生的.您可以通过向preserveAspectRatio根svg元素添加属性来完成此操作.

你可以阅读更多您可以在SVG设置的值preserveAspectRatio属性在这里,但是这三个值是可能感兴趣的是'none'(用于挤压/拉伸,以适应任何RECT给出), 'xMidYMid slice'(扩展到填充rect,可能是剪辑如果方面不匹配则离开某些部分),'xMidYMid meet'(这是默认值,与完全不指定pAR相同,意味着内容将居中,如果方面不匹配,将在一个方向溢出).

  • @mklement它仍然可以工作(firefox,opera),看起来像webkit最近更改/破坏然后(尝试http://jsfiddle.net/AUNwC/44/,它也设置CSS中的svg宽度/高度,然后你得到的东西在webkit中).您当然可以像您建议的那样手动调整大小,但实际上并不需要支持svg的浏览器 - 只需给它一个viewBox和一个要渲染的区域(使用CSS),它将以该大小呈现. (5认同)
  • 谢谢,Erik.事实证明,_your CSS修复无需删除`width`和`height`属性_ - 缩放以跨浏览器的方式工作,即使存在显式属性也是如此.我已经分道扬声,并在这里添加了更多评论:http://jsfiddle.net/mklement/7rpmH/为了更好的跨浏览器测试,我还通过明确指定拉伸/收缩而不保留纵横比来解决Raphael错误(`preserveAspectRatio ='none'`).缩放然后适用于当前版本的Chrome,Safari,FF,Opera - 不幸的是,在不同程度上 - 请参阅小提琴. (5认同)

小智 21

http://jsfiddle.net/vnTQT/

    var paper = Raphael("wrap");
    paper.setViewBox(0,0,w,h,true);
    paper.setSize('100%', '100%');
Run Code Online (Sandbox Code Playgroud)

将此(paper.setViewBox)与paper.setSize('100%','100%')一起使用并调整窗口大小,调整svg内容的大小,而不使用svg函数.