Javascript 如何重播通过添加带有转换的类触发的动画?
如何使以下脚本在每次选择新项目时触发打开的动画 $'things div'。单击,函数{ var val=$this.html; $'panel'。删除类'open'。添加类'open'; $'content'.htmlval; }; $'panel'。单击,函数{ $this.removeClass'open'; }; 面板{ 位置:绝对位置; 过渡:.25s; 宽度:100px; 高度:50px; 左:50%; 左边距:-50px; 顶部:-51px; 边框:1px纯蓝色; 文本对齐:居中; 垂直对齐:中间对齐; 光标:指针; } 内容{ 字体大小:30px; } 面板打开{ 排名:0; } 事物司{ 显示:块; 填充物:5px; 光标:指针; 边框:1px纯绿色; 宽度:30px; 高度:30px; } 点击关闭 1. 2. 3. 4.Javascript 如何重播通过添加带有转换的类触发的动画?,javascript,jquery,css,Javascript,Jquery,Css,如何使以下脚本在每次选择新项目时触发打开的动画 $'things div'。单击,函数{ var val=$this.html; $'panel'。删除类'open'。添加类'open'; $'content'.htmlval; }; $'panel'。单击,函数{ $this.removeClass'open'; }; 面板{ 位置:绝对位置; 过渡:.25s; 宽度:100px; 高度:50px; 左:50%; 左边距:-50px; 顶部:-51px; 边框:1px纯蓝色; 文本对齐:居中
您需要添加延迟,以便动画可以运行 在这里,我添加了.25秒的延迟,这是动画的长度 因此,删除该类
$('#panel').removeClass('open');
然后等待250毫秒并再次添加
setTimeout(function(){$('#panel').addClass('open')}, 250);
片段:
$'things div'。单击,函数{
var val=$this.html;
$'panel'。移除类'open';
setTimeoutfunction{$'panel'.addClass'open'},250;
$'content'.htmlval;
};
$'panel'。单击,函数{
$this.removeClass'open';
};
面板{
位置:绝对位置;
宽度:100px;
高度:50px;
左:50%;
左边距:-50px;
顶部:-51px;
边框:1px纯蓝色;
文本对齐:居中;
垂直对齐:中间对齐;
光标:指针;
}
内容{
字体大小:30px;
}
面板打开{
排名:0;
过渡:.25秒缓进;
}
事物司{
显示:块;
填充物:5px;
光标:指针;
边框:1px纯绿色;
宽度:30px;
高度:30px;
}
点击关闭
1.
2.
3.
4.
您应该使用延迟,这样remove和add类就可以了 $'things div'。单击,函数{ 无功延迟=500; var val=$this.html; //用于初始化 如果!$'panel'.hasClass'open'{ 延迟=0; } $'panel'。移除类'open'; setTimeoutfunction{ $'content'.htmlval; $'panel'.addClass'open'; },延误; }; $'panel'。单击,函数{ $this.removeClass'open'; }; 面板{ 位置:绝对位置; 过渡:.25s; 宽度:100px; 高度:50px; 左:50%; 左边距:-50px; 顶部:-51px; 边框:1px纯蓝色; 文本对齐:居中; 垂直对齐:中间对齐; 光标:指针; } 内容{ 字体大小:30px; } 面板打开{ 排名:0; } 事物司{ 显示:块; 填充物:5px; 光标:指针; 边框:1px纯绿色; 宽度:30px; 高度:30px; } 点击关闭 1. 2. 3. 4.
如果您在再次调用之前添加延迟,则它会起作用 这里我还检查它是否有类,因此只有当它有类时才会运行超时 $'things div'。单击,函数{ var val=$this.html; 如果$panel.hassclassopen{ $'panel'。移除类'open'; setTimeoutfunction{ $'panel'.addClass'open'; }, 250 $'content'.htmlval; 回来 } $'panel'.addClass'open'; $'content'.htmlval; }; $'panel'。单击,函数{ $this.removeClass'open'; }; 面板{ 位置:绝对位置; 过渡:.25s; 宽度:100px; 高度:50px; 左:50%; 左边距:-50px; 顶部:-51px; 边框:1px纯蓝色; 文本对齐:居中; 垂直对齐:中间对齐; 光标:指针; } 内容{ 字体大小:30px; } 面板打开{ 排名:0; } 事物司{ 显示:块; 填充物:5px; 光标:指针; 边框:1px纯绿色; 宽度:30px; 高度:30px; } 点击关闭 1. 2. 3. 4.
删除该类并再次添加它。这不起作用。你能展示一个证明它不起作用的工作示例吗?你需要添加一个延迟。使用.delay或setTimeout。另外,一开始你也不希望延迟:如果hasclass{remove_class;delay;set_class}或者{set_class}请作为答案发布…这似乎有效,谢谢。有没有办法删除removeClass上的转换?或者这需要用jquery.animate替换CSS转换吗?不管怎样,我可以通过将面板上的转换更改为0s,并将.25s的转换添加到.open来完成它。@尽管我的做法略有不同,但请参阅我的更新答案是的,这正是我的想法。我也喜欢轻松的触感@但不要说问题在于,如果你每次放入$'content'.htmlval;而是在超时中-它将以预期的方式工作-否则内容将无法获取updated@JFit搞错了……修正了