codepen您需要调整codepen的大小,以便显示滚动条。我正在谈论内容中的内部滚动。
我想知道滚动是否位于div的底部。我已经看到这个页面已经完成了。当我滚动到div的底部scrollTop
显示95而scrollHeight
给我210.我如何找到真正的底部?
var scroller = $('.fill-area-content');
var getHeight = function() {
//console.log(scroller.scrollTop());
console.log('IsAtBottom: ', isAtBottom(scroller));
}
var isAtBottom = function(scroller) {
var atBottom = false;
var asRawDom = scroller.get(0);
console.log('scroll height', asRawDom.scrollHeight);
console.log(asRawDom.scrollTop);
//scrollHeight is 210 while Bottom is 95
//How do I determine true bottom?
return atBottom;
}
//Stuff I've messed with
/*
console.log(scroller.height());
console.log($(document).height());
console.log($(window).height());
var testHeight = $(document).height() - $(window).height();
console.log(testHeight);
*/
<input type="button" onclick="getHeight()" value="Get Height"/>
<div class="flexbox-container">
<div class="flexbox-item header">
Header
</div>
<div class="flexbox-item flexbox-inner-container flexbox-item-grow">
<div class="flexbox-item-grow fill-area-content">
Content
<br /><br />
Emulates height 100% with a horizontal flexbox with stretch
<br /><br />
This box with a border should fill the blue area except for the padding (just to show the middle flexbox item). Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
</div>
</div>
<div class="flexbox-item footer">
Footer
</div>
</div>
.flexbox-container
{
//width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: flex-start; /* align items in Main Axis */
align-items: stretch; /* align items in Cross Axis */
align-content: stretch; /* Extra space in Cross Axis */
background: rgba(255, 255, 255, .1);
}
.flexbox-inner-container
{
display: flex;
flex-direction: row;
justify-content: flex-start; /* flex-start is the default. align items in Main Axis */
align-items: stretch; /* stretch is default. align items in Cross Axis */
align-content: stretch; /* stretch is default. Extra space in Cross Axis */
}
.flexbox-item-grow
{
flex: 1; /* same as flex: 1 1 auto; */
}
.fill-area-content
{
overflow: auto;
}
//Fluff below here
*, *:before, *:after
{
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
html, body
{
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
.flexbox-item
{
padding: 8px;
}
.flexbox-item.header
{
background: rgba(255, 0, 0, .1);
}
.flexbox-item.footer
{
background: rgba(0, 255, 0, .1);
}
.flexbox-item.
{
background: rgba(0, 0, 255, .1);
}
body
{
background: #444444;
color: #cccccc;
font-size: 14px;
font-family: Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
}
答案 0 :(得分:6)
scrollTop
的最大值(以及因此需要计算以确定滚动是否已移动到元素的底部)将是scrollHeight
减去元素的高度 - 给定的是你描述我会假设元素是115px
高。这是一个有效的例子:
$('#foo').scroll(function() {
var maxScrollTop = $(this).prop('scrollHeight') - $(this).height();
if ($(this).scrollTop() == maxScrollTop) {
console.log('scrolled to bottom!');
}
});
&#13;
#foo {
height: 100px;
overflow: scroll;
}
#content {
height: 1000px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="foo">
<div id="content">Scroll down!</div>
</div>
&#13;