4

すべてのセルがドロップ可能であるテーブルを含むコードを開発しました。テーブル コンテナーは、固定の高さとスクロールバーを持つ div です。

テーブルの下部にある最後のテーブル セルに要素 (この例では黄色の四角) をドラッグしたいと思います。すべて正常に動作しますが、要素をドラッグしているときに div コンテナーのスクロールバーをアクティブにするには、常にマウスを動かさなければなりません

マウスを動かさずに要素を div コンテナの下部にドラッグすると、自動的に下にスクロールする可能性はありますか?

これが私の例です: http://jsbin.com/upunek/19/edit

前もって感謝します

4

1 に答える 1

5

私は今朝それを理解します。

ドラッグイベントの位置がボーダーの70pxにあるsetIntervalときの関数を作成しました

これが私が作ったフィドルです:http://jsfiddle.net/pPn3v/22/

var yellow = $('#yellow');
var offset = yellow.offset();
var offsetWidth = offset.left + yellow.width();
var offsetHeight = offset.top + yellow.height();

var red = $('#red');

var intRightHandler = null;
var intLeftHandler = null;
var intTopHandler= null;
var intBottomHandler= null;
var distance = 70;
var timer = 100;
var step = 10;


function clearInetervals()
{
    clearInterval(intRightHandler);
    clearInterval(intLeftHandler);
    clearInterval(intTopHandler);
    clearInterval(intBottomHandler);    
}

red.draggable({
    start : function(){},
    stop: function(){clearInetervals(); },    
    drag : function(e){
        var isMoving = false;        
        //Left
        if((e.pageX - offset.left) <= distance)
        {
            isMoving = true;
            clearInetervals();            
            intLeftHandler= setInterval(function(){
                yellow.scrollLeft(yellow.scrollLeft() - step)
            },timer);
            console.log('left')
        }

        //Right
        if(e.pageX >= (offsetWidth - distance))
        {
            isMoving = true;
            clearInetervals();            
            intRightHandler = setInterval(function(){
                yellow.scrollLeft(yellow.scrollLeft() + step)
            },timer);
            console.log('right')
        }

        //Top
        if((e.pageY - offset.top) <= distance)
        {
            isMoving = true;
            clearInetervals();            
            intTopHandler= setInterval(function(){
                yellow.scrollTop(yellow.scrollTop() - step)
            },timer);
            console.log('top')
        }                          

        //Bottom
        if(e.pageY >= (offsetHeight - distance))
        {
            isMoving = true;
            clearInetervals();            
            intBottomHandler= setInterval(function(){
                yellow.scrollTop(yellow.scrollTop() + step)
            },timer);
            console.log('bottom')
        }     

        //No events
        if(!isMoving)
           clearInetervals();  
    }
});

</p>

于 2012-09-23T11:55:19.550 に答える