You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular12中如何通过方向键或点击对应div控制目标div每次移动10px

Angular 实现div位移控制方案

前置准备

首先在你的组件类中定义两个变量存储位移偏移量,后续通过绑定动态样式控制中间div的位置,使用transform做偏移性能更优,不会触发页面重排。

// 组件类属性
offsetX: number = 0;
offsetY: number = 0;

然后在模板文件中给中间div绑定动态样式,同时给四个方向的控制div绑定点击事件:

<!-- 中间可移动div -->
<div class="center-box" [style.transform]="`translate(${offsetX}px, ${offsetY}px)`"></div>

<!-- 四个方向控制div -->
<div class="control left" (click)="goLeft()">左移按钮</div>
<div class="control right" (click)="goRight()">右移按钮</div>
<div class="control top" (click)="goUp()">上移按钮</div>
<div class="control bottom" (click)="goDown()">下移按钮</div>

补全点击事件逻辑

你提问中空缺的goLeft方法直接修改偏移量即可:

goLeft(ev:any){
  // 左移X轴坐标减10
  this.offsetX -= 10;
}

// 其余三个方向的点击逻辑参照如下
goRight() {
  this.offsetX += 10;
}
goUp() {
  this.offsetY -= 10;
}
goDown() {
  this.offsetY += 10;
}

补全键盘事件逻辑

首先引入HostListener监听全局键盘事件,你空缺的向下箭头逻辑直接调用已写好的goDown方法即可,不需要重复写逻辑:

import { HostListener } from '@angular/core';

// 类中添加键盘监听
@HostListener('window:keydown', ['$event'])
onKeyDown(event: KeyboardEvent) {
  if(event.key == "ArrowDown"){
    // 调用已封装的下移方法即可
    this.goDown();
    console.log(event.key);
  }
  // 其余方向键逻辑同理调用对应方法即可
  if(event.key == "ArrowLeft") this.goLeft();
  if(event.key == "ArrowRight") this.goRight();
  if(event.key == "ArrowUp") this.goUp();
}

可选优化

如果需要限制移动范围,只需要在修改offsetX/offsetY的时候增加边界判断即可,比如限制横向移动最大不超过200px,最小不小于-200px:

goLeft() {
  if(this.offsetX > -200) {
    this.offsetX -=10
  }
}

内容的提问来源于stack exchange,提问作者nano dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:48:04