javascript - jQuery 动画 : How to avoid elements being displaced?

标签 javascript jquery jquery-animate

这是我想要实现的目标的一个小例子:

Example

var elemOrigPos;    

$('div.box').hover(
function() {
    var $this = $(this);
    elemOrigPos =  $this.position();
    var offset = 50;

    $this.stop(true, true).animate({
        'width': '200px',
        'height': '200px',
        'top': (elemOrigPos.top - offset) + 'px',
        'left': (elemOrigPos.left - offset) + 'px'
    }, 150);
},
function() {
    $(this).stop(true, true).animate({
        'width': '100px',
        'height': '100px',
        'top': (elemOrigPos.top) + 'px',
        'left': (elemOrigPos.left) + 'px'
    }, 150);
}
);

如果您缓慢地将鼠标悬停在元素上,效果很好,但一旦您更快地将鼠标悬停在它们上,它们就会失去原来的位置。我想这与我在动画完成之前使用position()但无法找到解决方案有关。

提前感谢您提供解决此问题的任何提示或提示。 :)

最佳答案

我查看了您的代码,主要问题是当您悬停时,您总是将 origPosition 重置为元素的当前位置(并且它可能不是正确的位置,因为它可能是动画中间的位置)。 解决这个问题的方法很简单,只需保存与实际位置无关的原始位置即可。

我所做的只是将原始位置保存在 jQuery.data() 中,以便所有计算都可以从该位置完成,而不是根据它现在可能在或可能不在的实际位置进行。

$('div.box')
        .each(function() {
            $(this).data('position', $(this).position());
        })
        .hover(
        function() {
            var $this = $(this);
            elemOrigPos =  $(this).data('position');
            var offset = 50;
    ....

更新了 fiddle :http://jsfiddle.net/FXFUB/1/

关于javascript - jQuery 动画 : How to avoid elements being displaced?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13376795/

相关文章:

jQuery 可排序动画?

javascript - 纯 Javascript 将文本插入 <input type ="text"> 而不带属性

javascript - Sweet Alert 2 - 为什么我不能按类(class)定位?

javascript - 调用 e.preventDefault() 后提交表单

javascript - 如何将 JSON 响应放入 jquery 中?

javascript - jQuery 中无尽的背景色动画,怎么样?

javascript - Canvas 删除图像中的白色像素

javascript - 带 Promise 的递归函数

c# - 如何在 ASP 中单击 ListView 中的订单号时打开包含订单详细信息的弹出窗口

jquery - 滚动位置时显示 Div