OpenLayers 快速入門(八)事件系統

看過的知識不等于學會。唯有用心總結、系統記錄,并通過溫故知新反復實踐,才能真正掌握一二
作為一名摸爬滾打三年的前端開發,開源社區給了我飯碗,我也將所學的知識體系回饋給大家,助你少走彎路!
OpenLayers、Leaflet 快速入門 ,每周保持更新 2 個案例
Cesium 快速入門,每周保持更新 4 個案例

OpenLayers 快速入門(一)Map對象
OpenLayers 快速入門(二)Layer 對象
OpenLayers 快速入門(三)Source 對象補充
OpenLayers 快速入門(四)View 對象
OpenLayers 快速入門(五)Controls 對象
OpenLayers 快速入門(六)Interaction 對象
OpenLayers 快速入門(七)矢量數據
OpenLayers 快速入門(八)事件系統
OpenLayers 快速入門(九)Extent 介紹
OpenLayers 快速入門(十)常用 API 補充

事件系統

事件系統是框架的核心部分,允許開發者監聽和響應地圖、圖層、交互以及各種對象的狀態變化。通過on方法訂閱事件,通過un方法取消訂閱,同時支持一次性事件監聽(once)和自定義事件的能力。

// 監聽事件
map.on("click", (e) => {});// 取消監聽
map.un("click", (e) => {});// 一次性時間
map.once("click", (e) => {});// 自定義事件
map.on("customEvent", (e) => {});

Observable 對象

OpenLayers 中所有可觸發事件的對象都繼承自 ol/Observable 基類:

  • Map
  • View
  • Layer
  • Source
  • Interaction
  • Control
  • Feature
  • Overlay

通用事件:

  • change:通用變更事件
  • propertychange:屬性發生變化時觸發
  • error:通用錯誤事件,當發生錯誤時觸發

Map 事件

  • click:點擊事件
  • singleclick(最常用):真正的單擊,沒有拖動,也沒有雙擊,此事件延遲 250 毫秒以確保它不是雙擊
  • dblclick:雙擊事件
  • loadend:加載額外地圖數據完成時觸發
  • loadstart:當加載額外地圖數據(tiles、images,、features)開始時觸發
  • moveend:地圖移動后觸發
  • movestart:地圖開始移動時觸發
  • pointerdrag: 指針拖動時觸發
  • pointermove:指針移動時觸發。注意在觸摸設備上,這是在地圖平移時觸發的,因此與 mousemove 不同
  • postcompose:在圖層組合完成后觸發
  • postrender:在地圖幀渲染完成后觸發
  • precompose:在圖層組合之前觸發
  • rendercomplete:當渲染完成時觸發

View

  • change:center:視圖中心位置改變時觸發
  • change:resolution:視圖分辨率改變時觸發
  • change:rotation:視圖旋轉角度改變時觸發

Layer 事件

  • change:extent:圖層范圍改變時觸發
  • change:maxResolution:最大分辨率改變時觸發
  • change:minResolution:最小分辨率改變時觸發
  • maxZoom:最大縮放級別改變時觸發
  • minZoom:最小縮放級別改變時觸發
  • change:source:圖層源改變時觸發
  • change:zIndex:圖層 zIndex 改變時觸發
  • change:visible:可見性改變時觸發
  • change:opacity:圖層透明度改變時觸發

Source 事件

VectorSource

  • featureloadend:要素加載完成時觸發
  • featureloaderror:要素加載錯誤時觸發
  • featureloadstart:要素加載開始時觸發
  • removefeature:要素移除時觸發

ImageSource

  • imageloadend:圖像加載完成時觸發
  • imageloaderror:圖像加載錯誤時觸發
  • imageloadstart:圖像加載開始時觸發

TileSource

  • tileloadend:瓦片加載完成時觸發
  • tileloaderror:瓦片加載錯誤時觸發
  • tileloadstart:瓦片加載開始時觸發

Overlay 事件

  • change:element:元素變更事件
  • change:position:位置變更事件
  • change:positioning:定位變更事件
  • change:offset:偏移量變更事件
  • change:map:地圖變更事件

自定義事件

一、直接使用事件系統

// 添加自定義事件
map.on("customEvent", (event) => {console.log("自定義事件觸發:", event.detail);
});// 兩秒后觸發自定義事件
setTimeout(() => {map.dispatchEvent({type: "customEvent",target: map,detail: { message: "Hello from custom event!" },});
}, 2000);

二、自定義 Observable 類

import Observable from "ol/Observable";
import Event from "ol/events/Event";// 自定義事件類
class StatusUpdateEvent extends Event {constructor(status) {super("statusupdate");this.status = status;this.timestamp = new Date();}
}// 自定義可觀察對象
class CustomLayer extends Observable {constructor() {super();this.status = "idle";}startProcessing() {this.status = "processing";this.dispatchEvent(new StatusUpdateEvent(this.status));}completeProcessing() {this.status = "completed";this.dispatchEvent(new StatusUpdateEvent(this.status));}
}// 使用自定義層
const layer = new CustomLayer();
layer.on("statusupdate", (event) => {console.log(`狀態更新: ${event.status} at ${event.timestamp}`);
});// 觸發事件
layer.startProcessing();
setTimeout(() => layer.completeProcessing(), 2000);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90207.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90207.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90207.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Linux | 網絡】應用層(HTTPS)

目錄一、HTTPS的概念二、準備概念2.1 什么是加密和解密2.2 為什么要加密2.3 常見的加密方式2.3.1 對稱加密2.3.1 非對稱加密2.4 數據摘要&&數據指紋三、HTTPS理解過程3.1 只使用對稱加密3.2 只使用非對稱加密3.3 雙方都使用非對稱加密3.4 對稱加密 非對稱加密3.5 中間…

GRE協議

一、實驗拓撲二、實驗配置1、靜態路由實現GRERT1配置:RT1(config)# int fa1/0RT1(config-if)# ip add 192.168.20.1 255.255.255.0RT1(config-if)# no shutdownRT1(config)# int fa0/0RT1(config-if)# ip add 172.1.1.2 255.255.255.0RT1(config-if)# no shutdownRT…

JDialong彈窗

public class DialogDemo extends JFrame {public DialogDemo(){this.setVisible(true);this.setSize(700,500);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//JFrame 放東西,容器Container contentPane this.getContentPane();//絕對布局conte…

tlias智能學習輔助系統--違紀處理(實戰)

目錄 1.StudentController.java 2.interface StudentService 3.StudentServiceImpl.java 4.interface StudentMapper 1.StudentController.java // 違紀處理PutMapping("/violation/{id}/{score}")Operation(summary "違紀處理")public Result violat…

傳統RNN模型筆記:輸入數據長度變化的結構解析

一、案例背景 本案例通過PyTorch的nn.RNN構建單隱藏層RNN模型,重點展示RNN對變長序列數據的處理能力(序列長度從1變為20),幫助理解RNN的輸入輸出邏輯。 二、核心代碼與結構拆解 def dm_rnn_for_sequencelen():# 1. 定義RNN模型rnn…

OpenLayers 快速入門(四)View 對象

看過的知識不等于學會。唯有用心總結、系統記錄,并通過溫故知新反復實踐,才能真正掌握一二 作為一名摸爬滾打三年的前端開發,開源社區給了我飯碗,我也將所學的知識體系回饋給大家,助你少走彎路! OpenLayers…

測試左移方法論

測試左移(Shift-Left Testing)?是一種軟件測試方法論,核心思想是將測試活動從傳統的開發后期(如系統測試、驗收測試階段)提前到軟件生命周期的更早期階段(如需求分析、設計、編碼階段)&#xf…

OpenCV(01)基本圖像操作、繪制,讀取視頻

圖像基礎 import cv2 as cv#讀取圖像 cv.imread(path,讀取方式)默認讀為彩色圖像 #cv.imread(path) cat cv.imread(E:\hqyj\code\opencv\images\\face.png)#顯示圖像 cv.imshow(window,img) cv.imshow(myimg,cat)print(cat) print(cat.shape) #(h,w,c) 元組(1,1) print(cat…

biji 1

1.應用層:為應用程序提供網絡服務。2.表示層:定義數據的格式,對數據進行壓縮、解壓縮、加密、解密、編碼、解碼。3.會話層:對通信雙方間的會話進行建立、維護、拆除-----session id---區分同一應用程序的不同進程4.傳輸層&#x…

mongodb的備份和還原(精簡)

1 官網下載對應版本msi2 運行msi mongodb-database-tools-windows-x86_64-100.12.2.msi3 將安裝地址加到環境變量 C:\Program Files\MongoDB\Tools\100\bin4 查看version mongodump --version mongorestore --version5 運行 備份命令 mongodump --host 127.0.0.1 --db dbname--…

Mac安裝Typescript報錯

目錄 Mac上安裝Typescript報錯: 原因分析 1. 默認 npm 全局安裝目錄的權限問題 2. Node.js 的安裝方式 如何解決?(無需每次用 `sudo`) 方法 1:修改 npm 全局目錄的權限(推薦) 方法 2:配置 npm 使用用戶級目錄 方法 3:使用 `nvm` 管理 Node.js(最推薦) 為什么建議避免…

spring-cloud概述

單體架構 把業務的所有功能實現都打包在一個war包或者jar包,這種方式就成為單體架構。 比如Spring課程中的博客系統,前端后端數據庫實現,都在一個項目中,這種架構就稱為單體架構. 舉個例子: 比如在電商系統中,我們…

android ROOM kotlin官方文檔完全學習

android ROOM kotlin官方文檔完全學習2.6 使用 Room 將數據保存到本地數據庫 | Android Developers (google.cn) 一、簡介 1.1 引入 dependencies {def room_version "2.6.1"implementation "androidx.room:room-runtime:$room_version"//如下三選一a…

DOM編程全解析:操作、事件與存儲實戰指南

引言:DOM——JavaScript與網頁交互的橋梁 DOM(文檔對象模型) 是JavaScript操作HTML/XML文檔的接口,它將網頁文檔抽象為一個樹形結構,允許開發者通過API動態修改文檔的內容、結構和樣式。無論是實現動態交互&#xff0…

Ansible命令

Ansible命令 ansible 常用命令 /usr/bin/ansible   #Ansibe AD-Hoc 臨時命令執行工具,常用于臨時命令的執行 /usr/bin/ansible-doc    #Ansible 模塊功能查看工具 /usr/bin/ansible-galaxy   #下載/上傳優秀代碼或Roles模塊 的官網平臺,基于網…

SY6974芯片添加enable充電控制節點

1. 需求描述項目背景:基于 Qualcomm MDM9x07 平臺的 4G MIFI 產品,使用 Silergy 公司的 SY6974 充電 IC需求內容: 在環境 /sys/class/power_supply/sy6794/enable 下增加一個 sysfs 節點,用于控制是否允許充電:cat /sy…

趣玩-Ollama-Llm-Chatrbot

軟件說明 這個軟件本人是從零開始實現的聊天機器人。基于Ollama(PythonApi ) Pyside,實現了聊天機器的基本功能,還有一些個性化的功能比如模型管理,敏感詞過濾,個性化主題設置,頭像設置等功能。…

在mac 上zsh 如何安裝最新的 go 工具

文章目錄方法一:使用 Homebrew(推薦)方法二:從官網下載安裝包方法三:使用 g(Go 版本管理器)方法四:使用 gvm(Go Version Manager)驗證安裝和配置常用 Go 工具…

(十九)深入了解 AVFoundation-編輯:使用 AVMutableVideoComposition 實現視頻加水印與圖層合成(上)——理論篇

一、引言在短視頻、Vlog、剪輯工具日益流行的今天,給視頻添加 Logo、水印、時間戳或動態貼紙,已經成為非常常見的功能需求。這類效果看似簡單,其實背后都涉及到“圖層合成”的處理:如何將一個靜態或動態的圖層(如文字、…

Android NDK與JNI深度解析

核心概念定義:NDK (Native Development Kit): 是什么: 一套由 Google 提供的工具集合。目的: 允許 Android 開發者使用 C 和 C 等原生(Native)語言來實現應用程序的部分功能。包含內容: 交叉編譯器&#xf…