新闻详情

新闻详情

首页 / 资讯中心 / 详情

deck.gl 如何使用 widgets 模块为可视化界面添加缩放、指北针等交互控件

发布时间:2026/9/15 17:37:46来源:尧图网络
deck.gl 如何使用 widgets 模块为可视化界面添加缩放、指北针等交互控件
deck.gl 如何使用 widgets 模块为可视化界面添加缩放、指北针等交互控件【免费下载链接】deck.glWebGL2 powered visualization framework项目地址: https://gitcode.com/GitHub_Trending/de/deck.gl如果你的 deck.gl 可视化页面只有裸的 canvas用户就只能靠鼠标手势控制视图。deck.gl/widgets模块在 canvas 之外提供了一组现成的 UI 控件ZoomWidget放大/缩小、CompressWidget之外的指北针CompassWidget显示方位角与俯仰角并支持点击复位、ScreenshotWidget截图下载、FullscreenWidget全屏切换等通过Deck实例的widgets属性即可挂载。该模块自 deck.gl v9.0 起提供ZoomWidget、CompassWidget、FullscreenWidget为 v9.0ScreenshotWidget自 v9.2zoomStep参数自 v9.4因此需要 deck.gl 9.x 版本。安装与引入安装依赖npm install deck.gl/core deck.gl/widgets也可以在package.json中直接安装完整包deck.gl。在代码中必须同时引入控件样式表deck.gl/widgets/stylesheet.css否则控件没有外观import {Deck} from deck.gl/core; import {ZoomWidget, CompassWidget} from deck.gl/widgets; import deck.gl/widgets/stylesheet.css;把控件挂到 Deck 实例控件以数组形式传给Deck的widgets属性。下面的例子在页面左上角placement默认值top-left放置缩放控件和指北针控件parent指向页面中一个已存在的容器元素import {Deck} from deck.gl/core; import {ZoomWidget, CompassWidget} from deck.gl/widgets; import deck.gl/widgets/stylesheet.css; new Deck({ parent: document.getElementById(deck-root), initialViewState: { longitude: -122.4, latitude: 37.8, zoom: 11, pitch: 45, bearing: 30 }, controller: true, widgets: [ new ZoomWidget({placement: top-left}), new CompassWidget({placement: top-left}) ] });placement可选top-left、top-right、bottom-left、bottom-right、fill用于决定控件在视图内的停靠位置。在 React 项目中同样的控件作为DeckGL的子组件传入import React from react; import {DeckGL, ZoomWidget, CompassWidget} from deck.gl/react; import deck.gl/widgets/stylesheet.css; function App() { return ( DeckGL initialViewState{{longitude: 0, latitude: 52, zoom: 4}} controller ZoomWidget placementtop-left / CompassWidget placementtop-left / /DeckGL ); }验证方式页面渲染后容器左上角应出现对应的按钮鼠标悬停时显示控件的提示文字v9.5 起内置主题化 tooltip。各控件的参数与验证ZoomWidget缩放控件点击放大、-缩小每次按zoomStep改变缩放级别支持 Map 视图和 Globe 视图。常用参数orientation按钮方向默认vertical可选horizontalzoomStep每次点击的缩放增量默认1v9.4 起提供transitionDuration缩放过渡时长毫秒默认200zoomAxis默认all可选X、Y仅在当前视图是OrthographicView时生效onZoom点击回调参数为{viewId, delta, zoom}其中delta为1放大或-1缩小zoom为新的缩放级别。用这个回调打印参数是确认控件确实驱动了视图变化的最直接方式。CompassWidget指北针控件指北针实时显示当前视图的bearing方位角和pitch俯仰角支持MapView和GlobeView。交互规则点击一次将bearing复位为 0再点击第二次将pitch复位为 0。回调onReset会收到{viewId, bearing, pitch}其中bearing为新值 0若bearing原本就是 0 则pitch为 0。验证方式先用initialViewState设置非零的pitch: 45, bearing: 30如上文示例点击指北针两次点击后视图应回到正北、无俯仰的状态。ScreenshotWidget截图控件v9.2 起点击控件后浏览器会将当前 deck.gl 画布截图并下载到用户的下载文件夹。常用参数filename下载文件名默认screenshot.pngimageFormat默认image/png浏览器还可能支持image/jpeg、image/webp、image/avifonCapture允许应用接管截图逻辑用于集成更高级的截图模块。注意文档明确的边界只截取 deck.gl 画布本身画布上下层的 HTML 元素不在截图内例如非交错式底图和控件本身都不会被截到。验证方式点击后在浏览器下载目录中出现对应文件默认名为screenshot.png。FullscreenWidget全屏控件可选点击控件进入或退出全屏默认将地图容器元素设为全屏container参数可指定其他兼容的 DOM 元素。onFullscreenChange(fullscreen)回调在状态变化时触发可用于记录状态。多视图下指定控件归属多视图场景中带 UI 的控件可以通过viewId绑定到具体视图控件会相对该视图定位并且只响应该视图内的事件viewId为null默认时控件位于共享的 widget 根容器接收所有视图的事件。new Deck({ views: [ new MapView({id: left-map}), new MapView({id: right-map}) ], widgets: [ new FullscreenWidget({placement: top-right}), new ZoomWidget({viewId: left-map}), new GimbalWidget({viewId: right-map}) ] });一个容易踩的坑deck.gl 要求每个控件的id唯一默认id基于控件类型。同一类型出现两个实例比如两个ZoomWidget时必须给至少一个显式设置id例如new ZoomWidget({id: tokyo-zoom, viewId: tokyo})。另外默认容器中的控件会被视图级控件覆盖显示同一视图内多个控件注意用不同的placement错开。主题与样式内置控件支持深色和浅色两套外观。跟随系统主题的一种写法import {DarkGlassTheme, LightGlassTheme} from deck.gl/widgets; const prefersDarkScheme window.matchMedia((prefers-color-scheme: dark)); const widgetTheme prefersDarkScheme.matches ? DarkGlassTheme : LightGlassTheme; new Deck({ widgets: [ new ZoomWidget({style: widgetTheme}), new CompassWidget({style: widgetTheme}) ] });主题对整个 deck 实例全局生效不能为不同视图指定不同主题。更细粒度的外观调整走 CSS 变量.deck-widget选择器作用于所有控件.deck-widget-fullscreen这类选择器只作用于指定类型style属性或自定义 class 可以只作用于单个实例。常用变量包括--button-size默认28px、--widget-margin默认12px、--button-background等。每个控件还有专属的图标变量例如缩放控件的--icon-zoom-in/--icon-zoom-out、指北针的--icon-compass可替换为自己的 SVG Data Url。限制与排查要点版本要求widgets 模块整体来自 v9.0ScreenshotWidget来自 v9.2zoomStep来自 v9.4tooltip 主题化来自 v9.5在 8.x 及以下版本中不存在该模块。控件不显示确认引入了deck.gl/widgets/stylesheet.css且parent指向的容器真实存在、有尺寸。zoomAxis只对OrthographicView生效在普通MapView上设置X或Y没有效果。同一类型多个控件未设置唯一id时deck.gl 无法在渲染调用之间匹配控件需要显式传id。截图控件不截取画布外的 HTML 内容和控件本身这是文档明确的行为不是 bug。完整控件清单、自定义控件写法继承Widget类并实现onRenderHTML、onRedraw以及样式变量全表可继续参考 widgets 模块总览、Widget 基类文档、样式指南 和 tooltip 文档。【免费下载链接】deck.glWebGL2 powered visualization framework项目地址: https://gitcode.com/GitHub_Trending/de/deck.gl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

AutoGluon 0.4.0 版本全解析:MXNet 到 PyTorch 的深度学习迁移、Tabular 提速与新训练约束 2026/9/15 18:20:21

AutoGluon 0.4.0 版本全解析:MXNet 到 PyTorch 的深度学习迁移、Tabular 提速与新训练约束

AutoGluon 0.4.0 版本全解析:MXNet 到 PyTorch 的深度学习迁移、Tabular 提速与新训练约束 【免费下载链接】autogluon Fast and Accurate ML in 3 Lines of Code 项目地址: https://gitcode.com/GitHub_Trending/au/autogluon 本篇技术指南以 docs/whats_ne…

阅读更多 →
平板数据备份实操指南:非技术用户也能5分钟建保险绳 2026/9/15 18:20:21

平板数据备份实操指南:非技术用户也能5分钟建保险绳

1. 项目概述:为什么“平板坏了数据怎么办”成了高频焦虑?“平板坏了数据怎么办”——这短短八个字,背后是数以千万计普通用户的真实困境。不是工程师、不搞开发、没学过IT,只是用平板看网课、记笔记、存孩子照片、存工作合同、存旅…

阅读更多 →
Lighttools 8.4.0光学仿真入门:建模、光度学与实战要点 2026/9/15 18:20:21

Lighttools 8.4.0光学仿真入门:建模、光度学与实战要点

1. 从零开始认识Lighttools:它到底解决什么问题搞照明设计、光学系统开发的朋友,应该都听过Lighttools这个软件。我第一次接触Lighttools 8.4.0的时候,其实是有点懵的——界面功能密密麻麻,菜单层层叠叠,跟平时用的机械…

阅读更多 →
CSS if()函数:原生条件计算与暗色模式实践指南 2026/9/15 18:20:21

CSS if()函数:原生条件计算与暗色模式实践指南

1. 这不是“CSS 写 if”,而是 CSS 终于拥有了条件计算能力2026 年初,Chrome 137 正式发布后,前端圈炸了锅。朋友圈、技术群、掘金热榜反复刷屏一句话:“2026年了,CSS 终于能写 if 了”。我第一时间打开 DevTools&#…

阅读更多 →
Flutter与HarmonyOS跨端日期格式化解决方案 2026/9/15 18:20:21

Flutter与HarmonyOS跨端日期格式化解决方案

1. 跨端开发中的日期格式化痛点在Flutter与HarmonyOS 6.0的混合开发场景下,日期格式化这个看似简单的功能却暗藏玄机。我最近在开发一个便签类应用时,就遇到了这样的典型问题:当同一条数据需要在Android、iOS和HarmonyOS三端显示时&#xff0…

阅读更多 →
SurfSense 多智能体记忆子代理系统提示词设计:基于 update_memory 的持久化记忆协议解析 2026/9/15 18:17:20

SurfSense 多智能体记忆子代理系统提示词设计:基于 update_memory 的持久化记忆协议解析

SurfSense 多智能体记忆子代理系统提示词设计:基于 update_memory 的持久化记忆协议解析 【免费下载链接】SurfSense Open-source NotebookLM alternative. Research the open web with live data(Reddit, YT, IG, TikTok, Indeed, Google Search, Maps etc) throug…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞