2013-03-26 45 views
0

我有一个拉斐尔纸的作品像谷歌地图。是否可以在Raphael中创建unzoom元素?

有一个像地图一样的主要内容,许多覆盖层都附着在它上面,就像Google地图上的针和标记一样。

所以当我缩放时,我想要缩放主要内容,并且这些覆盖图需要移动到正确的位置,但保持原有的尺寸。 (例如,在Google地图中,缩放城市时,这些叠加层将始终附加到屏幕上具有相同大小的正确地址)。

我目前正在创建数千篇论文,并在发生缩放时手动保持其位置。但是这会导致很多工作。 所以我很有兴趣知道是否可以在一张纸上绘制所有东西。只是做一些魔术来阻止这些元素在变焦发生时被调整大小。 类似于:

paper.rect(0, 0, 10, 10).attr({resize: false}) 

回答

0

您只需要两篇论文。把一个放在另一个之上。放大底部纸张时,请使用setViewBox。在顶部纸上,重新计算位置并翻译(.transform('T...))每个元素。

+0

我希望可以避免计算位置,因为我也处理大量的拖动和移动。有没有办法让纸张自己处理位置? – xzhang 2013-03-26 22:23:35

0

这是不可能的。即使你设置了调整大小:虚幻地假,你需要移动每个标记到一个新的位置。

我可以给你,我独自使用功能:

markAdjustPosition : function(mark){ 
     var w = mark.data('width'); 
     var h = mark.data('height'); 
     var dx = w/2 - w/(2*_data.scale); 
     var dy = h - h/_data.scale; 
     mark.attr({width: w/(_data.scale), height: h/(_data.scale)}).transform('t'+dx+','+dy); 
}, 

此功能将重新定位考虑到标记的目标点是底部边缘(如在谷歌地图标记)的中间标记。

mark至于你传给这个函数的是拉斐尔的元素。你必须正确的默认宽度/高度添加到它的开头:

Mark.data("width") = 12; 
Mark.data("height") = 24; 

_data是我在插件中的所有数据全局对象和_data.scale是当期的规模(这你需要在每个缩放级别上进行计算)。

相关问题