- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用react-spring为我的Hangman应用程序让数组中的字母以动画形式输入和输出。我希望它们在加载时淡入,并在从数组中删除时淡出。单击时它们将从数组中删除。现在我只想让它们淡入淡出。我得到的最接近的是与以前相同的按钮,但它很滞后并且根本没有动画。
我尝试过使用 Spring 组件、Transition 组件和 useTransition。
这是我尝试研究的最新示例。 codesandbox
const App = () => {
const [availableLetters, setAvailableLetters] = useState([
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z'
])
const location = useLocation()
const transitions = useTransition(location, location => location.pathname, {
from: { opacity: 0, transform: 'translate(100%,0)' },
enter: { opacity: 1, transform: 'translate(0,0)' },
leave: { opacity: 0, transform: 'translate(-50%,0)' }
})
return (
<Fragment>
<Header defaultGuesses={defaultGuesses} />
{msgAlerts.map((msgAlert, index) => (
<AutoDismissAlert
key={index}
heading={msgAlert.heading}
variant={msgAlert.variant}
message={msgAlert.message}
/>
))}
{/* routes */}
<main className="container">
{transitions.map(({ item, props, key }) => (
<animated.div native='true' key={key} style={props}>
<Switch location={item}>
{/* home */}
<Route
exact
path="/"
render={() => (
<Welcome
msgAlert={msgAlert}
resetAllButSecret={resetAllButSecret}
setSecret={setSecret}
/>
)}
/>
<Route
exact
path="/guesses"
render={() => (
<Guesses
msgAlert={msgAlert}
secret={secret}
setGuesses={setGuesses}
resetAllButSecretAndGuesses={resetAllButSecretAndGuesses}
setDefaultGuesses={setDefaultGuesses}
/>
)}
/>
<Route
exact
path="/play"
render={() => (
<Play
guesses={guesses}
availableLetters={availableLetters}
correctLetters={correctLetters}
incorrectLetters={incorrectLetters}
secret={secret}
setSecret={setSecret}
pushToCorrect={pushToCorrect}
pushToIncorrect={pushToIncorrect}
removeAvailable={removeAvailable}
msgAlert={msgAlert}
resetBoard={resetBoard}
gameOver={gameOver}
setGameOver={setGameOver}
setGuesses={setGuesses}
resetGame={resetGame}
/>
)}
/>
</Switch>
</animated.div>
))}
</main>
</Fragment>
)
}
export default App
import { Spring, animated, Transition } from 'react-spring/renderprops'
import ClickableLetter from './ClickableLetter'
const AnimatedLetter = animated(ClickableLetter)
const Play = ({'tons of props i'm not showing'}) => {
const availHTML = availableLetters.map((letter, index) => (
<Transition
from={{ opacity: 0 }}
to={{ opacity: 1 }}
leave={{ opacity: 0 }}
// config={config.slow}
key={`${letter}_${index}`}
>
{styles => (
<AnimatedLetter
style={styles}
pushToCorrect={pushToCorrect}
pushToIncorrect={pushToIncorrect}
secret={secret}
removeAvailable={removeAvailable}
letter={letter}
gameOver={gameOver}
msgAlert={msgAlert}
/>
)}
</Transition>
))
return (
<AbsoluteWrapper>
<Fragment>
{availHTML}
</Fragment>
</AbsoluteWrapper>
)
}
const availHtml = availableLetters.map(letter => (
<ClickableLetter
key={letter}
pushToCorrect={pushToCorrect}
pushToIncorrect={pushToIncorrect}
secret={secret}
removeAvailable={removeAvailable}
letter={letter}
gameOver={gameOver}
msgAlert={msgAlert}
/>
))
import React from 'react'
import { withRouter } from 'react-router-dom'
import { PrimaryButton } from '../Shared/Styled'
// these are the green letters used to let a user guess a letter
const ClickableLetter = ({
letter, secret, pushToCorrect, pushToIncorrect, removeAvailable, gameOver, msgAlert
}) => {
// this function is used to either push the value to a correct or incorrect array causing an app wide state change and re render
const pushValue = () => {
if (!gameOver) {
if (secret.toLowerCase().includes(letter)) {
pushToCorrect(letter)
} else {
pushToIncorrect(letter)
}
// take it from the availLetter arr to re-render this component with one less letter
removeAvailable(letter)
} else {
msgAlert({
heading: 'Oops!',
message: 'Game is over, please click reset to play again',
variant: 'danger'
})
}
}
return (
<PrimaryButton onClick={pushValue}>{letter}</PrimaryButton>
)
}
export default withRouter(ClickableLetter)
const transitions = useTransition(availableLetters, item => item, {
from: { opacity: 0},
enter: { opacity: 1},
leave: { opacity: 0}
})
const availHTML = transitions.map(({ item, props, key }) =>
<AnimatedLetter key={key} style={props}
pushToCorrect={pushToCorrect}
pushToIncorrect={pushToIncorrect}
secret={secret}
removeAvailable={removeAvailable}
letter={item}
gameOver={gameOver}
msgAlert={msgAlert}/>
)
我的另一个尝试是使用animated.div而不是animated(ClickableLetter),并将ClickableLetter渲染在div内部。像这样的东西。 (没有代码,所以这不准确)
const availHTML = transitions.map(({ item, props, key }) =>
<animated.div key={key} style={props}><ClickableButton letter={item}/> </animated.div>
))
最佳答案
好吧,过了一段时间我就明白了。首先,我需要准备好我的自定义组件动画......
const AnimatedClickableLetter = animated(ClickableLetter)
然后我使用了Transition组件,我仍然没有弄清楚如何使用useTransition来做到这一点。我尝试过,但没有任何进展。
const availHTML = (
<Transition
items={availableLetters} // the array
keys={item => item} //unique keys, in this instance, the letter is fine
from={{ opacity: 1 }} // animation props
enter={{ opacity: 1 }}
leave={{ opacity: 0 }}
>
{letter => props => //for each letter, make an AnimatedClickableLetter..
//props will be the animation style.
<AnimatedClickableLetter
style={props} //here's where we pass it in as props.
pushToCorrect={pushToCorrect}
pushToIncorrect={pushToIncorrect}
secret={secret}
removeAvailable={removeAvailable}
letter={letter}
gameOver={gameOver}
msgAlert={msgAlert}
/>
}
</Transition>
)
最后,我花了很长时间才弄清楚的步骤...将样式添加到自定义组件本身。
const ClickableLetter = ({
letter, secret, pushToCorrect, pushToIncorrect, removeAvailable, gameOver, msgAlert, style //accept the prop here...
}) => {
// this function is used to either push the value to a correct or incorrect array causing an app wide state change and re render
const pushValue = () => {
if (!gameOver) {
if (secret.toLowerCase().includes(letter)) {
pushToCorrect(letter)
} else {
pushToIncorrect(letter)
}
// take it from the availLetter arr to re-render this component with one less letter
removeAvailable(letter)
} else {
msgAlert({
heading: 'Oops!',
message: 'Game is over, please click reset to play again',
variant: 'danger'
})
}
}
return (
// add the style to the button, here.
<Fragment>
- <PrimaryButton onClick={pushValue}>{letter}</PrimaryButton>
+ <PrimaryButton style={style} onClick={pushValue}>{letter}</PrimaryButton>
</Fragment>
)
}
export default ClickableLetter
关于javascript - 我正在尝试在我的 React Hangman 应用程序中为一组字母设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61132552/
我正在上 C 编程入门类(class),我们被分配编写 Hangman程序。 在游戏中,计算机随机选择一个单词并显示它有多少个字母。用户必须通过输入他们认为可能存在于该单词中的字母来猜测该单词。此外,
我用 Java 创建了一个刽子手游戏。我不知道如何检查和更换它。一切正常,字符串字正确,游戏板也很好。因此,游戏板给我的单词长度为“_ _ _ _ _”,例如。 我的问题就是如何获取用户输入检查的字符
我正在尝试为我的大学制作一个 Hangman 程序,我需要一些帮助。经过一试,程序进展顺利。最后,您可以选择玩另一个游戏或停止程序,但它保持答案是"is",要求输入新单词。经过一番尝试后如何访问菜单。
我正在制作的 Hangman 游戏有以下 while 循环: while(amountOfGuessesLeft > 0 || !wordComplete){ System.out.p
我正在编写一个hangman 类,并且遇到了一个意外类型错误的小问题。此错误位于 this.hidden.charAt(i) = this.original.charAt(i); 中。任何帮助将不胜感
对于我的刽子手游戏,我希望有一堆错误消息来检查是否输入了多个字母、两次猜测同一个字母等。到目前为止我的完整代码: import java.awt.Color; import java.
我有一个 JAVA 作业,必须使用数组和循环创建一个 Hangman 程序。 用户1输入一个有效的单词(无数字或符号) 用户2可以尝试一次猜出整个单词,或者使用一个字母总共猜10次。最初,用户 2 必
我似乎有一个无法解决的问题,当用户为我的程序输入完整的单词时,它每次搜索字符时都会显示,而不是仅显示整个单词,表明他们猜对了。当用户输入整个单词时,如何让它只显示单词,而不是每次搜索字符时显示?感谢您
import java.util.*; public class Hangman { public static void main(String[] args) { Scanner
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我对编程和 java 非常陌生(如你所见),并且确实陷入了编程刽子手的一个基本问题上。我的代码不是我所知道的最干净的,但我真的很想就我在逻辑上出错的地方提供一些意见。我的麻烦是让程序在每次猜测时正确输
我正在构建一个刽子手/猜词游戏,它使用数组来检查用户输入是否与单词中的字母匹配(他们试图猜测)。尝试跟踪用户正确猜测的次数(使用发生变量),但每当代码运行时,它都会计数两次。 所以我们假设这个词是“a
这个问题已经有答案了: How do I compare strings in Java? (23 个回答) 已关闭 7 年前。 我正在尝试用 Java 制作一个 Hangman 游戏,但我在互联网上
我正在开发一个刽子手游戏,但我想从数据库中选择一个随机单词。 数据库连接: $db_host = "127.0.0.1"; $db_user
我是 Java 的初学者,需要为 Java 最终项目拼凑一个应用程序。我想做刽子手(当时看起来很容易)。这对我来说非常困难。到目前为止,这是我的代码。 (将大约 10 个开源刽子手游戏放在一起真是令人
如何让我的 python hangman 游戏将变量 blanks 中的下划线替换为正确的字母(如果猜到的话)。 我有正确的 if 语句,但我不确定如何替换字母。 这是我尝试过的: def main(
我最近完成了 Javascript、CSS、HTML 的基础知识,并开始使用 jQuery。我决定我所知道的足以制作一个简单的刽子手游戏,所以我决定这样做。我已经完成了大部分,但是如果他们猜对了字母,
这是一个简单的刽子手游戏,我通过按钮制作了一个字母键盘,所以 onclick 它应该调用函数 checkLetter 来检查在要猜测的单词中选择的字母是否不运行,以及如何在用户单击按钮时删除按钮上的字
我正在用 C++ 为 Uni 评估开发 Hangman 游戏,但在用户键入字母后我无法显示隐藏的单词。所以我得到的单词显示为“_ _ _ _ _ _ _”,但是当我键入一个字母时,它不会将下划线替换为
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我是一名优秀的程序员,十分优秀!