当元素被拖动时,不移动鼠标也能滚动div

4
我开发了一段代码,其中包含一个表格,所有单元格均为可放置的。表格容器是一个固定高度和滚动条的div。
我想把一个元素(在我的示例中是黄色正方形)拖到我的表格底部的最后一个单元格中。一切都很顺利,但是要在拖动元素时激活我的div容器的滚动条,我必须一直移动鼠标是否有可能在我的元素靠近div容器底部时自动向下滚动,而无需移动鼠标? 这是我的示例:http://jsbin.com/upunek/19/edit 提前致谢
1个回答

5

今天早上我搞定了。

拖动事件的位置位于边框的70像素处时,我创建了setInterval函数。

这是我制作的fiddle演示链接: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();  
    }
});


我非常感激你的回答。真的非常感谢。你救了我。我也遇到了和你一模一样的问题,我尝试了大约三天才解决。但是你的回答只用了一次就解决了我的问题。 - Cataclysm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接