jquery - 如何使用 CSS 为多个元素设置动画

标签 jquery html css

<分区>

我一直在学习一些简单的 CSS 动画,比如这个卡片翻转,但是当我创建下一个卡片元素时,动画似乎中断了并且没有执行。

动画本身很基础,点击卡片应该水平翻转。我想知道是否必须为第二张卡片创建额外的监听器才能为其设置动画?

flipCard();

function flipCard() {
  var card = document.querySelector('.card');
  card.addEventListener('click', function() {
    card.classList.toggle('is-flipped');
  });
}
body {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  overflow: hidden;
  color: #fff;
  background: hsl(227, 10%, 10%);
  min-height: 100vh;
  min-width: 100vw;
}

.wrapper {
  display: flex;
  justify-content: space-evenly;
}

.scene {
  width: 200px;
  height: 260px;
  border: 1px solid #CCC;
  margin: 40px 0;
  perspective: 600px;
}

.card {
  width: 100%;
  height: 100%;
  transition: transform 1s;
  transform-style: preserve-3d;
  cursor: pointer;
  position: relative;
}

.card.is-flipped {
  transform: rotateY(180deg);
}

.cardFace {
  position: absolute;
  width: 100%;
  height: 100%;
  line-height: 260px;
  color: white;
  text-align: center;
  font-weight: bold;
  font-size: 40px;
  backface-visibility: hidden;
}

.cardFaceFront {
  background: red;
}

.cardFaceBack {
  background: blue;
  transform: rotateY(180deg);
}
<div class="wrapper">
  <div class="scene">
    <div class="card">
      <div class="cardFace cardFaceFront">front</div>
      <div class="cardFace cardFaceBack">back</div>
    </div>
  </div>
  <div class="scene">
    <div class="card">
      <div class="cardFace cardFaceFront">front</div>
      <div class="cardFace cardFaceBack">back</div>
    </div>
  </div>
</div>

jsfiddle 链接:https://jsfiddle.net/kapiko112/pokejcr4/

最佳答案

使用 Document#querySelectorAll 获取所有元素方法,然后通过将集合转换为数组来遍历集合,最后将事件处理程序绑定(bind)到每个元素。

function flipCard() {
  // get all elements 
  var cards = document.querySelectorAll('.card');
  // convert htmlcollection to array for iterating
  Array.from(cards)
    // iterate over elements
    .forEach(function(card) {
      // attach evenet handler
      card.addEventListener('click', function() {
        card.classList.toggle('is-flipped');
      });
    });
}

flipCard();

function flipCard() {
  // get all element 
  var cards = document.querySelectorAll('.card');
  Array.from(cards).forEach(function(card) {
    card.addEventListener('click', function() {
      card.classList.toggle('is-flipped');
    });
  });
}
body {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  overflow: hidden;
  color: #fff;
  background: hsl(227, 10%, 10%);
  min-height: 100vh;
  min-width: 100vw;
}

.wrapper {
  display: flex;
  justify-content: space-evenly;
}

.scene {
  width: 200px;
  height: 260px;
  border: 1px solid #CCC;
  margin: 40px 0;
  perspective: 600px;
}

.card {
  width: 100%;
  height: 100%;
  transition: transform 1s;
  transform-style: preserve-3d;
  cursor: pointer;
  position: relative;
}

.card.is-flipped {
  transform: rotateY(180deg);
}

.cardFace {
  position: absolute;
  width: 100%;
  height: 100%;
  line-height: 260px;
  color: white;
  text-align: center;
  font-weight: bold;
  font-size: 40px;
  backface-visibility: hidden;
}

.cardFaceFront {
  background: red;
}

.cardFaceBack {
  background: blue;
  transform: rotateY(180deg);
}
<body>
  <div class="wrapper">
    <div class="scene">
      <div class="card">
        <div class="cardFace cardFaceFront">front</div>
        <div class="cardFace cardFaceBack">back</div>
      </div>
    </div>
    <div class="scene">
      <div class="card">
        <div class="cardFace cardFaceFront">front</div>
        <div class="cardFace cardFaceBack">back</div>
      </div>
    </div>
  </div>
</body>

关于jquery - 如何使用 CSS 为多个元素设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55143929/

相关文章:

Javascript 暂停 - 禁用一个函数直到另一个函数完成

php - AJAX 调用之间的持久 Mysql 连接?

html - 让 Angular2 路由在 IIS 7.5 上工作

html - 两个 style.css 有冲突

javascript - 如何将参数传递给node.js中的HTML文件?

css - 位于 div 中的 adobe flex 应用程序

javascript - 使用 ng-repeat 制作水平列表?不知道我在这里错过了什么

javascript - jQuery 创建回调

javascript - 获取变量的最后一个字符?

javascript - 将事件监听器添加到 svg 的动态元素