Я использую семантический интерфейс реагирования карты. Я пытаюсь создать игру памяти. Есть ли способ, которым я могу иметь флип анимацию для карты.
Моя карточка Компонент
<Card
image={card.flipped || card.discovered ? card.url : 'http://flotrend.com/wp-content/uploads/2016/06/placeholder-400x400.png'}
onClick={() => flipCard(card.id)}
/>
В библиотеке есть компонент Reaveal. как ниже.
import React from 'react'
import { Image, Reveal } from 'semantic-ui-react'
const RevealExampleFade = () => (
<Reveal animated='fade'>
<Reveal.Content visible>
<Image src='/assets/images/wireframe/square-image.png' size='small' />
</Reveal.Content>
<Reveal.Content hidden>
<Image src='/assets/images/avatar/large/ade.jpg' size='small' />
</Reveal.Content>
</Reveal>
)
export default RevealExampleFade
но он делает анимацию при наведении. Есть ли способ заставить его переключать контент по клику? Я не могу увидеть примеры, где мы можем.
1 ответ
Решение
Вы можете сделать карту видимой через событие onClick, условно отобразив компонент Card. Это будет выглядеть примерно так:
import React from 'react'
import { Image, Grid } from 'semantic-ui-react'
const FlipCard = (props) => {
const { id, flipped, cardImage } = props.card
const { hiddenImage, onCardFlip } = props
if(flipped){
//this image will be displayed once the card is clicked
return(
<Image width={200} src={cardImage} />
)
}
else{
//this image will be displayed if the card has not been clicked
return(
<Image id={id} onClick={onCardFlip} width={200} src={hiddenImage} />
)
}
}
class CardGame extends React.Component {
constructor(){
super();
this.state = {
cards : [
{
id: 0,
flipped: false,
cardImage: 'https://upload.wikimedia.org/wikipedia/commons/thumb/2/25/Playing_card_spade_A.svg/2000px-Playing_card_spade_A.svg.png',
},
{
id: 1,
flipped: false,
cardImage: 'http://vignette2.wikia.nocookie.net/yugioh/images/d/d4/BlueEyesWhiteDragon-DUSA-EN-UR-1E.png/revision/latest?cb=20170330172041',
},
{
id: 2,
flipped: false,
cardImage: 'https://www.palossports.com/imagez/15327_12.jpg',
},
],
hiddenImage: 'https://s-media-cache-ak0.pinimg.com/originals/6c/a0/16/6ca016115a894f69dea75cc80f95ad92.jpg',
}
}
handleCardFlip = (e, data) => {
const cards = this.state.cards
cards[e.target.id].flipped = true
this.setState({ cards })
}
render(){
const { hiddenImage, cards } = this.state
const mappedCards = cards.map( card => {
return(
<FlipCard key={card.id} hiddenImage={hiddenImage} card={card} onCardFlip={this.handleCardFlip} />
)
})
return(
<div>
{ mappedCards }
</div>
)
}
}
export default CardGame