网站flip-card翻转异常:点击卡片需二次操作才回翻求助
解决卡片翻转的二次点击bug问题
嘿,我来帮你搞定这个卡片翻转的小bug!咱们先拆解下原代码里的问题:
- 你用
previous数组记录所有点击过的卡片,但每次点击都往里面push,导致数组越来越乱,后续循环逻辑也跟着出错 - 当点击已经翻转的卡片时,你只移除了它的翻转类,但没处理之前的状态,而且循环里访问
i-1还会出现数组越界的问题 - 分支逻辑绕来绕去,没有清晰区分「当前卡片是否已翻转」的两种核心场景
下面是修正后的代码,完美解决二次点击的问题:
$(document).ready(function() { $('.flip-card').click(function() { const $currentInner = $(this).find('.flip-card-inner'); const isFlipped = $currentInner.hasClass('flip-card-transform'); if (isFlipped) { // 如果当前卡片已经翻转,直接回翻 $currentInner.removeClass('flip-card-transform'); } else { // 先把其他所有已经翻转的卡片回翻 $('.flip-card-inner.flip-card-transform').not($currentInner).removeClass('flip-card-transform'); // 再翻转当前卡片 $currentInner.addClass('flip-card-transform'); } }); });
改动说明:
- 去掉了复杂的
previous数组,直接用选择器找出所有处于翻转状态的卡片,逻辑更直观 - 先判断当前卡片是否已经翻转,分两种情况处理:
- 已翻转:直接移除翻转类,一次点击就完成回翻
- 未翻转:先把其他所有翻转的卡片都回翻,再翻转当前卡片,保证同一时间只有一张卡片是翻转状态
- 用
not($currentInner)排除当前卡片,避免误操作自己,确保逻辑严谨
这样修改后,不管是点击未翻转的卡片(翻转它,其他回翻),还是点击已翻转的卡片(直接回翻),都能一次点击就生效啦!
内容的提问来源于stack exchange,提问作者Phaidonas Gialis
相关产品推荐
相关产品推荐

