【探索LWC开发之】用LWC做一个背单词卡片,可翻转交互的Flashcard
2023年09月15日
文章浏览:231

组件简介:

一个简单的Salesforce LWC示例,名字叫做flashcard, 实现了一个交互式的单词卡片组件。

用户可以点击卡片来查看单词的定义,然后再次点击卡片来隐藏定义,每次点击卡片有动画翻转的效果。

(看似LWC, 实际上是CSS的复杂运用)

代码示例:

flashcard.html

<template>
    <div class="flashcard-container" onclick={handleToggleCard}>
      <div class={flipCardClass}>
        <!-- 正面 -->
        <div class="card-front">
          <p>{word}</p>
        </div>
        <!-- 背面 -->
        <div class="card-back">
          <p>{definition}</p>
        </div>
      </div>
    </div>
  </template>

flashcard.js

import { LightningElement, api, track } from 'lwc';

export default class Flashcard extends LightningElement {
  @api word = 'Hello World!'; // 默认单词
  @api definition = '你好 世界!'; // 默认定义
  @track isFlipped = false;// 初始状态未翻转

  get flipCardClass() {
    return this.isFlipped ? 'card flipped' : 'card';
  }

  // 卡片点击事件处理函数
  handleToggleCard() {
    this.isFlipped = !this.isFlipped; // 切换翻转状态
  }
}

flashcard.css

/* 容器样式,定义卡片的宽度、高度和3D效果 */
.flashcard-container {
    width: 600px;
    height: 350px;
    perspective: 1000px;/* 透视效果用于3D旋转 */
  }
/* 卡片样式,定义卡片的基本属性,包括翻转效果和圆角 */
  .card {
    width: 100%;
    height: 100%;
    transform-style: preserve-3d;/* 保持3D效果 */
    transition: transform 0.4s;/* 添加过渡效果,实现平滑翻转 */
    border-radius: 10px; /* 添加圆角属性 */
  }

  .card-front,
  .card-back {
    width: 100%;
    height: 100%;
    position: absolute;
    backface-visibility: hidden;/* 隐藏背面,实现翻转效果 */
    border-radius: 10px; /* 添加圆角属性 */
  }
/* 卡片正面样式 */
  .card-front {
    background-color: white;
    color: black;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 24px;
  }
/* 卡片背面样式 */
  .card-back {
    background-color: #e7fffb;
    color: black;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    transform: rotateY(180deg);/* 旋转180度,翻转到背面 */
  }
/* 翻转状态下的卡片样式 */
  .card.flipped {
    transform: rotateY(180deg);/* 旋转180度,翻转到背面 */
  }

flashcard.js-meta.xml

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>58.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__Tab</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordPage</target>

    </targets>
</LightningComponentBundle>


父组件示例:

flashcardParent.html

<template>
  <div class="parent-container">
    <c-flashcard word="Hello World!" definition="你好 世界!"></c-flashcard>
  </div>
</template>


关注 收藏