我有一个 ul 定义,如
<div>
<ul id="mylist">
</ul>
</div>
在我的 javascript 中,我使用 jquery 将 li 项目添加到此 ul
$("mylist").append("<li>Test</li>");
我希望我的 ul 自动向下滚动 div 到我添加了很多 li 项目并且 ul 超过为其定义的高度时
我尝试过的事情:
点击这个JS小提琴。它会对你有帮助。
Jquery:
$('.add').click(function(){
$("#mylist").append("<li>Test</li>");
$('#mylist').animate({scrollTop: $('#mylist').prop("scrollHeight")}, 500);
});
HTML:
<div>
<ul id="mylist"></ul>
<button class="add">Add li</button>
</div>
CSS:
#mylist {
width: 100px;
height: 200px;
padding: 20px;
background-color: #eeeeee;
overflow-y: auto;
}
这也可以在 Vanilla JS 中完成,不需要 JQuery:
items = document.querySelectorAll(".dummy");
last = items[items.length-1];
last.scrollIntoView();
另请参阅下面的片段:
//this adds the new element at the bottom
button = document.querySelector("button")
button.onclick = function() {
list = document.querySelector("#mylist");
var li = document.createElement("li");
li.textContent = "Added with Vanilla JS"
list.appendChild(li);
//this jumps to the last element on the bottom
items = document.querySelectorAll(".dummy");
console.log(items);
last = items[items.length-1];
last.scrollIntoView();
}
#mylist {
max-height: 200px;
overflow-y: auto;
}
.dummy {
min-height: 80px;
background-color: lightgrey;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button>Add</button>
<div>
<ul id="mylist">
<li class="dummy">Test</li>
<li class="dummy">Test</li>
<li class="dummy">Test</li>
<li class="dummy">Test</li>
<li class="dummy">Test</li>
</ul>
</div>
我使用 jQuery
animate
来实现平滑滚动。我只是向 ul
添加一些元素,然后滚动到 li
下的最后一个 ul
元素。
JS代码:
$(function () {
$("#mylist").append("<li>Test</li><li>Test</li><li>Test</li><li>Test</li><li>Test</li>");
$('div').animate({
scrollTop: $("#mylist li").last().offset().top
},
'slow');
});
HTML 代码:
<div>
<ul id="mylist"></ul>
</div>
现场演示@JSFiddle:http://jsfiddle.net/dreamweiver/0Lofm4mL/1/
尝试类似的事情
$('button').click(function() {
var $last = $("<li>Test</li>").appendTo("#mylist");
$("#mylist").stop().animate({
scrollTop: $last.offset().top
}, '500', 'swing', function() {});
})
#mylist {
max-height: 200px;
overflow-y: auto;
}
.dummy {
min-height: 80px;
background-color: lightgrey;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button>Add</button>
<div>
<ul id="mylist">
<li class="dummy">Test</li>
<li class="dummy">Test</li>
<li class="dummy">Test</li>
<li class="dummy">Test</li>
<li class="dummy">Test</li>
</ul>
</div>
一个更简单的答案如下:
function setItem(){
// We go through all items and change the value of the id attribute to empty
$('#mylist li').each(function (i, v) {
$(v).attr('id', '');
});
// We add the items
$('#mylist').append('<li id="last">test</li>');
// Currently there is only one identifier called "last"
window.location.href = '#last';
}
#mylist{
overflow-y: scroll;
height: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onclick="setItem();">Add</button>
<div id="mylist"></div>
使用
listNode.lastElementChild.scrollIntoView()
有一种简单的方法可以做到这一点:
container = $('MyElement').get(0);
container.scrollTop = (container.scrollHeight + container.offsetHeight);