javascript - 使用缓动曲线的 Css 变换

标签 javascript html css

我想使用变换为元素位置设置动画。我怎么能在这个翻译中添加一些曲线(没什么特别的,只是不是一条完整的直线)?对于 jquery,我会使用效果很好的 easeInSine。

var a = document.querySelector('.a')
document.querySelector('.button').addEventListener('click', function() {

  var ww = window.innerWidth - (window.pageXOffset || document.documentElement.scrollLeft),
    wh = window.innerHeight - (window.pageYOffset || document.documentElement.scrollTop),
    rect = a.getBoundingClientRect(),

    final_left = ww - rect.left - a.offsetWidth,
    final_top = wh - rect.top - a.offsetHeight


  a.style.transform = "translate(" + final_left + "px," + final_top + "px)";


})
.a {
  position: absolute;
  top: 0;
  left: 0;
  width: 50px;
  height: 50px;
  background: red;
  transition: all 0.4s;
}

.button {
  margin-left:100px;
}
<div class="a">

</div>

<button class="button">
  run
</button>

最佳答案

据我所知,这对于像“transform”这样的单个属性是不可能的。

对于圆周运动,您需要能够为 x 轴和 y 轴运动设置不同的过渡时间。如果您对 x 移动和 y 移动都使用专用的过渡属性,则 CSS 只能执行此操作。

由于变换属性不能像这样拆分,您需要更改代码以使用“左”和“顶”属性,并为每个移动添加不同的过渡时间。

我以这种方式更新了您的示例,现在对象以 flex 的路径移动。

var a = document.querySelector('.a')
document.querySelector('.button').addEventListener('click', function() {

  var ww = window.innerWidth - (window.pageXOffset || document.documentElement.scrollLeft),
    wh = window.innerHeight - (window.pageYOffset || document.documentElement.scrollTop),
    rect = a.getBoundingClientRect(),

    final_left = ww - rect.left - a.offsetWidth,
    final_top = wh - rect.top - a.offsetHeight


    a.style.left = final_left + "px"  ;
    a.style.top = final_top + "px";


})
.a {
  position: absolute;
  top: 0;
  left: 0;
  width: 50px;
  height: 50px;
  background: red;
  transition: top 0.8s ease-in, left 0.8s ease-out;
}

.button {
  margin-left:100px;
}
<div class="a">

</div>

<button class="button">
  run
</button>

关于javascript - 使用缓动曲线的 Css 变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74865731/

相关文章:

html - 在文本下放置一个div

html - AngularJS 将 ng-repeat 嵌套在带有排序过滤器的 HTML 表元素中的 ng-repeat (key, value) 对数据结构中

javascript - 如何从上一个视频结束的确切时间开始播放视频?

css - 如何将 .rotate() 混合应用于 Bootstrap 的 <i> 图标字形元素?

javascript - 使用 j 查询在一个下拉列表中选择选项时如何填充 json?

Javascript CORS 被阻止但仍显示数据包捕获中的数据

javascript - 以 Angular 创建空的 promise ?

javascript - PHP更新查询不执行,弹出表单关闭

php - 更新记录的处理表格

.net - margin :0 auto; not working for the whole page