- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从昨天开始,我一直在尝试为我的图像轮播制作动画。据我了解,您可以使用 CSSTransitionGroup 包装要进行动画处理的内容,并确保它保留在 dom 中,并为过渡组的每个子级指定一个唯一的键。我相信我已经遵循了这一切,但我没有看到任何转变。
值得一提的是,当我试图让它工作时,我怀疑 key 是否有问题,所以我尝试使用随机字符串设置 key 。每次状态改变时,键都会改变,并且出于某种未知的原因我可以看到动画。谁可以给我解释一下这个。
我不确定我哪里出了问题,无论是过渡组的版本还是为 child 设置 key ,没有线索!
下面是复制我的问题的代码。
var CSSTransitionGroup = React.addons.CSSTransitionGroup
class Images extends React.Component {
constructor(props){
super(props);
this.state = {
showComponent: false,
}
}
componentWillReceiveProps(nextProps){
if (this.props.name === nextProps.showComponentName){
this.setState({
showComponent: true,
})
} else {
this.setState({
showComponent: false,
})
}
}
render() {
if (this.state.showComponent){
return (
<img src={this.props.url} />
)
} else {
return null;
}
}
}
class TransitionExample extends React.Component {
constructor (props) {
super(props);
this.onClick = this.onClick.bind(this);
this.state= {
showComponentName: null,
}
}
onClick(button) {
this.setState({
showComponentName: button.currentTarget.textContent,
})
}
render() {
var imageData = [
"http://lorempixel.com/output/technics-q-c-640-480-9.jpg",
"http://lorempixel.com/output/food-q-c-640-480-8.jpg",
"http://lorempixel.com/output/city-q-c-640-480-9.jpg",
"http://lorempixel.com/output/animals-q-c-640-480-3.jpg"
];
var images = [];
for (var i in imageData) {
i = parseInt(i, 10);
images.push(
<Images url={imageData[i]} showComponentName={this.state.showComponentName} name={imageData[i]} key={imageData[i]} />
);
}
return (
<div>
<div>
<button onClick={this.onClick}>{imageData[0]}</button>
<button onClick={this.onClick}>{imageData[1]}</button>
<button onClick={this.onClick}>{imageData[2]}</button>
<button onClick={this.onClick}>{imageData[3]}</button>
</div>
<div className="transitions">
<CSSTransitionGroup
transitionName="viewphoto"
transitionEnterTimeout={2000}
transitionLeaveTimeout={2000}
transitionAppearTimeout={2000}
transitionAppear={true}
transitionEnter={true}
transitionLeave={true}>
{images}
</CSSTransitionGroup>
</div>
</div>
);
}
}
ReactDOM.render(
<TransitionExample />,
document.getElementById('container')
);
我还提供了 jsfiddle 上示例的链接
最佳答案
您的代码的问题是 images
始终是不安装/卸载的元素数组。正确的做法是改变 child 。例如,如果您将 fiddle 的渲染方法的返回值替换为:
return (
<div>
<div>
<button onClick={this.onClick}>{imageData[0]}</button>
<button onClick={this.onClick}>{imageData[1]}</button>
<button onClick={this.onClick}>{imageData[2]}</button>
<button onClick={this.onClick}>{imageData[3]}</button>
</div>
<div className="transitions">
<CSSTransitionGroup
transitionName="viewphoto"
transitionEnterTimeout={2000}
transitionLeaveTimeout={2000}
transitionAppearTimeout={2000}
transitionAppear={true}
transitionEnter={true}
transitionLeave={true}>
<img src={this.state.showComponentName} key={this.state.showComponentName}/>
</CSSTransitionGroup>
</div>
</div>
);
动画成功了!使用简单的 img
而不是您的 Images
组件,并为其提供图像 url(这只在您单击按钮时有效,showComponentName
应该是初始化以显示第一张图像)。当然,您也可以使用自定义组件,但这里的要点是,如果您希望触发动画,则必须更改 CSSTransitionGroup 的子元素,否则您始终会渲染相同的四个图像
组件无论是否返回img。您可能想查看react-css-transition-replace因为在替换时它通常效果更好。
关于javascript - 即使设置了键,React CSSTransitionGroup 也不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45882659/
场景是:我想根据用户点击“下一个”还是“上一个”,在不同的方向上制作一系列类似 google-now 的卡片的动画。 使用 CSSTransitionGroup 可以轻松实现一个方向的动画 - 我让“
你好,我试图保留我的按钮 position:absolute 但从中删除了动画,我的动画也不够流畅,我无法真正处理它,因为没有关键帧。这是我的垃圾箱。 My Bin 最佳答案 您需要指定.change
我正在使用 React CSSTransitionGroup 为一个简单的下拉菜单设置动画,这很费时间。我想制作上下滑动的动画。我从一个有效的在线示例中获取了这段代码,但它似乎对我不起作用。菜单只是出
我一定错过了什么。我已经查找了如何执行此操作的各种示例,但我无法让我的示例工作。我只需要将一个元素转入或转出。 我正在调用 togglePopup() 来翻转状态中的 bool 值,这会正确显示/隐藏
我有一个组件会在十秒后卸载,而且我似乎无法让离开动画与 React CSSTransitionGroup 一起工作。当组件安装并且这些动画运行良好时,将添加外观类。但是,离开类永远不会在卸载时添加到组
早期使用 Facebook ReactJS。简单的 CSS 淡入过渡。它与 ReactJS v0.5.1 一起按预期工作。它不适用于 v11.1、v12.0、v12.1。这是 CSS 和 JSX: C
我目前正在研究 React 中的通知组件。除了转换之外,它正在工作。不知何故,它甚至没有添加类。我查找了一些 React 动画示例并做了一些研究,但我找不到任何有用的东西。特别是针对 React15
从昨天开始,我一直在尝试为我的图像轮播制作动画。据我了解,您可以使用 CSSTransitionGroup 包装要进行动画处理的内容,并确保它保留在 dom 中,并为过渡组的每个子级指定一个唯一的键。
当单击按钮在状态之间切换时,我试图在组件进入和离开之间进行转换 我也试过把 和 作为单独的组件,但具有相同的结果,即不触发动画。 https://www.webpackbin.com/bins/-Kj
我正在尝试让导航栏在滚动条上上下滑动。很简单。我可以获得不透明度没问题。但没有别的工作。导航栏只是出现和消失,没有动画。 我试过这个 SO post在许多变化中。它需要添加 component='di
我的 ReactJS CSSTransitionGroups 在 Android v4.2 上失败。我将尝试找出问题并发布示例。 有没有人遇到过这个?看起来 Android 确实支持 CSS 转换,所
考虑这个 JSX 结构: {this.props.firstName} {this.props.lastName} 我想使用 CSSTra
我正在尝试向组件添加一些动画样式,并努力找出问题所在。这是一个带有 connect() 和 CSSTransitionGroup 的简单组件(DOM 中其他位置的不同组件最终将用于触发打开我的灯箱组件
我正在使用CSSTransitionGroup当元素出现在 DOM 中或离开 DOM 时为该元素设置动画。效果很好。 现在 - 我想对该组件进行单元测试。我正在创建一个临时 DOM 节点并将其附加到
所以我不明白为什么人们喜欢以不同的方式调用 React Transition Functions TransitionGroup: import TransitionGroup from 'react
错误显示“元素类型无效:需要一个字符串(对于内置组件)或一个类/函数(对于复合组件)但得到:未定义。您可能忘记从定义的文件中导出组件.检查 Route 的渲染方法。” 代码如下所示: import {
我开始使用 React-Router v6,并遇到了动画路由转换的问题。 react-router docs和 react-transition-group docs指定与新的 v6 api 不兼容的
我是手写笔的新手,正在尝试找出所有细微差别。 作为引用,React 有一个组件来辅助 CSS 动画 https://facebook.github.io/react/docs/animation.ht
我是一名优秀的程序员,十分优秀!