2013-08-21 175 views
1

我试图在div中应用自动滚动。我有一个固定高度div下的元素列表,现在我希望当我按下第三个高亮元素(即Compt0005)div后自动滚动键。任何机构可以解决这个问题..在div元素溢出自动滚动

Demo: - here

回答

3

此代码通过.getBoundingClientRect()设置div的scrollTop的属性完全相同方法:

$(function() { 
    var liPossition = 0; 
    var items = $("#ulSearch li"); 
    var divSearchContent = $("#divSearchContent"); 
    divSearchContent.hide(); 
    $("#txtSearch").keydown(function (e) { 
     if (e.keyCode == 13) { // if enter pressed 
      $("#txtSearch").val(items.eq(liPossition).text()); 
      divSearchContent.hide(); 
      return; 
     } 
     if (e.keyCode != 38 && e.keyCode != 40) { // // if not up or down arrow 
      return; 
     } 
     divSearchContent.show(); 
     items.eq(liPossition).css("background-color", ""); 
     if (e.keyCode == 40 && liPossition < items.length - 1) { // down arrow key code 
      liPossition++; 
     } 
     if (e.keyCode == 38 && liPossition > 0) { // up arrow key code 
      liPossition--; 
     } 
     items.eq(liPossition).css("background-color", "red");//[0].scrollIntoView(); return; 
     var b1 = divSearchContent[0].getBoundingClientRect(); 
     var b2 = items.eq(liPossition)[0].getBoundingClientRect(); 
     if (b1.top>b2.top) { 
      divSearchContent.scrollTop(divSearchContent.scrollTop()-b1.top+b2.top); 
     } 
     else if (b1.bottom<b2.bottom) { 
      divSearchContent.scrollTop(divSearchContent.scrollTop()-b1.bottom+b2.bottom); 
     } 
    }); 
}); 

JSFiddle

+0

不错的1这个答案对我来说更好一些 –

+0

你也可以在点击而不是文本框时重置进程。 –

+0

它显示错误在我的网页“无法调用方法'getBoundingClientRect'未定义” –

3

变化

$("#ulSearch li:eq(" + liPossition + ")").css("background-color", "red") 

每一次出现到

$("#ulSearch li:eq(" + liPossition + ")").css("background-color", "red")[0].scrollIntoView(); 
+0

它的做工精细,但它滚动每个李,但我想滚动在这种情况下,它不会是简单的3件 –

+0

后,你必须检查他是否元素在视图中或没有,然后还要滚动。 –

+0

k精致谢谢.. –