我正在使用jQuery向表中动态添加行。的table
是内部的div
已overflow:auto
从而导致垂直滚动条。
现在,我想将容器自动滚动div
到最后一行。什么是jQuery版本tr.scrollintoView()
?
Answers:
var rowpos = $('#table tr:last').position();
$('#container').scrollTop(rowpos.top);
应该做的把戏!
fixed scrolling
功能/插件。
如果您需要滚动到列表中的任意项(而不是总是滚动到底部),则下面的效果更好:
function scrollIntoView(element, container) {
var containerTop = $(container).scrollTop();
var containerBottom = containerTop + $(container).height();
var elemTop = element.offsetTop;
var elemBottom = elemTop + $(element).height();
if (elemTop < containerTop) {
$(container).scrollTop(elemTop);
} else if (elemBottom > containerBottom) {
$(container).scrollTop(elemBottom - $(container).height());
}
}
我已经编写了一个jQuery插件,该插件的功能完全符合锡盒上的要求(也可以满足您的要求)。好处是,仅在元素实际上处于关闭状态时才滚动容器。否则,将不会执行滚动。
它是如此简单:
$("table tr:last").scrollintoview();
它会自动查找内容过多并显示滚动条的最接近的可滚动祖先。因此,如果有另一个祖先overflow:auto
但不可滚动,将被跳过。这样,您不需要提供可滚动的元素,因为有时您甚至都不知道哪个元素是可滚动的(我在我的Sharepoint网站中使用了此插件,其中内容/母版与开发人员无关,所以这超出了我的控制-HTML可能会更改网站运行时,可滚动容器也可以)。
var target = $(selector); target.get(0).scrollIntoView();
简单得多:
$("selector for element").get(0).scrollIntoView();
如果选择器中返回多个项目,则get(0)将仅获得第一项。
此可运行示例演示了如何使用所有现代浏览器都支持的scrollIntoView():https : //developer.mozilla.org/zh-CN/docs/Web/API/Element.scrollIntoView#Browser_Compatibility
下面的示例使用jQuery选择的元素#yourid
。
$( "#yourid" )[0].scrollIntoView();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p id="yourid">Hello world.</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
如果只想滚动,则可以使用jQuery的scrollTop方法。http://docs.jquery.com/CSS/scrollTop
var table = jQuery( 'table' );
table.scrollTop( table.find( 'tr:last' ).scrollTop() );
这样的事吧?
与上面相同,几乎没有修改
function focusMe() {
var rowpos = $('#FocusME').position();
rowpos.top = rowpos.top - 30;
$('#container').scrollTop(rowpos.top);
}
<html>
<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha256-cCueBR6CsyA4/9szpPfrX3s49M9vUU5BgtiJj06wt/s=" crossorigin="anonymous"></script>
<body>
<input type="button" onclick="focusMe()" value="focus">
<div id="container" style="max-height:200px;overflow:scroll;">
<table>
<tr>
<td>1</td>
<td></td>
</tr>
<tr>
<td>2</td>
<td></td>
</tr>
<tr>
<td>3</td>
<td></td>
</tr>
<tr>
<td>4</td>
<td></td>
</tr>
<tr>
<td>5</td>
<td></td>
</tr>
<tr>
<td>6</td>
<td></td>
</tr>
<tr>
<td>7</td>
<td></td>
</tr>
<tr>
<td>8</td>
<td></td>
</tr>
<tr>
<td>9</td>
<td></td>
</tr>
<tr id="FocusME">
<td>10</td>
<td></td>
</tr>
<tr>
<td>11</td>
<td></td>
</tr>
<tr>
<td>12</td>
<td></td>
</tr>
<tr>
<td>13</td>
<td></td>
</tr>
<tr>
<td>14</td>
<td></td>
</tr>
<tr>
<td>15</td>
<td></td>
</tr>
<tr>
<td>16</td>
<td></td>
</tr>
<tr>
<td>17</td>
<td></td>
</tr>
<tr>
<td>18</td>
<td></td>
</tr>
<tr>
<td>19</td>
<td></td>
</tr>
<tr>
<td>20</td>
<td></td>
</tr>
</table>
</div>
</body>
</html>
$( "#yourid" )[0].scrollIntoView();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p id="yourid">Hello world.</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
我无法在上述Abhijit Rao的答案中添加评论,因此,我将其作为其他答案提交。
我需要使表格列滚动到宽表上的视图中,因此我向功能添加了向左滚动功能。正如有人提到的那样,它在滚动时会跳转,但是它对我有用。
function scrollIntoView(element, container) {
var containerTop = $(container).scrollTop();
var containerLeft = $(container).scrollLeft();
var containerBottom = containerTop + $(container).height();
var containerRight = containerLeft + $(container).width();
var elemTop = element.offsetTop;
var elemLeft = element.offsetLeft;
var elemBottom = elemTop + $(element).height();
var elemRight = elemLeft + $(element).width();
if (elemTop < containerTop) {
$(container).scrollTop(elemTop);
} else if (elemBottom > containerBottom) {
$(container).scrollTop(elemBottom - $(container).height());
}
if(elemLeft < containerLeft) {
$(container).scrollLeft(elemLeft);
} else if(elemRight > containerRight) {
$(container).scrollLeft(elemRight - $(container).width());
}
}
element.scrollIntoView()
可以。