Javascript 如何创建没有关键帧但带有过渡的动画

Javascript 如何创建没有关键帧但带有过渡的动画,javascript,css,animation,Javascript,Css,Animation,div{ 高度:41.4vmin; 宽度:30vmin; 利润率:0.7vmin; 边界半径:1.3vmin; 背景图像:url(“https://sun9-8.userapi.com/c840530/v840530203/60933/tkZK7aYQUjM.jpg"); 背景尺寸:包含; } @关键帧示例{ 0% {} 35%{背景图像:url(“https://sun9-8.userapi.com/c840530/v840530203/60933/tkZK7aYQUjM.jpg");} 36

div{
高度:41.4vmin;
宽度:30vmin;
利润率:0.7vmin;
边界半径:1.3vmin;
背景图像:url(“https://sun9-8.userapi.com/c840530/v840530203/60933/tkZK7aYQUjM.jpg");
背景尺寸:包含;
}
@关键帧示例{
0% {}
35%{背景图像:url(“https://sun9-8.userapi.com/c840530/v840530203/60933/tkZK7aYQUjM.jpg");}
36%{背景图像:url(“https://sun9-8.userapi.com/c840530/v840530203/6092c/fR8eCsT009k.jpg");}
100%{背景图像:url(“https://sun9-8.userapi.com/c840530/v840530203/6092c/fR8eCsT009k.jpg“”;变换:旋转(160度);}
}
div:悬停{
动画填充模式:正向;
动画名称:示例;
动画持续时间:1s;
}

将转换移动到悬停状态并调整延迟,您将得到完全相同的结果:

div.card{
高度:41.4vmin;
宽度:30vmin;
利润率:0.7vmin;
边界半径:1.3vmin;
背景图像:url(“https://sun9-8.userapi.com/c840530/v840530203/60933/tkZK7aYQUjM.jpg");
背景尺寸:包含;
}
分区卡:悬停{
变换:旋转(160度);
背景图像:url(“https://sun9-8.userapi.com/c840530/v840530203/6092c/fR8eCsT009k.jpg");
变换:变换1s线性,背景0s 0.5s线性;
}

为什么需要100个URL来完成此操作?您只需要卡片图像的正面和背面

img{
宽度:100%;
边框:1px实心#e0;
边界半径:1vw;
}
.集装箱{
/*确定容器的位置和大小*/
位置:绝对位置;
最高:17%;
底部:0;/*需要保持总高度大于卡*/
左:20%;
宽度:25%;
/*将仅继承给子代(并非所有子代)*/
透视图:900px;
}
#名片,正面{
/*通过绕y轴旋转卡的正面来翻转卡的正面*/
变换:旋转(180度);
}
#卡:悬停{
/*将卡作为一个整体旋转:*/
变换:旋转(180度);
}
#信用卡部门{
/*强制两个元素退出正常流程并占用页面上的相同空间*/
位置:绝对位置;
/*
背面可见性CSS属性确定背面是否
当面对用户时,元素的面是可见的。元素的背面
元素始终是透明的背景,当可见时,
将显示正面的镜像。如果前景元素
如果是不透明的,则可能不需要设置此属性。
*/
背面可见性:隐藏;
}
#卡片{
/*
指示应在三维空间中定位图元的子图元。
并且,将任何继承的观点传递给孩子们。
*/
变换样式:保留-3d;
/* 
对transform属性的更改需要1秒才能完成
将其当前值更改为新值。
*/
变换:变换1s三次贝塞尔(.75,1.25,5,1.25);
}

 > p>你需要使用一个带回文的定时,所以卡图像转换总是在中间。这方面的示例包括
线性
易入易出
(合并在下面)

请注意,一些浏览器不支持
背景图像上的
转换
,因此您可能需要以不同的方式处理此效果,以便在IE中工作

div{
高度:41.4vmin;
宽度:30vmin;
利润率:0.7vmin;
边界半径:1.3vmin;
背景图像:url(“https://sun9-8.userapi.com/c840530/v840530203/60933/tkZK7aYQUjM.jpg");
背景尺寸:包含;
转换:转换1s易入易出,背景0.5s;
}
div:悬停{
变换:旋转(160度);
背景图像:url(“https://sun9-8.userapi.com/c840530/v840530203/6092c/fR8eCsT009k.jpg");
}

在我的解决方案中,您可以创建位于
卡容器
元素内的两个元素
前面
后面
,并相应地设置动画:

$(文档).ready(函数(){
$('.card container')。单击(函数(){
$(this.toggleClass('clicked');
});
});
.card容器{
位置:相对位置;
溢出:隐藏;
高度:41.4vmin;
宽度:30vmin;
利润率:0.7vmin;
}
.card container>div{
位置:绝对位置;
排名:0;
左:0;
宽度:100%;
身高:100%;
背面可见性:隐藏;
边界半径:1.3vmin;
转换:转换1s,背景0.0s 0.5s;
变换样式:保留-3d;
}
.卡片容器.正面{
背景图像:url(“https://sun9-8.userapi.com/c840530/v840530203/60933/tkZK7aYQUjM.jpg");
背景尺寸:包含;
背景色:黑色;
变换:旋转(0度);
}
.卡片容器.背面{
背景图像:url(“https://sun9-8.userapi.com/c840530/v840530203/6092c/fR8eCsT009k.jpg");
背景尺寸:包含;
变换:旋转(180度);
}
.card-container.clicked.front{
变换:旋转(180度);
}
.card-container.clicked.back{
变换:旋转(0度);
}


请不要将您的代码发布到第三方网站,因为这些链接可能会随着时间的推移而消失,如果我们不得不去另一个网站查看您的代码,这会给我们带来更多麻烦。只需将您的代码包含在问题的此处的“代码片段”中。对于真实动画,转换只能保留一次更改的时间。您需要动画关键字。好的,谢谢您编辑我的问题。这太棒了。我可能建议将
:hover
事件向上移动到父元素,这样在转换期间移动光标时
#卡上的旋转就不会发出刺耳的声音。您应该注意闪烁,如果将hover移动到
.container
,请检查此@JonUleis,效果将不再有效。@Temaniafth