react中svg平移缩放,setState之后回到初始位置的问题

3 篇文章 0 订阅

svg-pan-zoom平移缩放问题

之前项目中使用了react-svg用于展示svg,svg-pan-zoom用于svg的平移缩放。最近发现当页面进行setState之后,svg后重新加载生成,造成之前平移缩放的操作失效,svg回到初始位置,记录一下方便以后查找。

svg-pan-zoom依赖包

 /**
     * Pan to a rendered position
     *
     * @param  {Object} point {x: 0, y: 0}
     * @return {Instance}    Current instance
     */
    pan(point: Point): Instance;
 	 /**
     * Pan to a rendered position
     * 平移到渲染的位置
     * @param  {Object} point {x: 0, y: 0}
     * @return {Instance}    Current instance
     */
    pan(point: Point): Instance;
     /**
     * Get pan vector
     * 得到平移向量
     * @return {Object} {x: 0, y: 0}
     * @return {Instance}    Current instance
     */
    getPan(): Point;

	/**
     * Get zoom scale/level
     * 得到缩放尺度/水平
     * @return {float} zoom scale
     */
    getZoom(): number;
    
	zoomBy(scale: number): Instance;

	// 将缩放级别设置为 2 
	//panZoomTiger.zoom(2);
	// 放大 130% 
	//panZoomTiger.zoomBy(1.3);

	----------------------------------------------
	//在setState之前先获取svg的缩放尺寸和平移向量
	//setState完成之后设置缩放尺寸和平移向量

	

	// 获取实例
	let panZoomTiger = svgPanZoom('#demo-tiger');
	let getZoom = panZoomTiger.getZoom();
    let panPoints = panZoomTiger.getPan();
	this.setState({
		flag:!this.state.flag
	},() =>{
		//我的项目中svg重新生成加载了,使用panZoomTiger无效
		let _panZoomTiger = svgPanZoom('#demo-tiger');
		_panZoomTiger.zoom(getZoom );//zoomBy也可
		_panZoomTiger.pan(panPoints );
	});

	

项目中代码(请忽略)

<ReactSVG svgStyle={{ background: config.svgbackground, width: '99%', height: svgHeight + 'px', }} 
src={path2} path={path2} ref={this.SVGRef2} />

myWebsocket.ticker.on('updateAreaYCPointData', (data) => {
            if (data != null) {
                 //console.log("Diagram: ", data);
                let svg_Label = ReactDOM.findDOMNode(this.SVGRef2.current);
                let mySVG = svg_Label.querySelector('svg');
                 if (!mySVG) {
                 return;
                 }
                 var panZoomTiger = svgPanZoom(mySVG);
                 let getZoom = panZoomTiger.getZoom();
                 let panPoints = panZoomTiger.getPan();
                this.setState({
                    flag:!this.state.flag
                },()=>{
                     let svg_Label2 = ReactDOM.findDOMNode(this.SVGRef2.current);
                    let mySVG2 = svg_Label2.querySelector('svg');
                    let  panZoomTiger2 = svgPanZoom(mySVG2);
                    panZoomTiger2.zoom(getZoom);
                    panZoomTiger2.pan(panPoints);
                    this.bindingSVG(data);
                });
            }
        });
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值