12 js07 window系列方法,脚本化CSS

滚动条移动距离、获取可视窗口属性、获取dom元素尺寸、滚动条系列方法、脚本化CSS

【封装函数,形成工具库tool.js,需要的时候导入即可;明白函数的使用方法:聚焦点为参数、返回值、谁调用】

1、滚动条移动距离:[即使ie不兼容的方法chrome浏览器大多也可以测试(chrome高版本)]

(1).滚动条在x轴、y轴移动的距离:window.pageXOffset / window.pageYOffset;

------>>>IE8及IE8以下不兼容,其支持以下方法,但IE8以下的版本有的支持document.body.scrollLeft;//x轴document.body.scrollTop;//y轴; 有的支持document.documentElement.scrollLeft/Top;测试发现,其中一个有返回值,则另一个方法返回值为0,处理兼容性:同时使用两个方法,将所得值相加;

封装函数:(window对象上的属性/方法是全局的,window可以省略,开发中最好不要省略)

2、获取窗口属性:

(1).可视区窗口:html文档展示出的视图,不包括浏览器的其他部分,例如:控制台、地址栏、滚动条等,改变浏览器的大小会改变可视区的大小;

(2).获取窗口属性宽/高:window.innerWidth; / window.innerHeight; (得到的是像素点,分辨率的高低也是像素点,分辨率高:像素点多而且小;屏幕大不一定像素点就多,PC上1440,可能iphone也是1440)

------>>>以上方法IE8及IE8以下不兼容,需要进行兼容处理,涉及另一个知识:浏览器模式;

(3).浏览器模式:每个浏览器都有两个模式:标准模式、怪异模式(也称混杂模式),所谓的怪异模式就是浏览器向后兼容,兼容以前浏览器的语法,每个浏览器怪异模式支持的区间不同,chrome浏览器支持区间是5个版本,IE6浏览器支持的是IE5和IE4;【怪异模式是解决目前浏览器版本去兼容之前版本的语法,不至于旧版本开发的项目随着版本迭代必须重构;实际情况中,同一款浏览器不同版本之间的差距也不是“天壤之别”,就是有那么几个问题而已,目前聚焦到“IE浏览器”,ie9以上都兼容,ie9以下有很多兼容问题,ie9部分兼容(尴尬版本)】

[1].浏览器如何变为怪异模式:操作很简单,只需要把html代码的顶行代码<!DOCTYPE html>去掉或者写错即可;[<!DOCTYPE html> 文档类型 大小写无所谓 DTD; emmet语法:html:5]

[2].如何判断目前浏览器所处模式?document.compatMode; 该方法标准模式返回“CSS1Compat”,怪异模式下返回"BackCompat"

IE8及IE8以下标准模式: document.documentElement.clientWidth/clientHeight; 怪异模式: document.body.clientWidth/clientHeight;

封装函数:

3、获取dom元素尺寸:【通过DOM系列方法获取到的html标签才能称之为dom元素/对象,日常说法有些不严格】【注意:获取到的都是视觉上的宽高(content+padding+border)】

(1).方法1:ele.getBoundingClientRect;//每个dom元素上都有该方法,返回值是对象,此对象包含很多东西,通过该方法可以获取width/height/top/left/right/bottom;(top/left:左上点位置;right/bottom:右下点位置);【获取到的dom元素宽高不是“实时的”,所以不使用此方法了解即可】

---->>>老版本IE浏览器没有此方法,解决方法:width:right-left; height:top-bottom;

封装函数:

(2).方法2:dom.offsetWidth/dom.offsetHeight; 获取的宽高是“视觉上的宽高”;(日常开发中使用)

补充:dom.offsetLeft/dom.offsetTop; dom元素距离左侧 / 上侧的距离,相对于有定位的父元素而言,若是没有定位元素的父级,则相对于body(文档)进行定位;通过dom.offsetParent -->>返回值:body/dom元素; 判断是否有定位元素的父级,没有则返回body;(body的offsetParent为null)

封装函数:获取元素相对于文档的坐标;

4、滚动条滚动到相应的位置:

有三个方法:window.scroll(); window.scrollTo();window.scrollBy();这三个方法都有两个参数(x,y),  前两个方法作用相同,滚动到相应的位置;而window.scrollBy();是参考上次的位置进行滚动;

例:实现简单阅读器:

部分代码

5、脚本化css:[操作css]

(1).ele.style;// dom元素都有该方法, 获取到的是类数组,其内包含了该dom元素所有的css样式(默认值),类数组也是对象,所以ele.style.width; / ele.style[prop];

【间接改变css样式,其是脚本化css中唯一的一个“可读可写”,其他方法都“只读”】

【其改变的只能是“行内样式”, ele.style="";  值是字符串,兼容性很好】

【规则:1.属性为保留字、关键字属性,使用时在前面加入css前缀,div.style.cssFloat= ""; 2.复合属性必须拆解:border:1px solid red;  div.style.borderWidth=;  3..不支持“-”,js中但凡出现的变为“小驼峰”,div.style.borderRadius=''';】

------>>>>>ele.style局限性便是其只能“读写”行内样式;

(2).计算样式:window.getComputedStyle(ele,null);//返回值是类数组,包含了该dom元素所有的css样式,通过其可获取元素的属性值;window.getComputedStyle(div,null).width; 

【规则:1.只读;2.计算样式得到的是最终展示的样式(优先级权重最高的样式);3.获得的值都是“绝对值”(绝对单位),不是相对单位,例如width:10em; 会转化为具体的像素值px返回,获取的颜色值为rgb();】

补充: window.getCommputedStyle(ele,null);应用场景很多,第二个参数为null即可,有一类特殊应用场景,计算样式可获取元素上的伪元素的一些样式:window.getComputedStyle(div,"after").width 第二个参数可以写伪元素,这样便可以获取伪元素的属性值了;

------->>IE8及IE8以下不兼容,IE使用ele.currentStyle;//返回值为类数组,包含该dom元素所有的css样式,ele.currentStyle.width; ele.currentStyle["width"]; 

【规则:1.只读;2.计算样式得到的是最终展示的样式(优先级权重最高的样式);3.其返回的值不是转换的“绝对值”,而是写什么值就返回什么值】

封装函数:其代表变量,必须使用[prop];//对象获取属性第二种方法的优势;

补充:编程思想:后期获取到dom元素后间接操作css样式,往往都是提前把状态(样式)写好了,然后div.className="";(setAttribut();),等,而不是每个样式都div.style.width="";去操作,div.style是个对象,每次.获取属性都需要遍历操作很浪费性能;但是div.style应用场景也很广泛,例如div物块的运动,总不能把所有的状态都提前写好,至于计算样式其也有很广泛的应用场景;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,347评论 1 45
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,709评论 1 92
  • 我们首先要明白,我们给页面添加效果用到的js到底是什么?js其实包含三部分:dom 文档对象模型 bom 浏览...
    一直以来都很好阅读 791评论 0 0
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,024评论 0 3
  • 闺蜜晚上发来消息说很久之前的一个女同学,生了孩子但是两口子没有领结婚证,最近两人都在闹矛盾,反正这个女同学就是各种...
    刘晓月阅读 324评论 0 1