2013-06-03 114 views
0

我使用jQuery .position()定位元素。然而,當我顯示一個動畫並在ajax調用後取消它,元素的位置被重置。jQuery元素位置在顯示和停止動畫後重置

function showStatusMsg(msg) { 
    var $statusEl = $('#userActMenuStatus'); 

    if ($statusEl.length == 0) { 
     $statusEl = $('<span id="userActMenuStatus">' + msg + '</span>'); 

     $('#app_nav').append($statusEl); 
     $statusEl.position({ 
      my: "right center", 
      at: "left center", 
      of: $('#userActMenu'), 
      collision: "fit" 
     }).css('left', parseInt($statusEl.css('left')) - 10); 

    } else { 
     $statusEl.html(msg); 
    } 

} 

$('#button1').click(function() { 
    showStatusMsg('saving...'); 
    $('#userActMenuStatus').stop(true).show('drop', { 
     direction: 'up' 
    }, 'slow').effect('pulsate', { 
     'times': 100 
    }, 1500); 

    $.ajax({ 
     type: 'post', 
     url: '/echo/json/', 
     data: 'save=data' 
    }).success(function (result) { 
     $('#userActMenuStatus').stop(true).hide('drop', { 
      direction: 'up' 
     }, 'slow'); 

    }); 

}); 

http://jsfiddle.net/NhdgM/2/

這是怎麼回事?

免責聲明:我使用jQuery V1.5.2和jQuery UI 1.8.12

回答

0

jQuery UI的.show().hide()有時會設置左側CSS值,並使定位失敗。我偶然發現了這個answer,建議只使用.animate(),併爲動畫設置最高的CSS值。這解決了這個問題。

Fiddle

0

你怎麼期待position表現? http://api.jquery.com/position/ https://github.com/jquery/jquery/blob/master/src/offset.js#L90

它看起來只是我的一個讀者。

+0

我需要將元素放置在另一個動態大小的元素旁邊。由於尺寸改變,我無法對其進行硬編碼。 – ericbowden

+0

你沒有正確使用'''$ .position()'''。這是爲了讀取值,而不是設置。 –

+0

它看起來像你指的是jQuery-ui的位置()'''http://api.jqueryui.com/position/ –