检测可滚动下拉的结束

时间:2015-06-12 07:08:21

标签: javascript jquery meteor jquery-chosen

我正在动态生成一个选择选项框。可以有任意数量的选项。当用户向下滚动到框的末尾时,我需要触发一个事件,(我将调用服务器并使用更多选项填充选择)。它就像创建一个分页,但是在下拉框中。

有人能告诉我怎么能这样做。

所以我唯一需要的是当用户滚动到下拉列表的末尾时触发事件。多数民众赞成

library(dplyr)

temp <- help %>% group_by(id) %>% 
     arrange(ob) %>%
     filter(!is.na(score)) %>% 
     mutate(es = first(score) - last(score)) %>%
     select(id, es) %>%
     distinct()

help %>% left_join(temp)

请不要担心我将如何填充选项框,因为我正在使用meteorJs,我将很容易实现它。

唯一的要求是发起一个事件。

2 个答案:

答案 0 :(得分:2)

你可以尝试这个,我已经创建了一个关于这个的演示,并在列表底部滚动时生成一个弹出窗口。

工作小提琴演示:https://jsfiddle.net/j68o44Ld/

<div class="subtask-li">
<span class="main-tlist"> 
<span class="icon-taskListing"></span> 
<span class="subselectedList">Default</span> 
<span class="icon-subcaret"></span> </span>
<ul class="subtask-pick">
<li><a href="javascript:;">General issues</a></li>
<li><a href="javascript:;">Default</a></li>
<li><a href="javascript:;">Android Games Issues</a></li>
<li><a href="javascript:;">pt issues</a></li>
<li><a href="javascript:;">Server Development</a></li>
<li><a href="javascript:;">Resource Integration</a></li>
<li><a href="javascript:;">Server Infrastructure</a></li>
</ul>
    </div>

    $(document).on("click",".main-tlist",function(){
    $('.subtask-pick').toggle();
    });

    $('.subtask-pick').scroll(function () {
          if ($(this)[0].scrollHeight - $(this).scrollTop() <=  $(this).outerHeight()) {
                alert("end of scroll");
              // You can perform as you want

          }
    });



  .subtask-li {
        border: 1px solid #dfe8f1;
        cursor: pointer;
        position: relative;
        background: rgba(0, 0, 0, 0) linear-gradient(to bottom, rgba(255, 255, 255, 1) 0%, rgba(246, 246, 246, 1) 100%) repeat scroll 0 0;
        border-radius: 3px;
        float: left;

        left: 5px;
        padding: 5px;
        top: 6px;
    }


    .subtask-pick{
       background-clip: padding-box;
        background-color: #fff;
        border: 1px solid #dfe8f1;
        border-radius: 3px;
        box-shadow: 0 1px 7px 2px rgba(135, 158, 171, 0.2);
        display: none;
        list-style: outside none none;
        padding: 0 0 10px;
        position: absolute;
        z-index: 9; 
        float: left;
       width: 220px;
        list-style: outside none none; height:220px; overflow:auto;
    }
    .icon-taskListing {
        display: inline-block;
        vertical-align: middle;
    }
    .subselectedList {
        overflow: hidden;
        padding: 0 5px;
        text-overflow: ellipsis;
        white-space: nowrap;
        width: 116px;
    }
    ul.subtask-pick li {
      float: none;
      display: block;
      clear: both;

      position: relative;
    }
    ul.subtask-pick li a {
      padding: .9em 1em .9em .8em;
      position: relative;
        clear: both;
      cursor: pointer;
      display: block;

      white-space: nowrap;
       text-overflow: ellipsis;
      overflow: hidden;
    }
    ul.subtask-pick li a:hover {
      background: none repeat scroll 0 0 #eff4f6;
      cursor: pointer;
    }
    a {
      text-decoration: none;
      outline: 0;
      color: #4c4c4c;
    }

答案 1 :(得分:1)

无法检测实际select元素的滚动,因此无法按要求进行检测。但您可以尝试创建一个自定义选择框外观控件,它只是一个滚动div并将该功能应用于它。

<强>更新

<强> DEMO HERE

对于chosen-jquery-plugin你做的事件听取如下:

这是从html插件为您的选择框生成chosen的方式:

<div class="chosen-container chosen-container-single chosen-container-active" style="width: 100px;" title="">
    <a class="chosen-single" tabindex="-1">
        <span>1</span>
        <div><b></b></div>
    </a>
    <div class="chosen-drop">
        <div class="chosen-search">
            <input type="text" autocomplete="off"/>
        </div>
        <ul class="chosen-results">
            <li class="active-result result-selected" data-option-array-index="0">1</li>
            <li class="active-result" data-option-array-index="1">2</li>
            <li class="active-result" data-option-array-index="2">3</li>
            <li class="active-result" data-option-array-index="3">4</li>
            <li class="active-result" data-option-array-index="4">5</li>
            <li class="active-result" data-option-array-index="5">6</li>
            <li class="active-result" data-option-array-index="6">7</li>
            <li class="active-result" data-option-array-index="7">8</li>
        </ul>
    </div>
</div>

.chosen-drop撰写样式并修改您的样式,并从inline

中删除select样式
.scroll
{
    line-height:30px;
    width:100px;
}

.chosen-drop
{
    overflow-y:scroll;
    max-height: 90px;
}

您的 JS 将是

$('.chosen-drop').on('scroll',chk_scroll);

function chk_scroll(e)
{
    var elem = $(e.currentTarget);
    console.log(elem[0].scrollHeight-elem.scrollTop());
    console.log(elem.outerHeight());
    if (elem[0].scrollHeight - elem.scrollTop() <= elem.outerHeight()) 
    {
        alert('bottom');
    }
}