当前位置: 首页 > news >正文

JS面向对象编程

JS盒子模型

  • js中提供了与盒子模型相关的属性
  • css盒子模型属性:width height border padding margin

将这些属性分为很多系列 属性一共13个

client系列(跟溢出内容无关)

  • clientWidth = width + padding(左右)
  • clientHeight = height + padding(上下)
  • clientLeft 左边框
  • clientTop 上边框

offset系列

  • offsetWidth = width+padding(左右)+border(左右)
  • offsetHeight = height+padding(上下)+border(上下)
  • 与偏移量相关 
    • offsetParent 参照物
    • offsetLeft 左偏移量
    • offsetTop 上偏移量

scroll系列(与溢出内容有关)

  • scrollWidth ≈ width(真实的宽度) + 左padding (约等于真实的宽度)
  • scrollHeight ≈ height(真实的高度)+ 上padding (约等于真实的高度)

为什么是约等于?各个浏览器的行高不同,相同浏览器设置overflow属性,值也不同

  • 跟滚动条相关的?(唯一两个可以设置数值,其他只能读取) 
    • scrollLeft 滚动条横向卷出的内容
    • scrollTop 纵向卷出的内容 
      最小值是0 最大值 = 真实高度(ele.scrollHeight) - 一屏的高度(ele.clientHeight) 
      超过最大值小于最小值都无法设置

获取一屏的高度和整个文档真实的高度

  • 一屏的高度:document.documentElement.clientHight || document.body.clientHight
  • 整个文档真实的高度:document.documentElement.scrollHight || document.body.scrollHight 
    若没有溢出的内容,一屏的和文档的高度是一样的

获取任意属性值

window.getComputedStyle(元素, null) 查询伪类元素 ‘before’不查写null 
ie7~ie8 odiv.currentStyle

获取内嵌式或外链式中的任意CSS属性值

  • window.getComputedStyle -ele.currentStyle

浏览器兼容性处理

  • 1.通过判断属性的方式 
    • window.getComputedStyle
    • "getComputedStyle" in window
var oDiv = document.getElementById( 'div1'); //ele表示当前操作的元素 attr表示CSS属性
function getCss(ele,attr) {
if( window.getComputedStyle){ //判断此方法是否能被window调用
return window.getComputedStyle(ele, null)[attr];
} else {
return ele.currentStyle[attr];
}
}
console.log(getCss(oDiv, 'fontSize'));
  • 2.检测数据类型方式 
    • typeof
function getCss(ele,attr) {
if( typeof getComputedStyle === 'function'){
return window.getComputedStyle(ele, null)[attr];
} else {
return ele.currentStyle[attr];
}
}
console.log(getCss(oDiv, 'fontSize'));
  • instanceof ary instanceof Array 可以检测出对象的细分类型
  • constructor 指向所属的类 ary.constructor (若原型重写,constructor会有问题) 
    • Object.prototype.toString.call(null) “[object Null]” 最精准检测数据类型方式 前面的是数据类型 后面的是所属类
  • 3.判断浏览器
var oDiv = document.getElementById( 'div1'); //ele表示当前操作的元素 attr表示CSS属性
function getCss(ele,attr) { //3.检测浏览器的方式
if( /msie [6-8]\.0/.test(navigator.userAgent)){
return ele.currentStyle[attr];
} else {
return window.getComputedStyle(ele, null)[attr];
}
}
console.log(getCss(oDiv, 'fontSize'));
  • navigator.userAgent.indexOf('MSIE 8.0') === -1 说明不是IE8浏览器

JS盒子模型

  • js中提供了与盒子模型相关的属性
  • css盒子模型属性:width height border padding margin

将这些属性分为很多系列 属性一共13个

client系列(跟溢出内容无关)

  • clientWidth = width + padding(左右)
  • clientHeight = height + padding(上下)
  • clientLeft 左边框
  • clientTop 上边框

offset系列

  • offsetWidth = width+padding(左右)+border(左右)
  • offsetHeight = height+padding(上下)+border(上下)
  • 与偏移量相关 
    • offsetParent 参照物
    • offsetLeft 左偏移量
    • offsetTop 上偏移量

scroll系列(与溢出内容有关)

  • scrollWidth ≈ width(真实的宽度) + 左padding (约等于真实的宽度)
  • scrollHeight ≈ height(真实的高度)+ 上padding (约等于真实的高度)

为什么是约等于?各个浏览器的行高不同,相同浏览器设置overflow属性,值也不同

  • 跟滚动条相关的?(唯一两个可以设置数值,其他只能读取) 
    • scrollLeft 滚动条横向卷出的内容
    • scrollTop 纵向卷出的内容 
      最小值是0 最大值 = 真实高度(ele.scrollHeight) - 一屏的高度(ele.clientHeight) 
      超过最大值小于最小值都无法设置

获取一屏的高度和整个文档真实的高度

  • 一屏的高度:document.documentElement.clientHight || document.body.clientHight
  • 整个文档真实的高度:document.documentElement.scrollHight || document.body.scrollHight 
    若没有溢出的内容,一屏的和文档的高度是一样的

获取任意属性值

window.getComputedStyle(元素, null) 查询伪类元素 ‘before’不查写null 
ie7~ie8 odiv.currentStyle

获取内嵌式或外链式中的任意CSS属性值

  • window.getComputedStyle -ele.currentStyle

浏览器兼容性处理

  • 1.通过判断属性的方式 
    • window.getComputedStyle
    • "getComputedStyle" in window
var oDiv = document.getElementById( 'div1'); //ele表示当前操作的元素 attr表示CSS属性
function getCss(ele,attr) {
if( window.getComputedStyle){ //判断此方法是否能被window调用
return window.getComputedStyle(ele, null)[attr];
} else {
return ele.currentStyle[attr];
}
}
console.log(getCss(oDiv, 'fontSize'));
  • 2.检测数据类型方式 
    • typeof
function getCss(ele,attr) {
if( typeof getComputedStyle === 'function'){
return window.getComputedStyle(ele, null)[attr];
} else {
return ele.currentStyle[attr];
}
}
console.log(getCss(oDiv, 'fontSize'));
  • instanceof ary instanceof Array 可以检测出对象的细分类型
  • constructor 指向所属的类 ary.constructor (若原型重写,constructor会有问题) 
    • Object.prototype.toString.call(null) “[object Null]” 最精准检测数据类型方式 前面的是数据类型 后面的是所属类
  • 3.判断浏览器
var oDiv = document.getElementById( 'div1'); //ele表示当前操作的元素 attr表示CSS属性
function getCss(ele,attr) { //3.检测浏览器的方式
if( /msie [6-8]\.0/.test(navigator.userAgent)){
return ele.currentStyle[attr];
} else {
return window.getComputedStyle(ele, null)[attr];
}
}
console.log(getCss(oDiv, 'fontSize'));
  • navigator.userAgent.indexOf('MSIE 8.0') === -1 说明不是IE8浏览器

转载于:https://www.cnblogs.com/Lia-633/p/9797135.html

相关文章:

  • 解决Eclipse报errors running builder ‘javascript validator’ on project
  • 测试代码覆盖率工具学习(Android Emma)
  • c语言学习三
  • 微信群里的这些文章,都是谣言!赶紧给爸妈看看
  • 如何实现android蓝牙开发 自动配对连接,并不弹出提示框
  • JFreeChart绘制XY折线图(工具类设计)
  • ORACLE数据库笔记之PL/SQL
  • ByteTCC 0.5.0-ALPHA1 发布,基于 TCC 的分布式事务管理器
  • 马哥-51CTO-Linux培训-0901-linux文件系统
  • 【译】Cloudera Manager(CDH)入门系列之四 (管理员控制台)
  • 程序猿常识--OJ系统和ACM测试考试大全
  • linux-命令行快捷方式使用
  • mac 关闭dashboard 开机更快
  • 队列queue
  • SEO优化:为什么要关注“网站抓取频率”?
  • css属性的继承、初识值、计算值、当前值、应用值
  • JavaScript函数式编程(一)
  • Netty源码解析1-Buffer
  • Redis字符串类型内部编码剖析
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Twitter赢在开放,三年创造奇迹
  • Vue 动态创建 component
  • Windows Containers 大冒险: 容器网络
  • windows下如何用phpstorm同步测试服务器
  • 从PHP迁移至Golang - 基础篇
  • 悄悄地说一个bug
  • 如何学习JavaEE,项目又该如何做?
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 跳前端坑前,先看看这个!!
  • 一道闭包题引发的思考
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 主流的CSS水平和垂直居中技术大全
  • ​queue --- 一个同步的队列类​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • ​水经微图Web1.5.0版即将上线
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • (03)光刻——半导体电路的绘制
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (二)PySpark3:SparkSQL编程
  • (二)学习JVM —— 垃圾回收机制
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .NET 5种线程安全集合
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [Codeforces1137D]Cooperative Game
  • [codevs 1296] 营业额统计
  • [C语言]——函数递归
  • [DEBUG] spring boot-如何处理链接中的空格等特殊字符