我有一个JavaScript函数可以在父div中移动不同的子元素,但我想添加一个过渡,使元素移动到它们在div中的新位置,而不是立即改变位置。
至于我使用的过渡,对我来说,它只适用于定义的属性,如top
/bottom
或height
/width
。在这种情况下,我没有定义任何属性,所以我想知道过渡效果是否仍然可能。
在这里,你可以看到我设置的子元素和父元素,以及移动子元素的函数:
function moveElement(elementId, place) {
let div = document.getElementById('parent')
let element = document.getElementById(String(elementId))
let referencenode = div.children[place]
div.insertBefore(element, referencenode)
}
var children = document.getElementById('parent').children;
document.addEventListener("click", function(event) {
let id = children.item(2).id;
moveElement(id, 0)
});
个字符
由于我所有的尝试,使一个工作过渡失败,我只留下了切换功能,所以他们立即交换位置。
我尝试使用transition-duration
,但由于没有定义CSS属性,所以预期什么也没有发生。
提前感谢!
请不要使用jQuery,因为我从来没有使用过它,所以如果可能的话,我会喜欢香草JavaScript:)
2条答案
按热度按时间xuo3flqw1#
正如注解所建议的,CSS转换发生在CSS属性更改时,因此某些CSS属性必须更改才能发生转换。对于顺序或DOM元素的动画更改,您可以考虑使用 First,Last,Invert,Play(FLIP)技术1234,其中:
1.First:获取元素的初始位置。
1.最后一个:使元素到达其结束状态。
1.反转:使用前面步骤中的信息,将位置更改反转回更改发生前的元素外观。
1.播放:移除反转,但带有过渡,以便元素从反转动画返回到新位置。
个字符
1 Layout Animation FLIP Technique
2 Animating Layouts with the FLIP Technique
3 FLIP Your Animations
4 Animating the Unanimatable
ijxebb2r2#
用动画重新排列兄弟元素
null
作为第二个参数ParentElement.insertBefore(elToInsert, null)
或使用ParentElement.append(elToInsert)
来 * 追加**移动元素。translate
从起始boundingClientRect(重排之前)到当前boundingClientRect(0px left and top)的元素:个字符