jquery - 从 "data"标签中获取文本并加载动画

标签 jquery html css

我有一个无序列表,每个元素上都有“data-text”标签,还有空的“p”标签。 我在每个元素上使用 click 事件,并从 data-text 标签中获取文本以使用动画加载到这个 p 标签中。

但问题是动画仅在第一次运行时起作用,当单击其他元素时,文本加载时没有动画。

演示:jsfiddle

$("ul.list > .list-item").each(function() {
  $(this).click(function() {
    $(".text-here").text($(this).data('text')).animate({
      opacity: '1',
      top: '0'
    });
  });
});
.list-item {
  list-style-tyle: none;
  display: inline-block;
  padding: 15px 25px;
  cursor: pointer;
  border: 1px solid red;
  transition: 0.3s all ease-in-out;
}
.list-item:hover {
  background: red;
  color: white;
}
.text-here {
  position: relative;
  top: 40px;
  transition: 0.3s all ease-in-out;
  opacity: 0;
  padding-left: 40px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="list">
  <li class="list-item" data-text="1 List Item">1</li>
  <li class="list-item" data-text="2 List Item">2</li>
  <li class="list-item" data-text="3 List Item">3</li>
  <li class="list-item" data-text="4 List Item">4</li>
</ul>

<p class="text-here"></p>

提前致谢! :)

最佳答案

我强烈建议使用 a CSS3 animation .

Example Here

在这种情况下,我们可以使用以下关键帧:

@keyframes fadeUp {
  0% { top: 40px; opacity: 0; }
}

然后将animate类添加到元素中,并在动画结束时将其移除。

.text-here.animate {
  animation: fadeUp 200ms ease-in forwards;
}

完整代码如下:

$('ul.list > .list-item').on('click', function() {
  $('.text-here').addClass('animate').one('animationend', function() {
    $(this).removeClass('animate');
  }).text($(this).data('text'));
});
.list-item {
    list-style-type: none;
    display: inline-block;
    padding: 15px 25px;
    cursor: pointer;
    border: 1px solid red;
    transition: 0.3s all ease-in-out;
}
.list-item:hover {
    background: red;
    color: white;
}
.text-here {
    position: relative;
    top: 0;
    transition: 0.3s all ease-in-out;
    opacity: 1;
    padding-left: 40px;
}
.text-here.animate {
  animation: fadeUp 200ms ease-in forwards;
}

@keyframes fadeUp {
  0% { top: 40px; opacity: 0; }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="list">
    <li class="list-item" data-text="1 List Item">1</li>
    <li class="list-item" data-text="2 List Item">2</li>
    <li class="list-item" data-text="3 List Item">3</li>
    <li class="list-item" data-text="4 List Item">4</li>
</ul>
<p class="text-here"></p>

关于jquery - 从 "data"标签中获取文本并加载动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33962854/

相关文章:

html - 网店中的产品名称,h2 还是强标签?

php - 登录时显示数据库中的个人资料数据

css - 完整的封面背景图片问题

jquery - 使用 jQuery 独立 Web 应用程序与服务器端演示框架

javascript - 将 html 附加到 jQuery 元素而不在 html 中运行脚本

javascript - 在图层中找到特定的组并重绘它

html - “永久链接”仅适用于 Tumblr 博客的左侧

html - 删除容器和导航之间的空间

javascript - 单击 iframe 会出现一个按钮

jquery - 自定义 jQRangeSlider 标签的位置