【问题标题】:How do I enable scrolling while dragging on my target element?如何在拖动目标元素时启用滚动?
【发布时间】:2013-12-14 12:15:44
【问题描述】:

我有 2 个未排序的列表,它们浮动在一起。右侧列表中的项目可以拖动到左侧列表中。

<ul class="static sortable connected-sortable">
        <li class="not-sortable">Item 1<div class="hint">Sleep hier uw bestand</div></li>
        <li class="not-sortable">Item 2<div class="hint">Sleep hier uw bestand</div></li>
        <li class="not-sortable">Item 3<div class="hint">Sleep hier uw bestand</div></li>
        <li class="not-sortable">Item 4<div class="hint">Sleep hier uw bestand</div></li>
        <li class="not-sortable">Item 5<div class="hint">Sleep hier uw bestand</div></li>
        <li class="not-sortable">Item 6<div class="hint">Sleep hier uw bestand</div></li>
</ul>

<ul class="sortable connected-sortable right">

    <li class="sortableRow">Item sortable 1</li>
    <li class="sortableRow">Item sortable 2</li>
    <li class="sortableRow">Item sortable 3</li>
    <li class="sortableRow">Item sortable 4</li>
    <li class="sortableRow">Item sortable 5</li>
    <li class="sortableRow">Item sortable 6</li>

</ul>

我的左侧列表有一个滚动条。

当我将项目从右侧列表拖到左侧列表时,我想启用左侧列表的滚动功能。因此,当我在左侧列表的底部或顶部边缘附近拖动时,左侧列表上的滚动条会向下或向上。

问题在于滚动功能仅对原始列表启用,即项目来自的列表,目前根本没有滚动条。

拖动时,我希望将滚动功能应用于左侧的目标列表。

修改我的代码: http://jsfiddle.net/Y2RJj/42/

当我从右向左拖动项目时,如何激活左侧列表的滚动?

【问题讨论】:

    标签: jquery list jquery-ui-sortable


    【解决方案1】:

    更新

    由于排序事件仅在用户移动鼠标时触发,因此您应该使用一个函数,该函数每隔 n 毫秒检查一次助手的位置,如下所示:

    edited jsFiddle

     var timerId = 0;
    function testPos (l , h){
    
        timerId = window.setInterval(function(){
            var leftUl = l
            var ulTop = leftUl.offset().top;
            var ulBottom = ulTop + leftUl.height();
                     console.log(h.offset().top >= ulTop &&  h.offset().top <= ulTop + 20)   
            if(h.offset().top >= ulTop &&  h.offset().top <= ulTop + 20 ){
                leftUl.scrollTop(leftUl.scrollTop() - 1)
            }
    
             if(h.offset().top +h.height() <= ulBottom &&  h.offset().top +h.height() >= ulBottom - 20 ){
                  leftUl.scrollTop(leftUl.scrollTop() + 1)
             }
        }, 10);
    
    }
    

    在 start 时启动计时器,在 stop 时启动 clearInterval

    start : function (event , ui){
                     testPos ($('ul.static.sortable.connected-sortable') , ui.helper);   
                },
     stop: function( event, ui ) {
                        clearInterval(timerId)
                        ui.item.prev().children(".hint").hide();
                        var nextItemclass = ui.item.next().attr("class");
                        var prevItemClass = ui.item.prev().attr("class");
                        if ((nextItemclass == "sortableRow")&&(ui.item.parent().hasClass('static'))){
                                $(".right").append(ui.item.next());
                            }
                        if ((prevItemClass == "sortableRow")&&(ui.item.parent().hasClass('static'))){
                                $(".right").append(ui.item.prev());
                            }
                            if(prevItemClass == "not-sortable"){
                            ui.item.prev().addClass("highlight");
                        }
                    },
    

    你可以通过排序事件来做到这一点

    sort : function( event, ui ){
    
                    var leftUl = $('ul.static.sortable.connected-sortable')
                     var ulTop = leftUl.offset().top;
                    var ulBottom = ulTop + leftUl.height();
    
                    if(ui.offset.top >= ulTop &&  ui.offset.top <= ulTop + 20 ){
                        leftUl.scrollTop(leftUl.scrollTop() - 1)
                    }
    
                    if(ui.offset.top +ui.helper.height() <= ulBottom &&  ui.offset.top +ui.helper.height() >= ulBottom - 20 ){
                        leftUl.scrollTop(leftUl.scrollTop() + 1)
                    }
    
                }
    

    jsFiddle

    【讨论】:

    • 当您的鼠标停留在密闭空间内时,这非常有效。您认为甚至可以在左侧列表之外进行注册吗?说它上方 100 像素,下方 100 像素?所以当你的鼠标离开列表时它会继续滚动?
    • 我在摆弄错误的变量,这是完美的。非常感谢。
    • 我确信有更好的方法来做到这一点。
    • @GauravGupta 如果您找到它,请随时添加您的答案。 =)
    猜你喜欢
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2023-03-16
    • 2012-11-06
    • 2021-03-09
    相关资源
    最近更新 更多