2011-10-20 13 views
3

複数の「列」を含むDIVを作成するjQueryプラグインを開発しています。ユーザーが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

ここで私が気づいた問題があります。あなたはsnapHolderの位置を設定するために "right"属性を使用しています。それでも、「左」属性をスナップ位置として使用しています。

"left"属性を設定すると、 "right"属性は無視されます。

だから1つを貼る。左または右のいずれかを使用します。

両方を使用することはできません。

+0

私はそれを考えていましたが、実際にこの行を次のように変更しました: $( '。' + snapHolder).css( 'left'、snapScrollPos2 + 'px'); 同じことが起こります。実際、下部の$( '。snapHolder')。css( 'left'、 '-50px')リンクをクリックすると、 "right"属性が決して設定されていないことがわかります。 –

+0

あなたは何をしているのかをもう一度確認する必要があります。なぜなら、私はすべての "左"を "右"に変更したからです。 http://jsfiddle.net/AJMn7/ – vinhboy

+0

あなたのフィドルで、スクロールが今は機能しますが、スナップは壊れています。私が言ったように、位置属性の1つの設定は、それの別の設定を破るようです。どの設定が機能しているかを単純に切り替えました。 –

関連する問題