jTopo 场景移动,节点位置保持不变

项目使用ts,自己替换js文件格式即可
注意node,scene参数名字

	//场景移动事件,使节点自身位置保持不变
        sceneEvent():void{
            let _this:any = this;
            let selfX: number ,selfY: number ;
            let mapStartX : number,mapStartY: number; // 地图上拖动事件记录起点
            let mouseDown = function (event: MouseEvent){
                if (event.button == 0){
                    // @ts-ignore
                    selfX = event.target.x; // 记录节点自身位置
                    // @ts-ignore
                    selfY = event.target.y;
                    mapStartX =  event.offsetX - _this.scene.translateX;
                    mapStartY =  event.offsetY - _this.scene.translateY;
                    //console.log("鼠标点击记录点坐标:*=****=>" , event.x,event.y);
                }
            };
            // @ts-ignore
            let mouseDrag = function(event:  MouseEvent){
                // @ts-ignore
                event.target.x = selfX;  // 使节点自身位置保持不变
                // @ts-ignore
                event.target.y = selfY;
                // 改变场景位置
                _this.scene.translateX += ((event.offsetX - _this.scene.translateX) - mapStartX);
                _this.scene.translateY += ((event.offsetY - _this.scene.translateY) - mapStartY);
            }
            // @ts-ignore
            let mouseUp = function(event: MouseEvent){
                if (event.button == 0){
                    // @ts-ignore
                    selfX= null; // 清空节点位置信息
                    // @ts-ignore
                    selfY = null
                }
            }
            _this.scene.addEventListener("mousedown", mouseDown);
            _this.scene.addEventListener("mouseup", mouseUp);
            _this.node.addEventListener("mousedrag", mouseDrag);
        },

引入位置

 mounted(): void {
        let _this:any = this;
        let canvasEle = document.getElementById("canvas_work");
        _this.stage = new JTopo.Stage(canvasEle);
        _this.scene = new JTopo.Scene(_this.stage);
        _this.stage.showToolbar = false;
        _this.stage.wheelZoom = 2;
        _this.scene.mode = 'normal';
        _this.stage.eagleEye.visible = false;


        _this.node = new JTopo.Node();
        _this.node.zIndex = -11;
        _this.node.x = 0;
        _this.node.y = 0;
        _this.node.showSelected = false;
        _this.node.dragable = true;
        _this.scene.add(_this.node);
        _this.sceneEvent();
    },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: jtopo是一款JavaScript的绘图库,可以用于在网页中创建各种图形和拓扑图。在jtopo中,画布是一个用于展示图形的区域,而默认情况下,这个画布是不可移动的。 jtopo的画布不可移动的意思是,用户无法通过鼠标或其他操作手段去拖动整个画布。这是因为在jtopo的设计中,画布是用来展示图形的,而不是用来进行任意移动和调整的。这样的设计有其合理性和优点。 首先,不可移动的画布可以保证图形的稳定性和准确性。当我们布局一些复杂的图形和拓扑时,每个节点位置位置关系都是经过精心调整和设计的,任意移动画布可能会破坏这些布局,导致图形错乱甚至丧失原本的信息和意义。 其次,不可移动的画布可以提高用户体验。如果画布可以随意移动,那么用户在进行操作时可能会频繁地无意识地拖动画布,导致视图的不稳定和不连贯,给用户使用带来困扰和不便。 当然,jtopo也提供了一些其他的操作方式,例如可以通过鼠标滚轮来进行画布的放大和缩小,以及通过其他操作来调整整个图形的布局。但是整体来说,不可移动的画布是jtopo的设计原则之一,它的目的是为了使图形的展示更加稳定和准确,提升用户体验。 ### 回答2: jtopo是一个基于HTML5 Canvas的开源绘图库,它可以用于在网页中创建各种图形、流程图、网络拓扑图等等。jtopo的画布在默认情况下是可移动的,但如果你希望画布不可移动,可以使用以下方法进行设置。 首先,在创建画布的时候,需要添加`movable: false`属性,将其设置为false,表示画布不可移动,例如: ```javascript var stage = new JTopo.Stage(canvas); stage.movable = false; ``` 这样就可以将画布设为不可移动。 除此之外,你还可以通过设置鼠标事件来禁止画布的移动。可以通过判断鼠标移动事件的坐标,如果落在画布上则不进行移动操作。具体的代码如下: ```javascript canvas.onmousedown = function(event){ var e = event || window.event; var mousePos = stage.getMousePos(e); var x = mousePos.x; var y = mousePos.y; if(x > stage.canvas.width * 0.1 && x < stage.canvas.width * 0.9 && y > stage.canvas.height * 0.1 && y < stage.canvas.height * 0.9){ stage.clickEventHandle(event); } } ``` 上述代码中,通过获取鼠标点击的坐标,判断其是否在画布的可移动范围内,如果在范围内则调用`clickEventHandle`方法来处理点击事件,从而禁止画布的移动。 通过以上方法,你可以将jtopo的画布设置为不可移动。希望能对你有所帮助! ### 回答3: jtopo 是一个免费的 JavaScript 图形绘制库,它可以在网页中创建图形和拓扑图。在 jtopo 中,画布(Canvas)默认是可移动的,也就是可以通过鼠标拖动来改变画布的位置。 但是,如果希望禁止画布移动,可以使用 jtopo 中的相关方法来实现。通过设置画布的可拖拽属性为 false,可以禁止画布移动。具体的实现步骤如下: 1. 在创建画布的时候,通过设置属性 `topoData.dragable = false` ,将画布的可拖拽属性设置为 false。 2. 将该属性应用到画布上,例如 `scene.add(topoData)`。 3. 这样,画布就不可移动了,无法通过鼠标拖动来改变画布的位置。 需要注意的是,jtopo 的画布主要用于绘制图形和拓扑图,禁止画布移动可能会限制用户与图形的交互体验,因此需要根据具体需求来决定是否禁止画布的移动功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值