X6实践,新手流程

2022-01-10  本文已影响0人  skoll

事件-系统,这个是在进阶实践里面有讲

节点

1 .节点被选中
2 .节点取消选中
3 .添加节点,拖拽添加节点.
4 .删除节点
5 .节点发生变化(属性,位置)

1 .添加边
2 .删除边
3 .连接边
4 .边的事件不能回退??

1 .作为source出发
2 .作为target接收
3 .桩上连接的点被删除
4 .添加连接桩

数据

1 .操作完的节点数据如何保存,下次应该是直接拿保存的数据渲染出来节点吧.

css问题

1 .flex布局,上下,上面高度固定,下面取自适应.左右要加width:100%,height是可以flex:1自动取的

优化操作

1 .边的连接优化

1 .输出桩只能连接输入桩
2 .可以连接的高亮展示

2 .

连接桩问题

1 . validateConnection函数:移动边的时候判断连接是否有效,如果返回false,单鼠标放开的时候,不会连接到当前元素,否则会连接到当前元素

1 .核心问题:如果是新增一条边,我从一个桩开始拖拽的时候,还没有连接到目标节点,这时这个回调函数就已经有了一个目标节点的数据返回targetMagnet就已经有值了.也许是推荐能否连接那里的问题,总之,可能这个回调可能和我想要的不符合,想要的应该是线段拖拽完成,已经有了节点数据,将要绘制到图之前的,这时来做最后的判断才是对的
2 .触发时机:点击开始桩,拖拽线的时候触发,然后每次拖拽的线条连接到任何桩点的时候,并不是放开的时候才算
3 .这里走的一些验证可以时没放的时候,拖拽地时候碰触到的时候的验证规则

2 .validateEdge:停止拖拽的时候根据validateEdge返回值来判断边是否生效,如果返回值是false,这个边会被清除.那这里还是会走先生成,然后再删除的逻辑吧.经过实际测试,这个是满足的.
3 .validateMagnet:点击magnet时根据validateMagnet返回值来判断是否新增边,触发时机是magnet被按下,如果返回是false,则没有任何反应,如果返回true,会在当前magnet创建一条新的边
4 .如果这三种都不行的话,最后就需要自定义事件了...

生成的id如何保证唯一呢

1 .有大量的边唯一id,桩唯一id,节点唯一id.一定要保证所有的都不一样,或者说同一类的一定不能有一样的,不然就爆炸https://www.cryptosys.net/pki/uuid-rfc4122.html.是这个规范,要查看这个会不会重复.128 个随机生成的位,在某些位置有 6 个位设置为特定值
2 .https://juejin.cn/post/6864199183957262350
3 .其他方式 nanoid
4 .js自带:URL.createObjectURL(new Blob()).substr(-36)
5 .他的算法

export function uuid(): string {
  // credit: http://stackoverflow.com/posts/2117523/revisions
  // return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
  //   const r = (Math.random() * 16) | 0
  //   const v = c === 'x' ? r : (r & 0x3) | 0x8
  //   return v.toString(16)
  // })

  let res = ''
  const template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'

  for (let i = 0, len = template.length; i < len; i += 1) {
    const s = template[i]
    const r = (Math.random() * 16) | 0
    const v = s === 'x' ? r : s === 'y' ? (r & 0x3) | 0x8 : s
    res += v.toString(16)
  }
  return res
}
上一篇 下一篇

猜你喜欢

热点阅读