【问题标题】:Tiles dont turn right瓷砖不右转
【发布时间】:2020-02-06 14:34:06
【问题描述】:

我正在制作一个网站,http://phaidonasgialis.xyz。我想让瓷砖转动并让其他瓷砖返回。到目前为止,除了一个小错误外,它仍然有效,您按下的磁贴在您第二次单击之前不会返回。任何帮助将不胜感激。

代码如下:

$(document).ready(function() {

var 先前 = []; $('.flip-card').each(function(i, obj) {

$(this).click(function() {
  if ($(this).find('.flip-card-inner').hasClass('flip-card-transform')) {
    $(this).find('.flip-card-inner').removeClass('flip-card-transform');

  } else {
    $(this).find('.flip-card-inner').addClass('flip-card-transform');
    previous.push(this);


    if (previous.length >= 2 && previous[previous.length - 2] != previous[previous.length - 1]) {

      for (var i = 0; i < previous.length; i++) {
        if ($(this).find('.flip-card-inner').hasClass('flip-card-transform')) {
          $(previous[i - 1]).find('.flip-card-inner').removeClass('flip-card-transform');
          console.log("2")

        } else {
          $(this).find('.flip-card-inner').addClass('flip-card-transform');

          console.log("3")
        }

      }

    }

  }
});

});

【问题讨论】:

  • 请将所有相关代码放入问题中,这样人们就不必离开现场即可复制问题并理解您的要求。
  • 为什么要用previous作为数组?只需将其设为包含单个对象的变量即可。首先将已经翻转的卡片(上一个)先翻转回来。然后翻转点击的卡片并将其分配给previous,除非之前和当前相同。

标签: javascript jquery css arrays


【解决方案1】:

如果我正确理解您的问题,您是否希望卡片在一段时间后自动翻转?如果是这样,那么您只需设置一个 Timeout 并从 .flip-card-inner 中删除类 flip-card-transform

旁注:你绝对应该通过使用变量而不是 $(this).find('.flip-card-inner') 来优化你的代码——将 this 转换为 jQuery 对象并搜索其子元素您需要flip-card-inner 的时间。您也可以直接使用$('.flip-card').click(...),而不是$('.flip-card').each(...)。并且正如 Harun Yilmaz 在他的评论中所建议的那样,您不需要之前的数组......

所以这样的事情应该可以工作:

$(document).ready(function () {
  var previous
  var timeout
  $('.flip-card').click(function () {
    var cardInner = $(this).find('.flip-card-inner')
    if (cardInner.hasClass('flip-card-transform')) {
      cardInner.removeClass('flip-card-transform')
      clearTimeout(timeout)
    } else {
      cardInner.addClass('flip-card-transform')

      // Set a Timeout
      timeout = setTimeout(function () {
        cardInner.removeClass('flip-card-transform')
      }, 2000) // set whatever time sutable for you

      // Also as Harun Yilmaz suggested in his comment you don't need previous as an array
      if (previous && previous.hasClass('flip-card-transform')) {
        previous.removeClass('flip-card-transform')
      }
      previous = cardInner
    }
  })
})

【讨论】:

  • 这个想法是,当我每隔一圈打开一个磁贴时,我会更新我的代码,但是当我单击一个磁贴然后再单击另一个磁贴,然后返回到上一个磁贴时,两者都保持打开状态。
猜你喜欢
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多