写在前面:

  • 环境:Vue3 + Konva + vite
  • 在绘制界面时踩坑,主要是关于 listening 属性的使用
  • 在绘制界面时,不免出现有内容重叠的情况,这会影响事件的触发

  • 使用设置listening属性可以允许事件穿透,默认为true不可穿透(示例如下)

    <template>
    <div>
    <div id="mybtn"></div>
    </div>
    </template> <script>
    import Konva from 'konva'; export default {
    data() {
    return {
    position: {
    posX: 0,
    posY: 0,
    },
    size: {
    width: 100,
    height: 50,
    },
    styles: {
    borderSize: 1,
    fontSize: 12,
    backgroundColor: '',
    fontColor: '#000',
    borderColor: '#000',
    opacity: 1,
    },
    btnText: 'Button',
    };
    },
    mounted() {
    this.initializeKonva();
    },
    methods: {
    initializeKonva() {
    const stage = new Konva.Stage({
    container: 'mybtn',
    width: this.size.width,
    height: this.size.height,
    }); const layer = new Konva.Layer();
    stage.add(layer); const button = new Konva.Rect({
    x: this.position.posX,
    y: this.position.posY,
    width: this.size.width,
    height: this.size.height,
    fill: this.styles.backgroundColor,
    stroke: this.styles.borderColor,
    strokeWidth: this.styles.borderSize,
    opacity: this.styles.opacity,
    }); const buttonText = new Konva.Text({
    x: this.position.posX,
    y: this.position.posY,
    width: this.size.width,
    height: this.size.height,
    text: this.btnText,
    fontSize: this.styles.fontSize,
    fontFamily: 'Arial',
    fill: this.styles.fontColor,
    align: 'center',
    verticalAlign: 'middle',
    listening: false, // 设置listening为false,允许事件穿透
    }); button.on('click', this.clickBtn); layer.add(button);
    layer.add(buttonText);
    layer.draw(); }, clickBtn() {
    console.log('clickBtn run');
    // 点击事件逻辑
    }
    },
    };
    </script> <style scoped>
    div {
    width: 100%;
    height: 100%;
    }
    </style>

Konva 内容重叠无法触发点击事件的解决方法的更多相关文章

  1. jquery无法为动态生成的元素添加点击事件的解决方法

    遇到 jquery无法为动态生成的元素添加点击事件,谷歌一下,整理一下解决方法如下: (<li>中间的元素是动态生成的), 现在想为<i>添加点击事件, 例子如下: <d ...

  2. Angular输入框内按下回车会触发其它button的点击事件的解决方法

    方法:给button按钮添加type=“botton”属性

  3. view.performClick()触发点击事件

    1.主要作用 自动触发控件的点击事件 2.界面的布局文件  activity_main.xml <RelativeLayout xmlns:android="http://schema ...

  4. 解决jQuery ajax动态新增节点无法触发点击事件的问题

    在写ajax加载数据的时候发现,后面添加进来的demo节点元素,失去了之前的点击事件.为什么点击事件失效,我们该怎么去解决呢? 其实最简单的方法就是直接在标签中写onclick="" ...

  5. 可以触发点击事件并变色的UILabel

    可以触发点击事件并变色的UILabel 谁说UILabel不能够当做button处理点击事件呢?今天,笔者就像大家提供一个改造过的,能够触发点击事件并变色的UILabel:) 效果图: 还能当做计时器 ...

  6. 解决JavaScript拖动时同时触发点击事件的BUG

    在做在线地图项目的时候,在给marker点绑定事件时,因为有点击事件click,同时又存在拖动dragEnd事件,首先没有重大缺陷,就是在用户在点击的时候,有时候本想是点击,但是他触发了drag的事件 ...

  7. 关于AJAX异步加载节点无法触发点击事件问题的解决方式

    做练习的过程中遇到一个问题,使用AJAX异步新增一个节点,无法触发点击事件,经过查阅之后知道一个方式,使用JS的委托事件,在此做一个记录. $(document).on('click', '.recr ...

  8. JS实现按下按键触发点击事件

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. vue中Enter触发登录事件和javascript中Enter触发点击事件

    created(){ window.addEventListener('keydown', this.handleKeyDown, true)//开启监听键盘按下事件 } 在methods中当keyC ...

  10. Echarts如何添加鼠标点击事件?防止重复触发点击事件

    Echarts如何添加鼠标点击事件? 1.通常我们只使用了以下代码,通过配置项和数据显示图表. var myChart = echarts.init(document.getElementById(' ...

随机推荐

  1. uniapp中利用renderjs引入leaflet

    由于uniapp中要使用地图,虽然uni-app有地图组件map,但是很难用,而且性能很差.在app中是不能操作dom,所以直接用leaflet是不可能的.最终发现了renderjs,官网提出,在ap ...

  2. 『手撕Vue-CLI』添加帮助和版本号

    前言 经过上一篇『手撕Vue-CLI』编码规范检查之后,手撕 Vue-CLI 已经进阶到了代码规范检查这一步,已经将基本的工程搭建好了,然后代码规范约束也已经加入了,并且将 nue-cli 指令绑定到 ...

  3. Istio(八):istio安全之认证,启用mTLS

    目录 一.模块概览 二.系统环境 三.istio认证 3.1 证书创建与轮换 3.2 对等认证和请求认证 3.2.1 对等认证 3.2.2 请求认证 3.3 mTLS 3.3.1 双向 TLS 3.3 ...

  4. 基于ADB Shell 实现的 Android TV、电视盒子万能遥控器 — ADB Remote ATV

    ADB Remote ATV Android TV 的遥控器,基于 ADB Shell 命令 ADB Remote ATV 是一个 Android TV 的遥控器,基于 ADB Shell 命令,泛用 ...

  5. 面试题--mysql的数据库优化

    mysql的数据库优化 当有人问你如何对数据库进行优化时,很多人第一反应想到的就是 SQL 优化,如何创建索引,如何改写 SQL,他们把数据库优化与 SQL 优化划上了等号. 当然这不能算是完全错误的 ...

  6. Geatpy学习笔记1:官方案例

    一.入门 1.求解器模式入门 案例 1 import geatpy as ea import numpy as np # 构建问题 r = 1 # 目标函数需要用到的额外数据 @ea.Problem. ...

  7. kubernetes configmap配置方法

    configmap解释 在k8s运行期间会有一些依赖的配置文件,他们存在宿主机中的一个目录中或者代码里,如果配置放生变化,pod在另一台服务器启动,在没有这些配置的时候,可能会导致pod无法正常运行, ...

  8. 对于UITableView和UIImageView的DrawRect重写之后的影响

    一.继承 UITableView和UIImageView , 重写 DrawRect 方法,然后里面留空 ImageView @implementation DrawImageView - (void ...

  9. Centos Stream 10 测试版下载:未来的RHEL10&Rocky Linux 10

    简介 最近发现Centos最放出了Stream 10 测试版本,应该是基于Fedora 40构建的.未来红帽会基于此版本构建RHEL 10. 内核版本:6.9.0 Python版本:3.12.2 RH ...

  10. Lru在Rust中的实现, 源码解析

    LRU(Least Recently Used)是一种常用的页面置换算法,其核心思想是选择最近最久未使用的页面予以淘汰. LRU算法原理 基本思想:LRU算法基于一个假设,即如果一个数据在最近一段时间 ...