【问题标题】:jQuery animate() and CSS transition happening separately on same eventjQuery animate() 和 CSS 过渡在同一事件上分别发生
【发布时间】:2016-02-16 07:21:37
【问题描述】:

我在 JSFiddle 中使用 CSS transition 和 jQuery animate()

但是,当我将这两者结合起来时,CSS 先发生,然后 jQuery 动画发生后发生,偶尔会有停顿。

这两个动画都绑定到<div>(CSS::hover,jQuery:.hover())的悬停事件,但它们不会同时发生。


如果你需要,这里是所有代码:

/* DON'T MIND THIS FIRST SECTION ... JUST FOR CENTERING */
var div = $("div#fiddle");
var win = $(window);

var reset = function() {
    var wWidth = win.width();
    var wHeight = win.height();
    
    var dWidth = div.width();
    var dHeight = div.height();
    
    div.css({
        marginTop: wHeight / 2 - dHeight / 2,
        marginLeft: wWidth / 2 - dWidth / 2
    });
}

reset();

win.resize(reset);

/* THIS SECTION IS THE PROBLEMATIC ONE */
div.hover(
	function() {
    	$(this).animate({
        	marginTop: "-=50",
            marginLeft: "-=50"
        }, 2000);
    },
    function() {
    	$(this).animate({
            marginTop: "+=50",
            marginLeft: "+=50"
        }, 2000);
    }
);
html, body {
    background-color: #444444;
    padding: 0;
    margin: 0;
}

div#fiddle {
    width: 200px;
    height: 200px;
    box-sizing: border-box;
    background-color: #8888dd;
    border-radius: 100px;
    
    -webkit-transition: all 2s;
    -o-transition: all 2s;
    -moz-transition: all 2s;
    -ms-transition: all 2s;
    transition: all 2s;
}

div#fiddle:hover {
    height: 300px;
    width: 300px;
    border-radius: 150px;
}
<!-- The HTML if you want it  -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="fiddle"></div>

(在sn-p中有点难看,但它可以给你一个想法,特别是如果你将它设置为整页。但最好在JSFiddle.net上)


知道为什么会发生这种情况,以及任何解决方案吗?另外,有什么想法为什么有时在两个事件之间会有停顿,有时没有?谢谢。

【问题讨论】:

  • 是否需要同时申请transition.animate()
  • @guest271314 这对我来说只是一个简单的项目,所以没有任何要求。但是,是的,就是这样。

标签: jquery css animation jquery-animate css-transitions


【解决方案1】:

好的,老实说,我正在修补。从 jquery 中的动画中删除持续时间 (2000)。看起来css上的过渡处理了持续时间。

div.hover(
    function() {
        $(this).animate({
            marginTop: "-=50",
            marginLeft: "-=50"
        });
    },
    function() {
        $(this).animate({
            marginTop: "+=50",
            marginLeft: "+=50"
        });
    }
);

http://jsfiddle.net/sp2ufh4o/1/

【讨论】:

  • 酷!有用!我会投票,但我已经达到了我的每日限额。得等到明天……
  • 我不确定它是否只是在我的手机上运行有点慢,但我喜欢它的浮动效果;泡沫状。几乎令人着迷(也许它已经过了我的睡觉时间?)。这是一个更大的项目吗?我想看看它是否能够实现。
  • 这个唯一的问题是它看起来像在奇怪地移动(你描述的类似气泡的效果。看起来CSS和JS动画功能不同。你知道什么吗?两者的默认转换函数是?如果我将它们设置为相同,那么它应该更简单。
  • 而且@DarrenGourley 不,不是。如果你想把它带到另一个层次,那就继续吧!我只是在玩。是的,已经过了就寝时间。去睡觉=)
  • 对不起,我真的只是在修补。我注意到在 js 动画之前有一个延迟,似乎大约 2 秒,所以我将它提高到 6,这增加了延迟。这导致我将其设置为 0,然后将其完全删除。呵呵,让你烦恼的奇怪动作是我最喜欢的部分,对我来说感觉很自然,我想这就是我喜欢它的原因。不幸的是,我不知道过渡的所有细节,抱歉。
猜你喜欢
  • 2013-05-30
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 2015-08-17
  • 2017-12-25
  • 2020-11-27
  • 2021-10-26
  • 2013-06-11
相关资源
最近更新 更多