Jointjs 放大缩小问题

这篇博客介绍了如何在JointJS项目中通过监听鼠标滚轮事件来实现在页面鼠标位置为中心的放大缩小功能。通过handleCellMouseWheel函数处理滚轮事件,结合scaleToPoint方法进行坐标转换和矩阵缩放,确保了流程图的平滑缩放,并且缩放范围限制在MIN_SCALE和MAX_SCALE之间。
摘要由CSDN通过智能技术生成

在项目中使用了jointjs绘制高交互流程图,需要根据鼠标滚轮滚动实现放大缩小功能,缩放中心在页面鼠标处。最终核心实现代码如下:


handleCellMouseWheel = (cellView, e, x, y, delta) => {
		e.preventDefault();
		const oldScale = this.paper.scale().sx;
		const newScale = oldScale + delta * .1;
		scaleToPoint(newScale, x, y);
};

scaleToPoint = (nextScale, x, y) => {
		if (nextScale >= MIN_SCALE && nextScale <= MAX_SCALE) {
			const currentScale = this.paper.scale().sx;

			const beta = currentScale / nextScale;

			const ax = x - (x * beta);
			const ay = y - (y * beta);

			const translate = this.paper.translate();

			const nextTx = translate.tx - ax * nextScale;
			const nextTy = translate.ty - ay * nextScale;

			this.paper.translate(nextTx, nextTy);

			const ctm = this.paper.matrix();

			ctm.a = nextScale;
			ctm.d = nextScale;

			this.paper.matrix(ctm);
		}
	};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值