D3.js的放大,缩小和平移功能:

D3.js的放大,缩小和平移功能:
d3的版本放上

"d3": "^7.0.0",

做这块功能的时候绞尽脑汁想了半天,觉得这块功能实现挺复杂的,在网上找了很多方式,结果由于d3版本的原因,好多没有生效,后来看了一晚上官方文档,以及别人的使用,最终给实现出来了

const svg = d3
        .select("#container5")
        .append("svg")
        .attr("id", "svg")
        .attr("width", 640)
        .attr("height", 480)
        .attr("viewBox", [0, 0, 640, 480]);
      svg
        .append("g")
        .attr("id", "image-g")
        .append("image")
        .attr("class", "control-img")
        .attr("height", this.height)
        .attr("width", this.width)
        .attr("href", imageUrl);


      svg.call(d3.zoom()
        .extent([[0, 0], [648, 480]])
        .scaleExtent([0.5, 100])
        .on("zoom", zoomed));


      function zoomed ({transform}) {
        let g = d3.selectAll('g')
        g.attr("transform", transform);
      }

(1)这串代码起的功能是平移作用,后边数字640和480是我的画布宽和高,意思是我的画布移动的可视范围是640✖️480,脱离这个区域,图片就看不见了

.attr("viewBox", [0, 0, 640, 480]);

(2)这串代码是来控制平移功能的

.extent([[0, 0], [648, 480]])

(3)这串代码是用来指定放大和缩小功能的范围

.scaleExtent([0.5, 100])

上述总结只是可以实现,具体的实现原理我还接触不深,有时间我会多看看文档,到时候有收获再更

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Realistic-er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值