速度JS和动态添加的DOM元素
Velocity JS and Dynamically Added DOM Elements
我有两个copens来描述我的问题。我正在使用Velocity来动画页面上的react渲染元素。
- 工作CodePen
- 非工作CodePen
目标是根据排名在页面上上下移动这些"文章"。它们是绝对定位的,我根据rank * height
确定了它们在页面上的位置。
工作示例成功地显示了所有元素,然后在2秒的setTimeout
之后,它颠倒了顺序。
非工作的例子应该做完全相同的事情,但它在页面上移动的唯一一个是最终的DOM对象(id=article-5
)。
示例之间的唯一区别是,工作示例已经在页面上呈现了DOM元素,而非工作示例通过JavaScript呈现HTML
var articlesContainer = document.getElementsByClassName('articles')[0];
for (var i = 1; i <= 5; i++) {
articlesContainer.innerHTML = articlesContainer.innerHTML + '<div id=article-' + i + '></div>';
}
不太确定为什么动态添加HTML元素会破坏这一点。值得注意的是,前4个未能动画的元素具有类velocity-animating
,这意味着Velocity至少试图动画对象,但似乎在某个地方失败了。
任何想法?
当您执行articlesContainer.innerHTML = newHTML
时,您正在卸载articlesContainer中的所有节点并安装新的节点。Velocity/React因此在分离的节点上运行,除了最后一篇文章的节点,它是唯一没有卸载的节点。使用document.createElement
和node.appendChild
代替:
var articlesContainer = document.getElementsByClassName('articles')[0];
for (var i = 1; i <= 5; i++) {
var div = document.createElement('div');
articlesContainer.appendChild(div);
}
相关文章:
- 如何在DOM元素上按类型构建此函数
- DOM元素和angular元素之间的主要区别是什么
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 使用jquery创建dom元素会导致ie9出现拒绝访问错误
- 如何在使用Ractive.extend()时引用DOM元素
- 在d3中向DOM元素添加了图像,但现在它赢得了't过渡
- 如何'剪切'DOM元素并将其显示在其他位置
- 转换<a>使用jQuery将文本字符串转换为dom元素
- d3在数据更新时错误地附加了dom元素
- 访问VueJS中的DOM元素
- 在Meteor中如何查找DOM元素(渲染后)
- IE9-添加和删除DOM元素会破坏父keydown事件
- 未捕获错误:元素缓存中id为x的DOM元素与DOM中的元素不同
- 在 ng-if 编译后访问指令中的 DOM 元素
- spin.js/angular spinner:如何将spin定位到DOM元素中(包括plunker演示)
- 如何在dom元素中插入输入标记数据插件
- Mobile Safari、jQuery以及绑定到未来的DOM元素
- 从字符串创建dom元素时添加多个类
- 如何根据客户端的屏幕大小使用javascript更改DOM元素
- 为onClick-hander插入临时DOM元素