angular 使用jsMind

最近在找一个好用的angular思维导图插件,找来找去,找到了jsMind,当然,有的同学还搜索到了mind-map这个插件,这个也是基于jsMind封装的。作为一个纯JavaScript插件,怎样在angular中使用呢?

1,jsMind简介

以下摘抄自jsMind github 

jsMind 是一个显示/编辑思维导图的纯 javascript 类库,其基于 html5 canvas (和 svg) 进行设计。jsMind 以 BSD 协议开源,在此基础上你可以在你的项目上任意使用。你可以在此浏览适用于 jsMind 的 BSD 许可协议(中英文版本)

2,导入jsMind

目前,jsMind已发布npm库,可直接使用

npm i jsmind

3,接下来按照引入第三方js的方式,引入jsMind的js文件

首先,修改根目录下的angular.json文件:

在styles中和scripts中引入jsMind的样式和js文件,如果想要拖拽和截屏功能的话,jsmind.draggable-node.js和jsmind.screenshot.js都是需要引入的。

4,在组件中导入

import 'jsmind/js/jsmind.js';
import 'jsmind/js/jsmind.draggable-node';

别忘了定义jsMind变量

declare var jsMind:any;

定义options

const options = {
  container: 'jsmind_container',
  theme: 'greensea',
  editable: true,
  view: {
      draggable: true,
  },
}

定义变量mindMap

 mindMap:any;

然后在ngOnInit方法中直接调用show方法

 this.mindMap = jsMind.show(options,this.mind);

在html中,定义一个div,注意id要和options中的container保持一致

<div id="jsmind_container" ></div> 

别忘了给div设置以下宽高,要不然显示不出来

#jsmind_container {
    float: left;
    width: 100%;
    height: 800px;
}

现在就能看到效果了

 5,监听jsMind中的拖拽,点击事件

  ngAfterViewInit(): void {
    let jsMindDOM = jsMind.util.dom;
    jsMindDOM.add_event(document,'mousedown',(e:any)=>{
      let position:Position = (this.jsmindUtilService.dragstart(e,options.editable)) as Position;
      if(position){
        this.mouseDownFlag = true;
      }
      console.log(position);
    })
    jsMindDOM.add_event(document,'mousemove',(e:any)=>{
      // console.log(e)
    })
    jsMindDOM.add_event(document,'mouseup',(e:any)=>{
      if(this.mouseDownFlag){
        console.log(this.mindMap.get_data())
        this.mouseDownFlag = false;
      }
    })
  }
import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class JsmingUtilService {

  constructor() { }
  dragstart (e:any,editable:boolean) {
    
    if (!editable) { return; }
    var el = e.target;
    if (el.tagName.toLowerCase() != 'jmnode') { return; }
    console.log(e)
            
    let offset_x = (e.clientX || e.touches[0].clientX)  - el.offsetLeft;
    let offset_y = (e.clientY || e.touches[0].clientY) - el.offsetTop;
    let client_hw = Math.floor(el.clientWidth / 2);
    let client_hh = Math.floor(el.clientHeight / 2);
    return {x:offset_x,y:offset_y,hw:client_hw,hh:client_hh}
  }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值