前言
本专题主要是针对学习cesium小伙伴,在项目中实践总结的一些工具,以及会详细介绍,知识和封装的原理,废话不多说,此文介绍的是,鼠标提示tips工具组件,在项目中使用会优化交互效果,对客户友好,例如标绘工具,地图操作。
一、PlotDrawTip组件
之前在网上看到的都是,通过动态创建,编辑div位置,定位到鼠标的位置,当然效果也能实现,但是发现一个问题就是鼠标移动过快,鼠标会浮到div上,导致div静止,位置已经错位。
PlotDrawTip提示组件的思路是采用的,场景渲染事件 实时更新标签的位置 使其与笛卡尔坐标一致,ui样式单独封装成tip.vue
组件,其原理和自定义label组件类似。
二、调用方式
import PlotDrawTip from "@/utils/PlotDrawTip"
初始化
this.plotDrawTip = new PlotDrawTip(this.viewer);
设置文本内容
this.plotDrawTip.setContent(['左键点击开始绘制'])//setCentent接受的是文本array数组,看自己的需要
更新笛卡尔坐标位置
this.plotDrawTip && this.plotDrawTip.updatePosition(position);
销毁提示组件
this.plotDrawTip.remove();
·
1.PlotDrawTip类
代码如下(示例):
import Vue from "vue"
import TipVue from "./Tip.vue"
let TipVm = Vue.extend(TipVue)
//绘制鼠标提示类
export default class PlotDrawTip {
constructor(viewer) {
this.viewer = viewer;
//创建模板
this.vmInstance = new TipVm({
propsData: {
contents: []
}
}).$mount();
viewer.cesiumWidget.container.appendChild(this.vmInstance.$el); //将字符串模板生成的内容添加到DOM上
this.addPostRender();
}
setContent(contents) {
this.vmInstance.contents = contents;
}
updatePosition(newPosition) {
this.position = newPosition;
}
//添加场景事件
addPostRender() {
this.viewer.scene.postRender.addEventListener(this.postRender, this);
}
//场景渲染事件 实时更新标签的位置 使其与笛卡尔坐标一致
postRender() {
if (!this.vmInstance.$el || !this.vmInstance.$el.style) return;
if (!this.position) return;
const canvasHeight = this.viewer.scene.canvas.height;
const windowPosition = new Cesium.Cartesian2();
Cesium.SceneTransforms.wgs84ToWindowCoordinates(this.viewer.scene, this.position, windowPosition);
this.vmInstance.$el.style.bottom = canvasHeight - windowPosition.y - 20 + "px";
const elWidth = this.vmInstance.$el.offsetWidth;
this.vmInstance.$el.style.left = windowPosition.x + 50 + "px";
}
//移除标绘
remove() {
this.viewer.cesiumWidget.container.removeChild(this.vmInstance.$el); //删除DOM
this.viewer.scene.postRender.removeEventListener(this.postRender, this); //移除事件监听
}
}
2.Tip.vue组件
样式根据自己的情况修改
<template>
<div class="plot-draw-tip-container">
<div v-for="(text,index) in contents" :key="index">{{text}}</div>
</div>
</template>
<script>
export default {
name: "PlotDrawTip",
props: {
contents: {
type: Array
}
}
};
</script>
<style lang="css" scoped>
.plot-draw-tip-container {
position: absolute;
background: rgba(0, 0, 0, 0.637);
padding: 6px;
color: white;
pointer-events: none;
}
.plot-draw-tip-container::before {
position: absolute;
content: "";
top: calc(50% - 10px);
left: -10px;
border-bottom: 10px solid transparent;
border-top: 10px solid transparent;
border-right: 10px solid rgba(0, 0, 0, 0.637);
}
</style>
3.效果
效果如下,此前鼠标覆盖div的bug也解决了
文章来源:https://www.toymoban.com/news/detail-842147.html
总结
此文中的tips组件,原理简单,可以拿来即用,在项目中使用,后边的文章中,会陆续更新cesium的工具,以及案例,欢迎大家关注,,如有问题可以在评论区留言,或者私信,我会及时回复。文章来源地址https://www.toymoban.com/news/detail-842147.html
到了这里,关于cesium 绘制工具 鼠标提示tips工具组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!