最近在用jsMind做在线版的脑图设计器,发现缺少复制粘贴功能,就自己添加了一个。效果如下:

实现方法:

1.首先在mapping配置项中,增添C和V键

2.在整体事件监听方法内加上 ctrl+c 和 Ctrl+V 的判定

handler: function (e) {if (this.jm.view.is_editing()) { return; }var evt = e || event;if (!this.opts.enable) { return true; }var kc = evt.keyCode + (evt.metaKey << 13) + (evt.ctrlKey << 12) + (evt.altKey << 11) + (evt.shiftKey << 10);if(evt.keyCode==67||evt.keyCode==86) {if(evt.ctrlKey) {//加上Ctrl键判断if(evt.keyCode==67) this.handle_copy(this.jm, e);if(evt.keyCode==86)this.handle_paste(this.jm, e);}}else if (kc in this._mapping) {this._mapping[kc].call(this, this.jm, e);}
},

3.声明复制方法

注意:这里主要是把复制的节点信息数据 保存下来。由于get_selected_node()获取到的不是个标准json对象,就没有处理直接保存到了window 中,你可以自行遍历,然后处理成所要的json后,放到localStorage里

handle_copy:function(_jm, e) {var evt = e || event;var selected_node = _jm.get_selected_node();window.jsMindCopyNode = selected_node;
},

4.声明粘贴方法

handle_paste:function(_jm, e) {var evt = e || event;var selected_node = _jm.get_selected_node();if (!!selected_node) {//jsMind会查找三次 select节点所以用 !!this._mapAddNode(_jm,selected_node,window.jsMindCopyNode);delete window.jsMindCopyNode;}
},

粘贴方法里,调用的是一个递归插入,因为复制的节点里可能含有子节点

//递归插入
_mapAddNode(_jm,parentNode,insertNode) {const me = this;var nodeid = jm.util.uuid.newid();if (!jm.util.is_node(insertNode)) return;var newNode =  _jm.add_node(parentNode,nodeid,insertNode.topic,{});if(insertNode.children) {insertNode.children.forEach(node=>{me._mapAddNode(_jm,newNode,node);});}
},

这样就大工告成了。

PS:

你也可以借助剪贴板,或者用clipboard.js 外部脚本,把处理成标准json数据格式的数据转成字符串存到剪贴板中

后来回看了下processon 里的做法,发现是把节点数据存入存到LocalStorage里的,

jsMind 实现复制粘贴相关推荐

  1. 程序员是复制粘贴的工具人?还是掌握“谜底”的魔术师?

    作者 | David Heinemeier Hansson 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 编程世界在经历了"Imposter Syndrome(冒充者症候群/ ...

  2. 把大脑「复制-粘贴」到芯片上,三星、哈佛的大胆设想登上Nature子刊

    视学算法报道 编辑:张倩.蛋酱 三星 & 哈佛:我们有一个大胆的想法-- 人的大脑有很多令人惊叹的优点,比如功耗低(相当于一个 20 瓦的灯泡).学习快(人类幼崽看几张图就可以学会一个概念). ...

  3. vi/vim的选中/复制/粘贴命令

    原文: https://www.cnblogs.com/GlassHour/p/5503973.html GlassHour vi/vim的选中/复制/粘贴命令 选自http://blog.csdn. ...

  4. 竟有内鬼!北理工硕士生「复制粘贴」论文,旷视研究员最新声明

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|AI算法与图像处理 [导读]过了半个多月,北理工硕士公然抄 ...

  5. 谷歌简单粗暴“复制-粘贴”数据增广,刷新COCO目标检测与实例分割新高度

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 近日,谷歌.UC伯克利与康奈尔大学的研究人员公布了一篇论文 Sim ...

  6. 为了不复制粘贴,我被逼着学会了JAVA爬虫

    写在前边 受疫情影响一直在家远程办公,公司业务进展的缓慢,老实讲活并没有那么多,每天吃饭.睡觉.逛技术社区.写博客,摸鱼摸得爽的很.早上本来还想在来个回笼觉,突然部门经理的语音消息就过来了. 甩给我一 ...

  7. wps文档复制粘贴序号_10个文档处理神技能,学会让你少走很多弯路!

    作者 | 职场叨叨君 来源 | 办公资源(pptziyuan) Hello大家好,我是叨叨君~ 前段时间给大家更新了很多关于PPT技巧的内容,Word技术不溜的小伙伴跟我抱怨了:叨叨君你要雨露均沾,不 ...

  8. 一部手机,万物皆可复制粘贴,将AR玩出了新高度

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 看到什么就复制什么,这是魔法还是孙悟空的神通?都不是.这是 AR 的魔力. 如何将一件物品的图像导入 ...

  9. 软件测试面试题-如何测试复制粘贴功能

    复制粘贴是电脑最普遍的两个操作了,在面试的过程中,有学生被问到如何测试复制粘贴功能的时候,我个人觉得你可以这样去回答 更多学习资源,公众号主页点击领取资料 查看我评论区置顶 首先,这道题目你甚至可以发 ...

  10. 我放弃了年薪200万的岗位,因为“复制粘贴”的技术活让人厌恶

    题图 | Marrina Decisions 本文转自公众号「InfoQ」 作者 | Michael Lin 编译 | 核子可乐 褚杏娟 Michael Lin 跟随父母移居美国后,先后在 Netfl ...

最新文章

  1. JUnit基础及第一个单元测试实例(JUnit3.8)
  2. 悟透delphi 第十章 操作界面与操作逻辑
  3. Everything you need to learn about engineering freelance
  4. C# MVC 项目下的路由配置-RouteConfig
  5. python中计算列表的平均值_如何计算python中元组列表的平均值?
  6. ES6-使用let关键字定义变量
  7. 第1关:创建/删除节点
  8. 3.过滤——简单移动平均线概念(SMA)、SMA的假设、加权移动平均线概念(WMA)_1
  9. matlab 聚类 源程序,聚类——KFCM的matlab程序
  10. 洛谷P1273 有线电视网
  11. C++之嵌套内部类用法
  12. 计算机课禁用监视器,win7系统防止别人偷窥电脑的操作方法
  13. 桌面推演技术前沿及发展趋势
  14. 图像处理:RGB565转RGB888
  15. ROS launch文件标签解释
  16. 如何使用 DDD 指导微服务拆分?
  17. Keysight的扫描电子元件软件EP-Scan 2023版本下载与安装配置教程
  18. Springboot旧衣捐赠平台设计与实现 p40x5计算机毕业设计-课程设计-期末作业-毕设程序代做
  19. python基础-15-列表推导式
  20. 【Vue 实战项目】后台管理系统登录页详解附源码

热门文章

  1. PcShare 2005 源代码
  2. Android11.0系统去掉桌面谷歌搜索栏
  3. mongodb 基础 命令 学习
  4. 冰点还原无法修改计算机时间,系统还原后无法更改系统时间?这个方法必须会...
  5. 如何在Mac计算机上添加删除打印机和扫描仪,以及高质量扫描文档
  6. MyFirefox v2.6.2 - 打造自己的 Firefox 便携版
  7. Windows 适配 Apple Magic TrackPad2
  8. 计算机毕业设计之会议预约系统设计与实现
  9. Android 打造万能网络解析框架
  10. 网络空间安全态势感知技术