Snap.svg对<use>标签调用transform()方法报错 求可行解决方案
Snap.svg 对
报错原因
错误核心是Snap.svg的transform方法默认需要调用getBBox()计算变换基点,而
可行解决方案
方案1:CSS替代实现(最推荐)
无需改动JS和现有DOM结构,直接用CSS原生变换实现效果,性能更优且无兼容问题:
.markerpoint { /* 按你的业务需求设置变换原点,这里直接用你元素上定义的cx、cy值更精准 */ transform-origin: 48px 45px; transition: transform 0.2s ease; /* 可选,加过渡动画更顺滑 */ } .markerpoint:hover { transform: scale(1.5); }
方案2:外层包裹标签适配Snap逻辑
如果必须通过Snap实现复杂变换逻辑,只需要给
<g class="markerpoint"> <use x="47.46" y="44.64" cx="48" cy="45" id="9zh7" href="#msi_plane"></use> </g>
原有JS逻辑不用修改,即可正常调用transform方法。
方案3:手动指定变换基点,绕过BBox计算
如果不想改动DOM结构,可以在调用transform时主动传入变换基点参数,让Snap跳过BBox读取逻辑,同时修正原代码的局部变量作用域问题:
$('.markerpoint').hover( function() { var mySnapElement = Snap(this); // 传入全量变换参数:横向缩放、纵向缩放、变换基点x、变换基点y mySnapElement.transform('s1.5,1.5,48,45'); }, function() { var mySnapElement = Snap(this); mySnapElement.transform('s1,1,48,45'); } )
注:原代码第二个hover回调中直接调用了第一个回调内的局部变量
mySnapElement,存在作用域问题,上述方案均已修正该问题。
内容的提问来源于stack exchange,提问作者gaurav
相关产品推荐
相关产品推荐

