Konva键盘事件

可以通过键盘进行上下左右移动图形

<template>
  <div class="rect">
    <div class="header">
      <el-button type="primary" @click="show">展示</el-button>
      <el-button type="success" @click="hide">隐藏</el-button>
    </div>
    <div id="canvas"></div>
  </div>
</template>
<script setup lang="ts">
import {onMounted} from 'vue'
import Konva from 'konva'

let  stage:Konva.Stage | null=null
const layer:Konva.Layer=new Konva.Layer()

onMounted(()=>{
  init()
})
const init=()=> {
  const el = document.getElementById("canvas")
  if (!el) {
    return
  }
  const { clientWidth, clientHeight } = el
  //创建一个stage平台
   stage = new Konva.Stage({
    container: 'canvas',
    width: clientWidth,
    height: clientHeight,

  })
  stage.add(layer)
  //矩形

  const width =400
  const height=200
  const x=clientWidth/2-width/2
  const y=clientHeight/2-height/2
  const rect=new Konva.Rect({
    //给图形添加id和名称,方便之后通过id和名称查找图形
    id:"textId",
    name:"textName",
    x:x,
    y:y,
    width:width,
    height:height,
    fill:'#ff8800',
    stroke:'black',
    strokeWidth:1,
    opacity:0.5
  })
layer.add(rect)
  const container=stage.container()//这行代码将获取到的 DOM 元素赋值给 container 变量。通过这个变量,你可以直接访问和操作这个 DOM 元素。
  const step=10
  container.tabIndex=1//tabIndex: 这是一个 HTML 属性,用于控制元素的可聚焦性和键盘导航顺序。
  container.addEventListener("keydown",(e)=>{
    if (e.key==="ArrowLeft"){
      rect.x(rect.x()-step)
    }else if (e.key==="ArrowDown"){
      rect.y(rect.y() + step)
    }
    else if (e.key==="ArrowRight") {
      rect.x(rect.x() + step)
    }
    else if (e.key==="ArrowUp") {
      rect.y(rect.y() - step)
    }
    else {
      return
    }
  })
}
const show=()=>{
  if (!stage){
    return
  }
//  const shapes=stage.findOne("#textId")//通过id查找
 // const shapes=stage?.findOne(".textName")//通过名称
 const shapes=stage?.findOne("Rect")//通过图形的类别来查找
  console.log(shapes)
  //设置展示
  shapes.show()

}
const hide=()=>{
  if (!stage){
    return
  }
//  const shapes=stage.findOne("#textId")//通过id查找
  // const shapes=stage?.findOne(".textName")//通过名称
  const shapes=stage?.findOne("Rect")//通过图形的类别来查找
  console.log(shapes)
  //设置展示
  shapes.hide()

}
</script>

<style scoped lang="scss">
.rect {
  padding: 20px;
  .header{
    height: 50px;
  }
  #canvas {
    background-color: #eee;
    border: 1px solid #666;
    height: calc(100vh - 92px);
  }
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值