MDN上概念

scrollTop:获取或设置一个元素的内容垂直滚动的像素数。

scrollHeight:一个元素内容高度的度量,包括由于溢出导致的视图中不可见内容。

clientHeight:元素内部的高度(单位像素),包含内边距,但不包括水平滚动条、边框和外边距。

只看概念,似懂非懂,还是要自己测试一遍才知道,做个记录,以下为谷歌浏览器测试。

css

.box {
height: 500px;
width: 300px;
overflow: scroll;
color: #fff;
}

html

<div class="box">
<div>鸟语花香</div>
<div>鸟语花香</div>
...
<div>鸟语花香</div>
</div>

来看看scrollTop、scrollHeight与clientHeight都是多少

console.log("scrollTop:"+div.scrollTop)//页面内容的滚动距离
console.log("scrollHeight:"+div.scrollHeight)//滚动内容的总大小
console.log("clientHeight:"+div.clientHeight)//滚动容器的高

与magin的关系?css加上margin: 30px;

结果如下:



结论:没关系

与padding的关系?css加上padding: 10px;

结果如下:



结论:有关系

scrollHeight=高度height(滚动内容)+上下padding

clientHeight=高度height(滚动容器)+上下padding

与border的关系?css加上border: 14px;

结果如下:

结论:没关系

执行oncroll:

var div = document.querySelector(".box")
var istan = true //加个开关,否则会append好多p标签
div.onscroll = function () {
//距离底部300时执行
if (div.scrollHeight - div.scrollTop < div.clientHeight + 300) {
if (istan) {
var p = document.createElement("p")
p.style.color = "#f40"
p.innerText = '快到底了'
div.appendChild(p)
istan = false
}
}
var hue = 360 - 360 * (div.scrollTop + div.clientHeight) / div.scrollHeight
//改变背景颜色
div.style.backgroundColor = 'hsl(' + hue + ',60%,70%)'

如下图:

判断是否滚动到底

element.scrollHeight等于element.scrollTop+element.clientHeight的时候说明滚动到底了

element.scrollHeight - element.scrollTop === element.clientHeight

注:快滑到最后的时候scrollHeight多了53,是添加的p标签的高度(height+margin)

CSS hsl() 函数

hsl(hue, saturation, lightness)

hue 色相 0 (或 360) 为红色, 120 为绿色, 240 为蓝色

saturation 饱和度 色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值

lightness 亮度 取0-100%,增加亮度,颜色会向白色变化;减少亮度,颜色会向黑色变化。

实现效果

jq操作scroll

scrollLeft()

设置或返回匹配元素相对滚动条左侧的偏移。

scrollTop()

设置或返回匹配元素相对滚动条顶部的偏移。

scrollTop、scrollHeight与clientHeight的更多相关文章

  1. scrollTop,scrollHeight,clientTop,clientHeight,offsetTop,offsetHeight实际意义 及 计算方式 附实例说明

    一.滚动距离.高度 scrollTop scrollLeft scrollHeight scrollWidth 二.相对位置.距离 offsetTop offsetLeft offsetHeight ...

  2. 各种位置和高度计算:.position()、.offset()、.outerHeight()、.scrollTop、.scrollHeight、.clientHeight

    1..position()和.offset() jquery的.position()获取相对于最近的position为relative或absolute的父元素的偏移,返回.position().le ...

  3. 【日常总结】scrollTop、scrollHeight与clientHeight的重要关系

    前言 在做一个需求的时候涉及懒加载,百度了一下,发现scrollTop.scrollHeight与clientHeight这三个元素起到了重要作用,以前做过类似demo但是时间过太久忘记了,现在已经完 ...

  4. offsetTop/offsetHeight scrollTop/scrollHeight 的区别

    offsetTop/offsetHeight   scrollTop/scrollHeight  这几个属性困扰了我N久,这次一定要搞定. 假设 obj 为某个 HTML 控件. obj.offset ...

  5. scrollHeight、clientHeight、offsetHeight、scrollTop等的定义以及图解

    开发中经常遇到使用scrollHeight.scrollTop.clientHeight.offsetHeight等的情况,网上有众多关于这些属性的解释,但是并不全面和直观,现在将这些属性结合图例整理 ...

  6. JavaScript--clientX,clientY、pageX,pageY、offsetLeft,offsetTop/offsetWidth,offsetHeight、scrollLeft,scrollTop/scrollWidth,scrollHeight、clientHeight,clientWidth区别

    /*在事件的内部console.dir(event)*/ /** * 事件对象event * clientX/clientY 获取鼠标基于浏览器窗口(可视区域的坐标位置)全兼容 * * pageX/p ...

  7. scrollWidth,offsetWidth,clientWidth,width;scrollHeight,offsetHeight,clientHeight,height;offsetTop,scrollTop,top;offsetLeft,scrollLeft,left还有谁

    题中的那么多属性让人头都大了,他们到底是什么意思?不同浏览器的实现是一样的吗?以下所有结论来自chrome版本 53.0.2785.89 (64-bit)和firefox版本52.0.2,操作系统ub ...

  8. scrollLeft/scrollTop/scrollHeight

    scrollHeight  :  It includes the element's padding, but not its border or margin.This property will ...

  9. offsetHeight、scrollHeight、clientHeight、height

    对这几项进行彻底研究. 第一步:纯净div,没有margin,padding,border,height设置为200px. 添加滚动条,overflow:scroll,结果div的高度被压缩,因为被滚 ...

随机推荐

  1. IM即时通讯设计 高并发聊天服务:服务器 + qt客户端(附源码)

    来源:微信公众号「编程学习基地」 目录 IM即时通信程序设计 IM即时通讯 设计一款高并发聊天服务需要注意什么 如何设计可靠的消息处理服务 什么是粘包 什么是半包 解决粘包和半包 IM通信协议 应用层 ...

  2. Java中的选择结构(二)

    选择结构(二) 学习本章会用到的单词: case:实例,情形,情况 switch:转换,切换,开关 default:系统默认值,违约,预设.缺省 exit:出口,通道,退出 consume:消耗,耗费 ...

  3. 【模型推理】量化实现分享二:详解 KL 对称量化算法实现

      欢迎关注我的公众号 [极智视界],回复001获取Google编程规范   O_o   >_<   o_O   O_o   ~_~   o_O   大家好,我是极智视界,本文剖析一下 K ...

  4. 铁人三项(第五赛区)_2018_rop

    拿到程序依旧老样子checksec和file一下 可以看到是32位的程序开启了nx保护,将程序放入ida进行查看 shift+f12 看到没有system和binsh等字样,考虑用泄露libc来做这道 ...

  5. how2heap学习(一)

    接下来的时间会通过how2heap学习堆的知识,这个系列可能会更新很多篇,因为每天学习到的东西要保证吸收消化,所以一天不会学习很多,但是又想每天记录一下.所以开个系列. first_fit 此题的源码 ...

  6. android jni-dlerror报undefined symbol: JNI_OnLoad

    以下是很简单的一个官方的jni方法,在MainActivity的onCreate中调用 extern "C" JNIEXPORT jstring JNICALL Java_com_ ...

  7. 自动化集成:Pipeline流水语法详解

    前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译.打包.镜像构建.部署等操作:本篇文章主要描述Pipeline流水线用法. 一.Webhook原理 ...

  8. Python第三周 数据类型:集合set、文件的读写、追加操作。

    集合 知识点:集合是无序的 格式:{1,2,3,"str_test"} set_1 = set(list1)#将列表转换为集合 集合关系测试: 集合的逻辑判断.取交集.并集.差集. ...

  9. 我写了个IDEA开源插件,vo2dto 一键生成对象转换

    让人头疼的对象转换 头炸,po2vo.vo2do.do2dto,一堆对象属性,取出来塞进来.要不是为了 DDD 架构下的各个分层防腐,真想一竿子怼下去. 那上 BeanUtils.copyProper ...

  10. 最强最全面的大数据SQL经典面试题(由31位大佬共同协作完成)

    本套SQL题的答案是由许多小伙伴共同贡献的,1+1的力量是远远大于2的,有不少题目都采用了非常巧妙的解法,也有不少题目有多种解法.本套大数据SQL题不仅题目丰富多样,答案更是精彩绝伦! 注:以下参考答 ...