一、offset

一般用来检测盒子的偏移、位移,都是只读属性,不能赋值

  • offsetWidth和offsetHeight表示的是:调用者盒子的宽和高,包括盒子自身的padding和border
  • offsetTop和offsetLeft是调用者的盒子距离有定位的父盒子顶部和左侧的长度。如果父盒子都没有定位,就以body为准,如果调用者自身没有top和left时,从父盒子的padding开始计算,不包括border

二、scroll

各种特效和动画中用的比较多,表示在页面滑动的过程中,卷起的部分

  • scrollWidth和scrollHeight表示的是调用元素的全部宽度和高度,内容超出也会被算入,包括padding,不包括border和margin,即 scrollWidth = width + padding
  • scrollTop和scrollLeft表示的是浏览器在滑轮滑动之后,被遮住的顶部和左侧长度
     function scroll() {
    //判断返回值是不是undefined
    if (window.pageXOffset !== undefined) {
    return {
    "top": window.pageYOffset,
    "left": window.pageXOffset
    }
    }else if (document.documentElement === "CSS1Compat") {
    return {
    "top": document.documentElement.offsetTop,
    "left": document.documentElement.offsetLeft
    }
    }else {
    return {
    "top": document.body.offsetTop,
    "left": document.body.offsetLeft
    }
    } // return { //简写
    // "top": window.pageYOffset || document.documentElement.offsetTop || document.body.offsetTop,
    // "left": window.pageXOffset || document.documentElement.offsetLeft || document.body.offsetLeft
    // }
    }
    有了这样的封装函数就可以更简单的得到元素在页面或浏览器中的位置
    var pagey = event.pageY || scroll().top + event.clientY; //后边是兼容性的写法,被遮挡高度 + 元素距浏览器高度

    这是封装的一个获取scrollTop和scrollLeft的兼容性写法,documentElement调用的是支持DTD,body调用的不支持DTD,pageYoffset方法是谷歌火狐IE9都支持的方法

判断当前是否声明DTD的方法:

document.compatMode === "BackCompat";    //未声明DTD
document.compatMode === "CSS1Compat"; //已声明DTD

三、event

DOM中的事件,而事件处理函数可以附加在DOM、window这些对象上。在事件发生的时候,event对象会被创建并依次传递给事件监听器,之前已经说过创建事件监听器的方法addEventListener() 要注意的是,在IE旧版本里使用的是attchEvent()这种效果相同的方法,也可以以此写出兼容性的写法。

  • 在处理函数中,可以将event作为形参传入,来访问一些Event接口,兼容性写法如:

     function method(event) {
    event = event || window.event;
    }

    还有好多东西等我以后慢慢发掘,现在还不知道这个里边有什么样的奇淫技巧

  • 事件传播的三个阶段:
    • 捕获:从最上一级往下查找,直到找到目标事件
    • 冒泡:从目标事件开始向上层冒泡,直到最上一级
    • 目标:执行事件的代码

四、client

clientWidth:盒子的可见宽度,不包括border和margin  故clientWidth = padding + width

clientHeight:同上

clientTop:盒子上边框的border(喵喵喵???)

clientLeft:同上

区别:

clientWidth = width + border

offsetWidth = width + padding + border

scrollWidth = 内容的宽度(不含border)

clientTop:由event事件调用   代表border的宽

offsetTop:由任意元素调用,但一般是盒子   代表此盒子距离有定位的父盒子的距离

scrollTop:由window调用,盒子也可以调用,但要有滚动条    代表被卷去的高度

JS中的offset scroll event client的更多相关文章

  1. python 全栈开发,Day52(关于DOM操作的相关案例,JS中的面向对象,定时器,BOM,client、offset、scroll系列)

    昨日作业讲解: 京东购物车 京东购物车效果: 实现原理: 用2个盒子,就可以完整效果. 先让上面的小盒子向下移动1px,此时就出现了压盖效果.小盒子设置z-index压盖大盒子,将小盒子的下边框去掉, ...

  2. JS 中的offset、scroll、client总结

    经常碰到offset.scroll.client这几个关键字,每次都要各种实验,这里总结一下. 两张图镇楼,随时翻阅 1. offset offset 指偏移,包括这个元素在文档中占用的所有显示宽度, ...

  3. 关于js中return false、event.preventDefault()和event.stopPropagation()

    在平时项目中,如果遇到需要阻止浏览器默认行为,大家经常会用return false;和event.preventDefault()来阻止,但对它俩的区别还是有些一知半解,于是看了文档,查了些资料,在此 ...

  4. js三大家族offset,scroll,cliennt的区别

    offset偏移(返回的是number类型) offsetLeft:返回盒子距离左边的距离 offsetTop:返回盒子距离顶部的距离 offsetHeight:返回盒子的高度,包括border,pa ...

  5. 20190430-screen、client、offset、scroll等JS中各种宽度距离

    参考文献: JavaScript概念之screen/client/offset/scroll/inner/avail的width/left

  6. python 全栈开发,Day54(关于DOM操作的相关案例,JS中的面向对象,定时器,BOM,client、offset、scroll系列)

    04-jQuery的属性操作 jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作 html属性操作:是对html文档中的属性进行读取,设置和移除操作.比如at ...

  7. javascript中常用坐标属性offset、scroll、client

    原文:javascript中常用坐标属性offset.scroll.client 今天在学习js的时候觉得这个问题比较容易搞混,所以自己画了一个简单的图,并且用js控制台里面输出测试了下,便于理解. ...

  8. JavaScript 特效之四大家族(offset/scroll/client/event)

      三大系列:offset.scroll.client 事件对象:event(事件被触动时,鼠标和键盘的状态)(通过属性控制)   三大系列都是以DOM元素节点的属性形式存在的. 类比访问关系,也是以 ...

  9. JavaScript中的 offset, client,scroll

    在js 中我们要用到的 offset, client, scroll 在这我把自己理解的给大家分享一下. offset div.offsetTop 指div距离上方或上层控件的距离,单位像素 div. ...

随机推荐

  1. 18.1 volatile的作用

    volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值. 1.编译器的优化 在本次线程内,当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一 ...

  2. 剑指offer 3. 链表 从尾到头打印链表

    题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解题思路:利用栈先进后出的原理,依次把ArrayList的值入栈,再出栈即可逆序 import java.util.Arra ...

  3. 如何在hanlp词典中手动添加未登录词

     我们在使用hanlp词典进行分词的时候,难免会出现分词不准确的情况,原因是由于内置词典中并没有收录当前的这个词,也就是我们所说的未登录词,只要把这个词加入到内置词典中就可以解决类似问题,如何操作,下 ...

  4. 高分辨率下放大netbeans中的小图标

    参考:http://ask.csdn.net/questions/388953 在高DPI下,Netbeans 8.2的图标变得非常小.怎么办? 修改C:\Program Files\NetBeans ...

  5. MIDAS.dll 出错时 (Error loading MIDAS.DLL.)

    DELPHI 写的程序会出 ---------------------------Pmain---------------------------Error loading MIDAS.DLL.--- ...

  6. linux SVN命令

    1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录)   例如:svn checkout svn://192.168.1.1/pro/domain    ...

  7. iterator简单描述

    Item 26. Prefer iterator to const iterator, reverse_iterator, and const_reverse_iterator. 上面一段话,是< ...

  8. [UE4]字体材质

    一.准备好一个字体文件,直接拖放到内容浏览器 二.创建一个名为testFontMaterial的UserWidget,添加一个TextBlock到默认的CanvasPanel.Font Family: ...

  9. 使用pm2来保证Spring Boot应用稳定运行

    Spring Boot开发web应用就像开发普通的java程序一般简洁,因为其内嵌了web容易,启动的时候只需要一条命令java -jar server.jar即可,非常方便.但是由此而来的问题是万一 ...

  10. Unable to complete the scan for annotations for web application [/wrs] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies.

    tomcat启动报错:Jul 20, 2018 11:48:37 AM org.apache.catalina.core.ContainerBase addChildInternalSEVERE: C ...