CSS3 动画,转换为位置

Posted

技术标签:

【中文标题】CSS3 动画,转换为位置【英文标题】:CSS3 animation, translate to position 【发布时间】:2012-06-17 00:50:13 【问题描述】:

我有一个 div,我可以点击它来拖动它。一旦它在一个区域上,它就会通过以下方式动画到它的位置:

$("#wheel1").animate(left: "200px", top: "100px");

我也可以让它动画化:

@-webkit-keyframes wheel1 
    0% 
    
    100% 
        -webkit-transform: translate(200px, 100px);
    

区别在于;使用 jQuery,它会从文档左侧动画到 200px。使用 CSS3,它会在你放置它的地方设置 200px 的动画(这很糟糕)

有没有办法像 jQuery 一样让 CSS3 从文档的左上角生成动画?我尝试更改 transform-origin 和其他一些设置,但没有成功。

【问题讨论】:

我不知道边距会有什么帮助,jQuery的方式已经很完美了,用CSS3,你如何翻译边距? 我不确定您是否正确阅读了该问题。 jQ 可以使用左/右。 jQ 解决方案是可靠的并且有效。不过,我正在尝试通过 CSS 动画实现与 CSS3 完全相同的事情。边距和位置不能用,必须是 translateX/Y 这可能是关于上/左/右/下转换(即使在 CSS 中不仅仅是 jQuery)与使用 translate 的不同之处的相关链接:http://www.paulirish.com/2012/why-moving-elements-with-translate-is-better-than-posabs-topleft/ 【参考方案1】:

我不是 CSS3 转换方面的专家,但我认为 translate 是相对于元素的原始位置的。

我可以看到使用 CSS 实现您想要的一种方法是绝对定位元素,并使用 CSS3 transition 更改其 lefttop 属性。

这是一个小提琴:http://jsfiddle.net/nSa9s/2/

html

<div class="box"></div>

CSS:

.box 
    position: absolute;
    background: #ff0000;
    left: 400px;
    top: 200px;
    width: 100px;
    height: 100px;
    -webkit-transition: all 1.0s linear;
    -moz-transition: all 1.0s linear;
    -o-transition: all 1.0s linear;
    -ms-transition: all 1.0s linear;    
    transition: all 1.0s linear;

.box.move 
    left: 200px;
    top: 100px;

jQuery:

$(document).ready(function() 
    $('.box').on('click', function() 
        $(this).addClass('move');
    );
);

JS的目的是在元素被点击的时候给元素添加move类。

【讨论】:

【参考方案2】:

如果我错了,请纠正我,但是你要使用 CSS3 动画的原因是因为 jQuery 动画没有做 CSS3 动画可以做的事情?

如果我是正确的,那么看看这个名为 .transit 的 jQuery 插件,它允许你将所有 CSS3 动画应用到任何选择器,就像它在 CSS3 格式中应用的方式一样,但它是通过程序化的 jQuery 方法完成的。

该插件处理大量的 CSS3 滑动和移动要求以及您可以使用的任何其他 CSS3 动画。上面的链接在整个页面都有示例。

如果这不是你想要的,请意识到当一个对象被“拖放”到另一个元素中时,CSS 无法“检测”到。有:hover 伪触发器,但每次无论如何都会触发。

【讨论】:

我试试看,谢谢。我试图在 jQuery 上使用 CSS3 的原因是因为它更有效。我读到它还传递了 GPU 而不是 CPU 所需的工作量。我不怀疑这一点,因为当我将 7000 像素的背景从屏幕的一侧转换到另一侧时,它与 jQ 一起跳动,但与 CSS 完美流畅地移动。 请对此表示怀疑...请参阅我的SO Answer 以获得纯 CSS 动画声纳波 FX。 Firefox 在 Chrome 唱歌时窒息。也就是说,查看您谈论的特定代码是分析所需的,以了解它在 jQuery 中运行缓慢的原因。 对不起,可能应该提到'for the iPad' 啊,那肯定是游戏规则的改变者。我建议您在 SO Question 中提及目标浏览器/设备。此外,如果您使用的是 jQuery-mobile,那么这也是与您现在显示的不同的标签。【参考方案3】:

仅供参考,要使用 CSS 动画(不是所选答案显示的过渡),您只需在关键帧中使用 left 而不是翻译。

@-webkit-keyframes wheel1 
    0% 
    100% 
        left:200px; top: 100px;
    

【讨论】:

以上是关于CSS3 动画,转换为位置的主要内容,如果未能解决你的问题,请参考以下文章

CSS3 Animation 控制元素在动画的初始位置开始动画

使用 javascript 为 CSS3 转换的值设置动画是不是会排除硬件加速?

如何使用 css3 动画更改背景位置?

如何在页面呈现时才开始CSS3动画

html CSS3动画转换

css3 转换 过渡 动画 CSS 优化