当前位置: 首页 > article >正文

源码分析Openlayers默认键盘交互实现

概述

本文主要分析 Openlayers 中用户交互类ol/interactionKeyboardPanKeyboardZoom的源码实现。两者都是 Openlayer 地图中默认提供的功能,都和键盘控制地图有关。

KeyboardPan

KeyboardPan类继承了Interaction类,关于Interaction类后面会讲到,简单将它理解成 Openlayers 中的交互基类就行。

参数

KeyboardPan的参数是一个对象,包含三个属性如下

  • condition:函数,接收mapBrowserEvent作为参数,返回一个布尔值,返回true则表示应该处理该事件,否则不处理,默认是noModifierKeystargetNotEditable
  • duration:动画持续时长,单位毫秒,默认是100(ms)
  • pixelDelta:步长,每按键一次,地图移动的像素,默认是128(px)
核心实现

KeyboardPan的核心代码实现如下:

  handleEvent(mapBrowserEvent) {
   
    let stopEvent = false;
    if (mapBrowserEvent.type == EventType.KEYDOWN) {
   
      const keyEvent = /** @type {KeyboardEvent} */ (
        mapBrowserEvent.originalEvent
      );
      const key = keyEvent.key;
      if (
        this.condition_(mapBrowserEvent) &&
        (key == Key.DOWN ||
          key == Key.LEFT ||
          key == Key.RIGHT ||
          key == Key.UP)
      ) {
   
        const map = mapBrowserEvent.map;
        const view = map.getView();
        const mapUnitsDelta = view.getResolution() * this.pixelDelta_;
        let deltaX = 0,
          deltaY = 0;
        if (key == Key.DOWN) {
   
          deltaY = -mapUnitsDelta;
        } else if (key == Key.LEFT) {
   
          deltaX = -mapUnitsDelta;
        } else if (key == Key.RIGHT) {
   
          deltaX = mapUnitsDelta;
        } 

http://www.kler.cn/a/413816.html

相关文章:

  • 【H2O2|全栈】Node.js(1)
  • Qt程序发布及打包成exe安装包
  • java脚手架系列16-AI大模型集成
  • 带有悬浮窗功能的Android应用
  • PostgreSQL表膨胀问题解析
  • OceanBase 大数据量导入(obloader)
  • 记录pbootcms提示:登录失败:表单提交校验失败,请刷新后重试的解决办法
  • ATTCK红队评估实战靶场(二)
  • 可迭代(Iterable)对象与对应的迭代器(Iterator)对象
  • SQL常见面试题(四)
  • Zemax孔径类型
  • 模型输出可保存为数据集、支持配置社区活动作为课程作业|ModelWhale 版本更新
  • 说说 Redis 常用命令
  • 多线程(2)线程创建的两种方法
  • SNMPv3 项目实例
  • python的字体如何调整
  • Unity类银河战士恶魔城学习总结(P149 Screen Fade淡入淡出菜单)
  • 【安全 - openssl 生成密钥对和CSR】
  • FCBP 认证考试要点摘要
  • sin函数拟合
  • 设计模式之 备忘录模式
  • 使用Kamailio实现VoIP通话流程详解
  • 【Java 学习】面向程序的三大特性:封装、继承、多态
  • XSS--跨站脚本攻击
  • “python+ADCIRC”潮汐、风驱动循环、风暴潮等海洋水动力模拟
  • Vue 3 路由教程