konvajs 和 高德地图 在vue2 dialog弹框中使用

konvajs 在 element dialog弹框中, 弹框加载出来, konvajs => canvas 却没有加载出来

原因: konvajs在普通页面上可以直接加载, 在弹框中, 想要加载出来, 则需要使用 dialog的两个事件, 打开弹框后调用和,离开弹框调用

<!-- 详情: @opened="onDialogOpened" dialog弹框打开后才会执行,避免konvajs未加载, @closed="onDialogClosed" 重置 -->

javascript 复制代码
<template>
    <div>
      <el-button @click="openDialog">打开弹框</el-button>
      <!-- 详情  @opened="onDialogOpened" dialog弹框打开后才会执行,避免konvajs未加载, @closed="onDialogClosed" 重置 -->
      <el-dialog v-model:visible="dialogVisible" title="KonvaJS 弹框示例" width="50%" @opened="onDialogOpened">
        <div>
          <div ref="container" style="width: 500px; height: 500px;"></div>
        </div>
      </el-dialog>
    </div>
  </template>
  
  <script>
  import Konva from 'konva';
  
  export default {
    data() {
      return {
        dialogVisible: false,
        stage: null
      };
    },
    methods: {
      openDialog() {
        this.dialogVisible = true;
      },
  
      createKonvaStage() {
        const container = this.$refs.container;
        if (container) {
          this.stage = new Konva.Stage({
            container: container,
            width: 300,
            height: 300
          });
  
          const layer = new Konva.Layer();
          const rect = new Konva.Rect({
            x: 50,
            y: 50,
            width: 100,
            height: 100,
            fill: 'red',
            draggable: true
          });
  
          layer.add(rect);
          this.stage.add(layer);
        }
      },
  
      onDialogOpened() {
        this.createKonvaStage();
      }
    }
  };
  </script>
  
  <style scoped>
  /* 添加样式以适应您的需求 */
  </style>

高德地图也是如此 (父传递子组件,子监听),不过我高德地图用的是监听解决的, 后边konvajs发现dialog有事件可以解决

这里就不过多演示了

javascript 复制代码
  // 监听 map地图 的变化, dialog中
  watch(dialogVisible, (newValue) => {
    if (newValue === true) {
      mapFun()
    } else {
      showInputCircle.value = false // 默认隐藏
      // console.log(showInputCircle.value);
  
      path.value = [] // 多边形编辑
      inputCircleValue.value = 1000 // 圆 半径
      // lng.value = '' // 圆 经度
      // lat.value = '' // 圆 维度
      // const lng = ref('113.625317') //经度 默认
      // const lat = ref('34.746308') //维度 默认
  
      map?.destroy()
      // console.log('地图已关闭')
    }
  })
相关推荐
To_OC5 小时前
从一次栈溢出报错说起,我把递归彻底扒明白了
javascript·算法·程序员
kyriewen7 小时前
面试官问你:“AI 能写 80% 的代码了,公司为什么还需要你?”
前端·javascript·面试
Goodbye10 小时前
从 Token 到 Embedding:LLM 核心基础深度解析
javascript·人工智能
用户9385156350710 小时前
工具调用背后:LLM 如何突破“缸中大脑”,操控真实世界?
javascript·人工智能
Goodbye10 小时前
从函数到智能:LLM Tool Use 深度解析
javascript·人工智能
半个落月10 小时前
大模型到底是怎么“调用工具”的?从一个 Node.js Demo 看懂 Tool Use
javascript·人工智能
烬羽10 小时前
中英文 token 数量差一倍?两段 JS 代码搞懂 LLM 底层是怎么"读"文字的
javascript·程序员·架构
前端切图崽_小郭10 小时前
虚拟滚动:静态 vs 动态的核心差异与实现?
vue.js
山河木马10 小时前
矩阵专题1-怎么创建模型矩阵(uModelMatrix)
javascript·webgl·计算机图形学
白鲸开源12 小时前
Apache SeaTunnel Zeta Engine 的 Basic Auth 是怎么工作的?
java·vue.js·github