Molstar 鼠标与键盘事件监听

更多内容请查看

TypeScript 复制代码
// 鼠标点击事件的监听方式
// this.plugin.behaviors.interaction.click.subscribe(() => { });
this.subscribe(this.plugin.behaviors.interaction.click, this.interactionClick);

// 键盘事件的监听方式
// this.plugin.behaviors.interaction.key.subscribe(() => { });
this.subscribe(this.plugin.behaviors.interaction.key, this.interactionKey);

事件回调函数

TypeScript 复制代码
// 鼠标点击回调事件
const interactionClick = async (event: InteractivityManager.ClickEvent) => {
  const { button, modifiers, page } = event;

  // 鼠标左键
  if (
    Binding.match(
      Binding(
        [Binding.Trigger(ButtonsType.Flag.Primary, ModifiersKeys.create({}))],
        "edit",
        "Press ${triggers}"
      ),
      button,
      modifiers
    )
  ) {
    console.log("鼠标左键");
  }

  // 鼠标右键
  if (
    Binding.match(
      Binding(
        [Binding.Trigger(ButtonsType.Flag.Secondary, ModifiersKeys.create({}))],
        "edit",
        "Press ${triggers}"
      ),
      button,
      modifiers
    )
  ) {
    console.log("鼠标右键");
  }
};

// 键盘回调事件
const interactionKey = async (event: KeyInput) => {
  const { code, key, modifiers } = event;
  // Ctrl+z
  if (
    Binding.matchKey(
      Binding(
        [Binding.TriggerKey("z", ModifiersKeys.create({ control: true }))],
        "undo",
        "Press ${triggers}"
      ),
      code,
      modifiers,
      key
    )
  ) {
    console.log("Ctrl+z");
  }

  // Ctrl+y
  if (
    Binding.matchKey(
      Binding(
        [Binding.TriggerKey("y", ModifiersKeys.create({ control: true }))],
        "redo",
        "Press ${triggers}"
      ),
      code,
      modifiers,
      key
    )
  ) {
    console.log("Ctrl+y");
  }

  // Ctrl+Delete
  if (
    Binding.matchKey(
      Binding(
        [Binding.TriggerKey("Delete", ModifiersKeys.create({ control: true }))],
        "Clear All",
        "Press ${triggers}"
      ),
      code,
      modifiers,
      key
    )
  ) {
    console.log("Ctrl+Delete");
  }
};

事件取消监听

TypeScript 复制代码
// 开启监听
const clickSub = this.plugin.behaviors.interaction.click.subscribe(() => {});

// 取消监听
clickSub.unsubscribe();

// 开启监听
const keySub = this.plugin.behaviors.interaction.key.subscribe(() => {});

// 取消监听
keySub.unsubscribe();
相关推荐
IT_陈寒5 小时前
Vue这个特性差点让我加班到凌晨,谁懂啊
前端·人工智能·后端
kyriewen5 小时前
我让AI改一个bug——它偷偷动了5个我没让它碰的地方
前端·javascript·ai编程
遇乐的果园5 小时前
前端学习笔记-vue加载渲染优化
前端·笔记·学习
用户985033593286 小时前
OpenLayers 热力图从原理到 Vue 组件一键接入
前端
颜酱6 小时前
01 | 骨架搭建:FastAPI + Vue 跑通第一个 SSE 流式问答
前端·人工智能·后端
hoLzwEge6 小时前
解码 IDE 智能提示:jsconfig.json 辅助开发全攻略
前端·前端框架
leoZ2316 小时前
记忆系统与 Agent 定制完全指南(四):自定义 Agent 开发(一)
前端·chrome
慧一居士6 小时前
Element Plus 按需引入的配置使用说明和完整示例
前端·vue.js
程序员黑豆6 小时前
鸿蒙应用开发实战:从零学会自定义组件
前端·华为·harmonyos
leoZ2316 小时前
记忆系统与 Agent 定制完全指南(三):记忆的检索与使用
前端·chrome