【发布时间】:2014-02-12 03:01:59
【问题描述】:
我正在处理一个页面布局,其中包含多个六边形 div(基本使用的简单教程可从 github 上的 jtauber 获得)布置在三行中(目前)。
我希望它只有左上角的六边形可见,而其他的在 X 轴上旋转所以它们不可见,并且当我点击左上角的六边形时,所有其他的都开始旋转“3D -like" 一个接一个地定期,像这样:http://jsfiddle.net/76q2j/10/(在这个例子中,所有都是可见的,rotateX() 是在 CSS 中的 :hover 上实现的。
到目前为止,我的 HTML 如下所示:
<div class="hex_grid">
<!-- ROW 01 -->
<div class="hex_row impair">
<div id="hex0101" class="hex">
<div class="part top"></div>
<div class="part middle"></div>
<div class="part bottom"></div>
</div>
<div id="hex0102" class="hex">
<div class="part top"></div>
<div class="part middle"></div>
<div class="part bottom"></div>
</div>
<div id="hex0103" class="hex">
<div class="part top"></div>
<div class="part middle"></div>
<div class="part bottom"></div>
</div>
...等等。
从一开始就“隐藏”/旋转 div 的 CSS 是这样的:
.hex:not(#hex0101){
-webkit-transform: perspective(600px) rotateX(90deg);
-moz-transform: perspective(600px) rotateX(90deg);
-ms-transform: perspective(600px) rotateX(90deg);
-o-transform: perspective(600px) rotateX(90deg);
transform: perspective(600px) rotateX(90deg);
}
最后,用于为整个事物制作动画的 IDEAL jQuery 将是这个,或者类似的东西:
$("#hex0101").click(function(event) {
$('.hex:not("#hex0101")').each(function(i) {
$(this).delay(100*i).animate({transform: 'rotateX(90deg)'});
});
});
但是,经过多次试验和谷歌搜索,我在这里发现 jQuery .animate() 显然还不支持 CSS3 transforms。
我设法让六边形一个接一个地出现,只需使用任何其他类型的变换,例如
$(this).delay(100*i).animate({transform: 'skew(100px)'});
...虽然转换并没有真正发生,我暂时不知道为什么,它们只是弹出。
由于我无法让 CSS 的 transform: rotateX() 与 jQuery 的 animate() 配合得很好,我想也许添加一个带有 CSS 过渡的类可以解决它,但正如你在这里看到的:http://jsfiddle.net/76q2j/13/ 我遇到了两个问题:
- 动画看起来不像 CSS
:hover那样漂亮(或者可能只是我......) - 它将额外的类同时应用于所有六边形,而不是像我想的那样一个接一个地应用
底线,或 DL;DR, 我想知道是否有人知道一个 jQuery 插件,它可以让您将 jQuery 和“高级”CSS3 transforms 结合起来,或者是否有更简单的/通过each(function(i){...}) 一次将一个额外的类应用到一个 div 的更实用/简单正确的方法。
非常感谢任何帮助!如果有不清楚的地方,我会补充更多信息,我昨晚睡得很少,所以我的大脑有点模糊......
【问题讨论】:
-
如果你决定为此使用插件(虽然我不一定说它是必需的),我会推荐 Transit ricostacruz.com/jquery.transit。它在使基于 CSS 的过渡变得非常简单方面做得非常出色。
-
谢谢,我试试看!编辑:它看起来很有前途!
-
其实,这正是我想要的!超级简单,超级有效!再次感谢!
标签: jquery css rotation transform