2011-10-20 62 views
3

我們正在開發一個jQuery插件,它可以在其中創建一個具有多個「列」的DIV。當用戶滾動DIV時,滾動將「捕捉」到列邊緣。我創建了一個演示這個的jsFiddle。將該框向右滾動,直到它捕捉到第1列的末尾。http://jsfiddle.net/vcYjm/3/可拖動拖拽事件後無法設置CSS屬性

問題出在這裏。當用戶拖動滾動柄,我們在該代碼塊的更新列,此代碼滾動位置:

$('.'+snapHolder).css('right', snapScrollPos+'px'); 

也就是說在最初加載頁面工作正常,但一旦有位置屬性的任何其他設置都會停止工作。例如,重新加載jsFiddle,然後點擊鏈接「set $('。snapHolder').css('left','-50px')」。拖動將不再起作用。同樣,如果您滾動到第一個快照,滾動不再起作用。

這裏是代碼位,其觸發在管理單元區列前:

if (colOffset > (colWidth - snapSize) && colOffset < colWidth) { 
     inAfter = false; 
     if (!inBefore) { 
      inBefore = true;     
      console.log("before"); 
      $('.'+snapHolder).css('left', '-' + fullWidth*(colNum+1) + 'px'); 
      $handle.parents(':eq(2)').find('.'+dragHandle).css({'left': leftPosition}); 
     } 
    } 

和後柱:

} else if (colOffset < snapSize) { 
    inBefore = false; 
    if (!inAfter) { 
     inAfter = true; 
     console.log("after"); 
     $('.'+snapHolder).css('left', '-' + fullWidth*colNum + 'px'); 
     $handle.parents(':eq(2)').find('.'+dragHandle).css({'left': leftPosition}); 
    } 
} 

回答

0

這裏是我發現的問題。您正在使用「right」屬性來設置snapHolder的位置。然而,你使用「左」屬性作爲你的對齊位置。

設置「left」屬性後,「right」屬性被忽略。

所以堅持一個。可以使用左側或右側。

您不能同時使用兩者。

+0

我已經考慮過了,但確實將此行更改爲: $('。'+ snapHolder).css('left',snapScrollPos2 +'px'); 同樣的事情發生。事實上,你點擊底部的$('。snapHolder').css('left','-50px')鏈接,你會發現它打破了滾動,並且「right」屬性從未被設置過。 –

+0

你應該仔細檢查你在做什麼,因爲當我將所有的「左」改爲「右」時,它就可以工作。 http://jsfiddle.net/AJMn7/ – vinhboy

+0

在你的小提琴中,滾動功能現在可以工作,但捕捉功能被破壞了。正如我所說,一個位置屬性的設置似乎打破了它的不同設置。您只需切換哪個設置正在工作。 –