Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何重播通过添加带有转换的类触发的动画?_Javascript_Jquery_Css - Fatal编程技术网

Javascript 如何重播通过添加带有转换的类触发的动画?

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纯蓝色; 文本对齐:居中

如何使以下脚本在每次选择新项目时触发打开的动画

$'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.
您需要添加延迟,以便动画可以运行

在这里,我添加了.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搞错了……修正了