JQuery 类触发3D变换

我正在寻找一个很好的方法来提示css3 3d变换,通过使用JQuery向html标签添加类。 我有这样的菜单:

 

例如,如果单击“.menu1 a”,我想将类“show1”添加到html标记中。 ‘show2’如果’.menu2 a’被点击等。

但是为了使我的转换正常工作,我还需要添加另一个类,然后在设置的时间(如3秒)后删除。 因此,如果单击“.menu1 a”,则html类将“show1 zoom”3秒,然后只是“show1”。 如果单击’.menu2 a’,则html类将为’show2 twirl’。

我不介意在脚本中手动设置转换的名称(缩放,旋转等),但如果它更容易/更整洁我可以在li上使用类系统,例如’menu1 p-show1 t-zoom ”。

我在这里有一个半工作的例子。 如果您检查html标签(单击html旁边的齿轮)并将html类从’show1’更改为’show2 zoom’,您将看到所需的过渡,该过渡应该是旋转到正确侧(.show2)的立方体,还有顶部的花式过渡(.zoom)。 一切都正常工作,除了.js,我根本无法工作!

这里有新的演示。

旧CodePen演示

PS我觉得那些过渡很棒!

编辑:

代码更改以修复3秒之前的点击转换错误:

 var currentShow, currentTransition, currentTimeout; $('.menu ul li a').click(function() { var $this = $(this); var $li = $this.closest('li'); var index = $li.attr('class').replace(/menu/, ''); var $html = $li.closest('html'); $html.removeClass(currentShow); if (currentTransition) { $html.removeClass(currentTransition); clearTimeout(currentTimeout); setTimeout(function () { DoTransition(index, $html); },50); } else { DoTransition(index, $html); } }); function DoTransition(index, $html) { currentShow = 'show'.concat(index); currentTransition = GetTransitionString(index); $html.addClass(currentShow + ' ' + currentTransition); currentTimeout = setTimeout(function() { $html.removeClass(currentTransition); currentTransition = null; }, 3000); } function GetTransitionString(index) { var transition; switch (parseInt(index)) { case 1: transition = 'zoom'; break; case 2: transition = 'zoom'; break; case 3: transition = 'zoom'; break; case 4: transition = 'zoom'; break; case 5: transition = 'zoom'; break; case 6: transition = 'zoom'; break; } return transition; } 

更新了CodePen演示

这是一个浓缩版本:

 $('.menu ul li a').click(function() { var i = $(this).parent('li').index() + 1, mc = $(this).parent('li').attr('class'), trg = $(this).closest('html'), cc = trg.attr('class'), newclass; switch (i) { case 1: var effect = 'zoom'; break; case 2: var effect = 'spin-light'; break; case 3: var effect = 'stutter'; break; case 4: var effect = 'flatten'; break; case 5: var effect = 'wander'; break; case 6: var effect = 'open'; break; } newclass = mc+' show'+i+' '+effect+' -webkit-'; trg.attr('class', newclass).delay(3000).queue(function(){$(this).removeClass(effect);$(this).dequeue();}); }); 

我研究了CSS动画问题很长一段时间。 只有第1面和第2面有可点击的菜单。 由于某种原因,其他方面都有问题。 右键单击并检查元素将我带到立方体包装器。 从我已经完成的研究中,我猜测它与::before::after 更多信息 ::after 有关

我希望这一切都有帮助。