javascript - 使 div 带有动画飞到另一个 DOM 位置

标签 javascript jquery css animation

animating an image between 2 positions and sizes

我正在移动 <img>来自大灰色的元素( Octopus )<div>以上(#large)给小橘子<div>下面(#small)使用

$(document).on("click", "#large > img", function() {
  $(this).appendTo("#small");
});

这很好用,但我希望它平滑过渡并“飞”过去,这样它会慢慢插入其坐标和大小

我尝试添加一个 CSS 过渡

img { transition: all 3s; }

到我的<img> ,但这将不起作用,因为图像被重新添加到 DOM 而不是移动。

这样的动画如何制作?

JS Fiddle

最佳答案

使用 jQuery .append 方法不允许您在两种状态之间为元素设置动画。

这是一个使用 CSS 过渡和 scale() 函数的动画示例。此示例还使用 transform-origin 属性更改图像在“大”状态下的位置。 Fiddle here .

$(document).on("click", "img", function() {
  $(this).toggleClass("big");
});
div {
  margin: 20px;
  padding: 10px;
}

#large {
  width: 600px;
  height: 400px;
  background-color: gray;
}

#small {
  width: 120px;
  height: 90px;
  background-color: orange;
}

img {
  width: 100%;
  height: 100%;
  transition: transform .3s ease-out;
  transform-origin: 0 129px;
}

img.big {
  transform: scaleX(5) scaleY(4.4);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="large">

</div>
<div id="small">
  <img src="https://ak.picdn.net/assets/cms/5bb580387901a83212e3028ab5a2fa8fb1153d7b-img_offset_2x.jpg" />
</div>

注意:

  • 您需要根据需要支持的浏览器,将 vendor 前缀添加到 transition、transform 和 transform-origin 属性。
  • 此技术依赖于您使用硬值(以像素为单位)这一事实。可以使其具有响应性(使用宽度、边距和填充的百分比值),但需要更多计算。

关于javascript - 使 div 带有动画飞到另一个 DOM 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43680658/

相关文章:

JavaScript - 自执行匿名函数和回调

javascript - 遍历 List 元素以构建一个数组以在 AJAX 请求中传递

html - 顶部填充不出现

html - 使用CSS选择器从流解析器(例如SAX流)收集HTML元素

javascript - 避免重复听众

css - 我应该将 sass 源映射添加到我的 git 仓库中吗?

javascript - 反馈循环 THREE.js

javascript - VB.NET 数据从父窗口回发的模式弹出窗口中清除

javascript - 为什么此按钮元素与 div 具有不同的 'click' 行为?

javascript - 嵌套依赖性 Backbone.js View 与 Require.js Backbone.js 导致 View 加载为对象而不是函数