cesium 放大、缩小组件

实现效果:

 点击 “+”,放大;长按 “+”,持续放大。

点击 “-”,缩小;长按 “-”,持续缩小。

组件代码如下:

<template>

  <div class="flex-column-even right-bottom-container">
    <div @click="zoomIn" @mousedown="zoomInMouseDown" @mouseup="myMouseUp">
      <el-icon>
        <Plus/>
      </el-icon>
    </div>
    <div @click="zoomOut" @mousedown="zoomOutMouseDown" @mouseup="myMouseUp">
      <el-icon>
        <Minus/>
      </el-icon>
    </div>
  </div>

</template>

<script setup lang="ts">

import {ref} from "vue";
import {Minus, Plus} from "@element-plus/icons-vue";

const isPressing = ref<boolean>(false)

let interval: any = null

function myMouseUp() {
  isPressing.value = false
  clearInterval(interval)
}

/* 放大 */
function zoomIn() { // 单击放大
  let position = window.viewer.camera.position;
  let cameraHeight = window.viewer.scene.globe.ellipsoid.cartesianToCartographic(position).height;
  // 每次缩小 20 倍,参数可改
  let moveRate = cameraHeight / 20.0;
  window.viewer.camera.moveForward(moveRate);
}

function zoomInMouseDown() { // 长按放大
  isPressing.value = true
  if (isPressing.value) {
    interval = setInterval(() => {
      zoomIn()
    }, 10) // 设置间隔时间以控制放大和缩小的速度
  }
}

/* 缩小 */
function zoomOut() { // 单击缩小
  let position = window.viewer.camera.position;
  let cameraHeight = window.viewer.scene.globe.ellipsoid.cartesianToCartographic(position).height;
  // 每次缩小 20 倍,参数可改s
  let moveRate = cameraHeight / 20.0;
  window.viewer.camera.moveBackward(moveRate);
}

function zoomOutMouseDown() { // 长按缩小
  isPressing.value = true
  if (isPressing.value) {
    interval = setInterval(() => {
      zoomOut()
    }, 10) // 设置间隔时间以控制放大和缩小的速度
  }
}

</script>

<style scoped lang="scss">

.flex-column-even {
  display: flex;
  flex-direction: column;
  justify-content: space-evenly;
  align-items: center;
}

.right-bottom-container {
  background: rgba(20, 29, 36, 0.9);
  border-radius: 20px;
  width: 30px;
  height: 90px;
  position: absolute;
  right: 10px;
  bottom: 10px;
  z-index: 1;
  border: 1px solid rgba(126, 132, 136, 0.5);

  div {
    color: #FFFFFF;
    font-size: 14px;
  }

  :deep(.el-icon) {
    font-size: 18px;
  }
}

</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值