手动更新svg的transform属性后可能出现缩放移动时的跳跃现象

手动更新svg的transform属性后可能出现缩放移动时的跳跃现象

情况概述:

实现在svg画布上进行某元素定位,将视图坐标更换成功后,进行移动缩放操作,页面出现坐标跳跃。

问题原由:

一般在缩放事件中更新transform属性时会读取d3.event.scale和d3.event.translate中的值获得当前的缩放比例和平移值。当在事件以外更新时,元素虽然实现了指定的换值,可是d3.event中的值并无更新,因此再次缩放时依然实在旧的参数上计算新的变换参数,从而致使新的参数可能与实际的参数差别很大。

解决方法:

d3.event.scale和d3.event.translate参数实际上来自与svg元素的__zoom属性,该属性包含三个参数:k,x,y;分别对应scale,translate[0]和translate[1],因此若是在事件以外修改transform属性,只须要同步修改上面提到的属性就行了。

解决方法示例代码:
//定位某元素
document.getElementById("root").setAttribute("transform", "translate(" + (12000-(currX)) + ", " + (4000-(currY)) + ") scale("+1.1+")")

//更改zoom值
d3.select("#powerSVG")._groups[0][0].__zoom.x= (12000-(currX)) -4368.810923307491/ 0.6040000000000003 * 1.1 ; 
d3.select("#powerSVG")._groups[0][0].__zoom.y= (4000-(currY)) - 3033.5091844923377/ 0.6040000000000003 * 1.1 ;
d3.select("#powerSVG")._groups[0][0].__zoom.k=1.1; 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值