弹性项目的订单是不是可动画?

Posted

技术标签:

【中文标题】弹性项目的订单是不是可动画?【英文标题】:Is flex items' order animatable?弹性项目的订单是否可动画? 【发布时间】:2015-04-22 17:24:00 【问题描述】:

https://developer.mozilla.org/en-US/docs/Web/CSS/order 页面上显示“是”。

虽然我自己尝试,但它们不会动画。当上面的页面说属性“订单”是可动画的时,我是不是误解了?

$('.flex-item').click(function() 
  var offset = $(this).css('order') - 3;
  $('.flex-item').each(function() 
    var current = $(this).css('order');
    var checker = current - offset;
    var des;
    if (checker < 1) des = checker + 5;
    else if (checker > 5) des = checker - 5;
    else des = checker;
    $(this).css('order', des);
  );
);
.flex-container 
  display: flex;
  transition: all 5s ease

.flex-item 
  width: 60px;
  height: 60px;
  border: solid 1px black;
  transition: all 5s ease

.a 
  order: 1;
  background: yellow

.b 
  order: 2;
  background: red

.c 
  order: 3;
  background: blue

.d 
  order: 4;
  background: green

.e 
  order: 5;
  background: black
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="flex-container">
  <div class="flex-item a">1</div>
  <div class="flex-item b">2</div>
  <div class="flex-item c">3</div>
  <div class="flex-item d">4</div>
  <div class="flex-item e">5</div>
</div>

此外,从我的这个问题中,您可以看出我对 jQuery 动画和 CSS 动画感到困惑。如果两者都有效,那么谁在实际执政?什么是优先规则? mdn 页面上的“动画”是指 CSS 还是 javascript

【问题讨论】:

好问题。能在这里得到一个漂亮的过渡动画会很高兴 【参考方案1】:

是的。 order 是可动画的。

但是,在您的 sn-p 中,您更改了所有元素的 order,因此可能很难看到发生了什么。尝试单击以下小提琴中的最后一项:

$('.flex-item').click(function() 
  $(this).css('order', '0');
);
.flex-container 
  display: flex;

.flex-item 
  width: 60px;
  height: 60px;
  border: solid 1px black;

.transition > .flex-item 
  transition: all 5s linear;

.a 
  order: 1;
  background: yellow;

.b 
  order: 2;
  background: red;

.c 
  order: 3;
  background: blue;

.d 
  order: 4;
  background: green;

.e 
  order: 5;
  background: black;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Click a box. It will be moved to the beginning.</p>
With transition:
<div class="flex-container transition">
  <div class="flex-item a">1</div>
  <div class="flex-item b">2</div>
  <div class="flex-item c">3</div>
  <div class="flex-item d">4</div>
  <div class="flex-item e">5</div>
</div>
With no transition:
<div class="flex-container">
  <div class="flex-item a">1</div>
  <div class="flex-item b">2</div>
  <div class="flex-item c">3</div>
  <div class="flex-item d">4</div>
  <div class="flex-item e">5</div>
</div>

动画时,单击的项目应逐步后退到开头。如果没有动画,它会立即移动。

注意 Chrome 似乎不支持它,但可以在 Firefox 上运行。

【讨论】:

我在 Chrome 40.0.2214.115 或 Firefox 34.0.5 中看不到此功能 ios 7 上的 Safari 中什么都不做(尽管 Stack Snippets 和 JS Fiddle 等人在 iOS 7 Safari 中都有点碰巧......)。 根据规范,这个属性应该是可动画的:w3.org/TR/css3-flexbox/#order-property 但看起来浏览器可能还不支持。 目前仍然无法使用 (chrome 58.0.3029.110)

以上是关于弹性项目的订单是不是可动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何动画显示:弹性项目上的无/块属性? [复制]

是否可以为 Flexbox 插入和移除设置动画?

是否可以为 flexbox 插入、删除和项目位置设置动画?

调整屏幕大小时如何重新排序弹性项目?

Flexbox 布局 - 转换不起作用

JAVA 一个序列号项目,请大神帮忙看下思路是不是正确?