javascript - 更改 CSS 动画 anchor

标签 javascript jquery html css

我有以下页面(见图片) enter image description here

当我单击红色按钮时,我希望 div 在向用户显示时显示动画。但是,我希望动画来自按钮。现在动画来自页面的中心。

这是我的代码

@keyframes fadeInScale {
    0%{
        opacity:0;
        transform: scale(0.5);
    }
    100%{
        opacity:1;
        transform: scale(1);
    }
}

@keyframes fadeOutScale {
    0%{
        opacity:1;
        transform: scale(1);
    }
    100%{
        opacity:0;
        transform: scale(0.5);
    }
}

.overlay {
    position: absolute;
    top: 0;
    z-index: 500;
    width: 100%;
    height: 100%;
    left: 0;
    right: 0;
    bottom: 0;
}

.fade-scale-in {
    display: block;
    animation: fadeInScale 0.3s 1 ease-out;
}

.fade-scale-out {
    display: block;
    animation: fadeOutScale 0.3s 1 ease-out;
}

当我点击红色圆圈时,用户会看到一个覆盖页面(实际上是一个带有绝对定位类覆盖的 div)。我将 fade-scale-in 类添加到 div(带有类覆盖)。然后 div 从屏幕中心过渡并增大以适合用户的屏幕。我想要它,以便 div 从红色圆圈过渡。我可以使用转换来实现这一点吗?

这是代码。正如您所注意到的,当您单击黄色圆圈时,div 从中心而不是黄色圆圈开始动画: https://jsfiddle.net/e4g71y4m/3/

最佳答案

您可以通过添加 transform-origin: top left; 来完成此操作到 .overlay 元素。 (不要忘记前缀(-webkit-moz 等)

var overlay$ = $('.overlay');
overlay$.bind('animationend webkitAnimationEnd MSAnimationEnd oAnimationEnd', function(e) {
  console.debug('test');
  if (e.animationName !== undefined && e.animationName == "fadeOutScale") {
    overlay$.addClass('hide');
  } else if (e.originalEvent.animationName !== undefined && e.originalEvent.animationName == "fadeOutScale") {
    overlay$.addClass('hide');
  }
});

$('.click').on('click', function() {
  overlay$.removeClass('hide').addClass('fade-scale-in');
});
$('.click-again').on('click', function() {
  overlay$.removeClass('hide').addClass('fade-scale-out');
});
@keyframes fadeInScale {
  0% {
    opacity: 0;
    transform: scale(0.5);
  }
  100% {
    opacity: 1;
    transform: scale(1);
  }
}

@keyframes fadeOutScale {
  0% {
    opacity: 1;
    transform: scale(1);
  }
  100% {
    opacity: 0;
    transform: scale(0.5);
  }
}

.hide {
  display: none;
}

.overlay {
  position: absolute;
  top: 0;
  z-index: 500;
  width: 100%;
  height: 100%;
  left: 0;
  right: 0;
  bottom: 0;
  background: red;
  transform-origin: top left;
}

.click {
  background: yellow;
  border-radius: 50%;
  width: 100px;
  height: 100px;
  line-height: 100px;
  text-align: center;
  cursor: pointer;
}
.fade-scale-in {
  display: block;
  animation: fadeInScale 0.3s 1 ease-out;
}

.fade-scale-out {
  display: block;
  animation: fadeOutScale 0.3s 1 ease-out;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="click">Click me</div>
<div class="overlay hide">
  Test
  <div class="click-again">Click me again</div>
</div>

关于javascript - 更改 CSS 动画 anchor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35635194/

相关文章:

javascript - 在条件中使用未定义的属性时,流程不报告错误

jquery - 沙箱/将 HTML 代码限制在 DIV 标记中

javascript - 如何更改 li 元素的原点以使其从中心调整自身大小?

jquery - 当元素到达其在 Dom 中的原始位置时,如何将元素的位置从固定位置更改为相对位置

ASP.NET 3.5 - 在没有 "disabling"的情况下使字段只读/不可修改

javascript - 如何在 vue.js 中格式化以千、百万或十亿为单位的数字?

c# - 如何使用 JavaScript 和 ASP.NET MVC 更新图像?

javascript - 如何使用 Angular 将时间戳添加到index.html中的标签src

html - 使用 css 创建悬停效果

html - 如何在 Canvas 上渲染 d3.js map ,使其不模糊