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

Angular实现点击随机卡片填充数组首元素并自动填充其余卡片

Angular 随机卡片分配解决方案

组件逻辑实现

在你的组件类中添加以下代码,实现点击控制、数据分配和随机打乱逻辑:

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  // 原始数据数组
  arrayData = ['核心元素', '元素A', '元素B', '元素C', '元素D', '元素E'];
  // 用于展示的数组,初始占位
  displayData: string[] = new Array(this.arrayData.length).fill('点击任意卡片开始');
  // 标记是否已完成点击操作
  isClicked = false;

  handleCardClick(index: number): void {
    // 已点击过则直接返回,禁止重复操作
    if (this.isClicked) return;

    // 取出第一个元素和剩余元素
    const firstItem = this.arrayData[0];
    let remainingItems = [...this.arrayData.slice(1)];

    // Fisher-Yates 洗牌算法打乱剩余元素
    for (let i = remainingItems.length - 1; i > 0; i--) {
      const j = Math.floor(Math.random() * (i + 1));
      [remainingItems[i], remainingItems[j]] = [remainingItems[j], remainingItems[i]];
    }

    // 构建展示数组:点击位置放第一个元素,其余位置填充打乱后的剩余元素
    this.displayData = new Array(this.arrayData.length);
    this.displayData[index] = firstItem;
    let remainingIndex = 0;
    for (let i = 0; i < this.displayData.length; i++) {
      if (i !== index) {
        this.displayData[i] = remainingItems[remainingIndex];
        remainingIndex++;
      }
    }

    // 标记已完成点击,禁止后续操作
    this.isClicked = true;
  }
}

模板代码修改

更新你的HTML模板,绑定点击事件和展示数据,并根据状态禁用点击交互:

<div class="card-container">
  <div 
    class="card"
    *ngFor="let item of displayData; let i = index"
    (click)="handleCardClick(i)"
    [class.disabled]="isClicked"
  >
    {{ item }}
  </div>
</div>

样式补充(可选)

添加CSS样式区分可点击和不可点击状态:

.card-container {
  display: flex;
  gap: 1rem;
  padding: 1rem;
  flex-wrap: wrap;
}

.card {
  width: 100px;
  height: 100px;
  border: 1px solid #ccc;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: background-color 0.2s;
}

.card:hover:not(.disabled) {
  background-color: #f0f0f0;
}

.card.disabled {
  cursor: not-allowed;
  opacity: 0.7;
}

功能说明

  • 初始状态下所有卡片显示提示文本,点击任意卡片后触发分配逻辑
  • 点击的卡片会被赋值为arrayData的首个元素,其余卡片会被随机填充数组剩余元素
  • 一旦完成点击,所有卡片会变为不可点击状态,禁止重复操作

内容的提问来源于stack exchange,提问作者SEO JAYA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:40:29