我正在使用SVGPanZoom在我的混合Android(出于所有意图和目的,与Chrome中相同的行为)应用中管理SVG图像的缩放。虽然缩放效果很好,但我发现了一个奇怪的问题。我原来的内联SVG元素是这样的
<svg id='puzzle' viewBox='0 0 1600 770' preserveAspectRatio='none'
width='100vw' height='85.5vh' fill-rule='evenodd' clip-rule='evenodd'
stroke-linejoin='round' stroke-miterlimit='1.414'
xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://
www.w3.org/1999/xlink'>
此SVG元素最初是空的,并在运行时从JavaScript中以编程方式填充,此后,我如下启动SVGPanZoom
var panZoom = svgPanZoom('#puzzle',
{panEnabled:false,controlIconsEnabled:false,
zoomEnabled:true,dblClickZoomEnabled:true,onZoom:postZoom});
panZoom.refreshRate = 10;
panZoom.zoomScaleSensitivity = 0.02;
我遇到的问题是-我希望我的SVG图像完全填充可用区域,100vw x 85.5vh
可以通过上面的preserveAspectRatio="none"
属性和{{1 }} zoomBox`属性被剥夺,我最终得到的图像在默认的拉伸/填充行为方面表现不佳。
SVGPanZoom已被广泛使用,所以我认为这种行为取决于我并没有正确设置它。浸入代码中,我发现SVGPanZoom创建了一个viewBox="0 0 1600 770" attribute. I have found that this works - so long as I don't use SVGPanZoom. As soon as I initiate panZoom the
,然后继续删除原始的zoomBox属性。
如果在缩放后可以正常工作并且应用程序的原始行为没有改变(这不是我所发现的),那还可以。我在这里做什么错了?
答案 0 :(得分:0)
我最近也遇到了这个问题。根据我的研究,这就是图书馆的工作方式。我选择暂时使用此限制,但是我发现了其他两个可能会按您期望的方式工作的库(我还没有尝试过):
我也尝试过PanZoom库,但这也遇到了相同的viewBox限制。
答案 1 :(得分:0)
任何遇到此线程的人的注释。最后,我放弃了SVGPanZoom并决定完全放弃使用任何平移/缩放库的路线。同时,我决定完全停止使用SVG viewBox
,并通过SVG转换完全自行处理所有缩放/平移。涉及的核心步骤
id
属性gOuter
viewBox
的原始0 0 1600 770
,打算占据屏幕宽度的100%和屏幕高度的85%。所以我的缩放比例是scaleX = 1600/window.innerWidth
和scaleY = 770/)0.85*window.innerHeight)
。gOuter.setAttribute('transform','0 0 scaleX,scaleY)
Ox,Oy
的对象,您将使用转换 gOuter.setAttribute('transform',
scale(scaleX,scaleY) translate(-Ox,-Oy) scale(2*scaleX,2*scaleY) translate(Ox,Oy))
放大x 2
。重要的事情要在这里理解
这使您可以完全控制缩放过程,并且附带的好处是,与使用平移/缩放库时相比,该操作变得更加平滑。