惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
IT之家
IT之家
Recent Announcements
Recent Announcements
B
Blog
D
Docker
V
V2EX
GbyAI
GbyAI
L
LangChain Blog
博客园 - Franky
U
Unit 42
T
The Blog of Author Tim Ferriss
A
About on SuperTechFans
博客园 - 【当耐特】
Google DeepMind News
Google DeepMind News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Vercel News
Vercel News
博客园_首页
D
DataBreaches.Net
人人都是产品经理
人人都是产品经理
Y
Y Combinator Blog
量子位
Blog — PlanetScale
Blog — PlanetScale
罗磊的独立博客

博客园 - 洛晨随风

openclaw云端部署踩坑(持续更新) openspec的project.md要求模板 AI编程的残酷真相:为什么说Spec Coding是2026年最大的趋势? 🐳 Docker 核心实战与进阶笔记 在 AI 编程狂热之后:为什么“文档与原理”才是开发者的真正护城河 python代码:ffmpeg.probe(视频路径) 出现系统找不到指定文件的问题处理办法 浅显易懂的解释一下RRF加权算法的意思 JS队列之双端队列介绍 hugging face 在windows 上的使用办法 windows 端使用gemini cli的办法 记一次插件发布的采坑经历 提示词记录 混合开发的一些小tips(uniapp+hbuilder x+vue3+vite+ 5+APP) AI的规则设置 项目打包时跳过TS类型检查的办法 cursor 配置MCP模式,以读取figma原型为例说明开发的便捷性 pnpm workspace 采坑 一些AI工具整理 解决谷歌翻译导致的HTML多加入<font style=“vertical-align:inherit;“>的问题
大屏上cesium可能出现放大缩小后的坐标偏移问题采坑
洛晨随风 · 2025-08-12 · via 博客园 - 洛晨随风

为了让大屏兼容适配不同尺寸屏幕,就用了

v-scale-screen组件在vue项目,

但是为什么v-scale-screen组件嵌套下的cesium地图,放大缩小的时候会坐标偏移?

 这是gemini给出的答案,按照这个办法,我解决了这个问题:

v-scale-screen 组件通常用于大屏应用或仪表板,它的核心原理很可能是利用 CSS 的 transform: scale() 属性来对其包裹的内容进行整体缩放,以适应不同的屏幕分辨率。

为什么会发生坐标偏移?

  1.  的工作原理:
    当 v-scale-screen 将 Cesium 地图(一个 <canvas> 元素)包裹起来并应用 transform: scale(X) 时,它只是在视觉上改变了 Cesium 地图的尺寸。它并没有改变 Cesium 地图所占据的实际像素尺寸或者浏览器报告的鼠标事件的坐标系

  2. Cesium 的交互原理:
    Cesium 是一个 WebGL 3D 地图库。它在 <canvas> 元素上渲染,并且其所有的交互(放大、缩小、平移、点击拾取对象等)都是基于鼠标事件在 Canvas 内部的原始像素坐标来计算的。当用户在屏幕上点击或滚动时,浏览器会报告鼠标事件发生的 clientXclientY 等屏幕坐标。Cesium 会根据这些原始坐标来计算在 3D 场景中的对应位置。

  3. 冲突点:

    • 假设 v-scale-screen 将整个内容缩放了 0.5 倍(即 transform: scale(0.5))。

    • 你的 Cesium 地图原本是 1000x800 像素。

    • 经过 v-scale-screen 缩放后,它在屏幕上看起来只有 500x400 像素。

    • 当你在屏幕上点击一个视觉上在 (250, 200) 位置的点时(相对于缩放后的地图),浏览器报告给 Cesium 的鼠标事件坐标,却可能是 (500, 400)(相对于原始未缩放的 Canvas )。

    • Cesium 收到 (500, 400) 这个坐标,它会认为这个点在自己的原始 1000x800 像素的 Canvas 中,并根据这个未缩放的坐标去进行 3D 拾取或计算缩放中心。

    • 结果就是:你点击的视觉上的点与 Cesium 内部计算的点不一致,导致了放大缩小或点击拾取时的坐标偏移。

简单来说,v-scale-screen 让 Cesium 的画布看起来变小了,但是 Cesium 内部感知到的画布尺寸和鼠标事件的坐标却依然是基于原始尺寸的。

解决方案

解决这个问题的核心思想是确保 Cesium 能够获取到正确的、经过缩放调整后的鼠标事件坐标,或者干脆让 Cesium 独立于 v-scale-screen 进行尺寸管理。