JavaScript学习笔记23

一、DOM/BOM基本操作

这一部分都是实战用的,笔试面试一般不考,
脚本化就是操作的意思

1、查看滚动条的滚动距离

1 window.pageXOffset横向/pageYOffset纵向滚动条

IE8及IE8以下不兼容(IE9部分兼容)IE9以上能用

在这里插入图片描述


例:滚动条往下滚动了400px,求浏览器最顶端到滚动条滚动的位置的像素

答案 400px+首屏像素(此时这个屏幕的底端距离整个网页的最顶端也是这样算)



2 IE8 及 IE8 以下的使用方法

1)document.body.scrollLeft/scrollTop——求横向距离和纵向距离
2)document. documentElement.scrollLeft/scrollTop
上面两个兼容性比较混乱,其中一个有值,另外一个的值一定是 0。这两个最好的用法是取两个值相加,因为不可能存在两个同时有值
如 document.body.scrollLeft + document. documentElement.scrollLeft



3 封装兼容性方法(哪个浏览器都好用),求滚动轮滚动距离getScrollOffset()

例:Offset是尺寸的意思(可以封装一个代码库,放在js文件里面)

<script>
        function getScrollOffset() {
            if (window.pageXOffset) {
                return {
                    x: window.pageXOffset,
                    y: window.pageYOffset
                }
            } else {
                return {
                    x: document.body.scrollLeft + document.documentElement.scrollLeft,
                    y: document.body.scrollTop + document.documentElement.scrollTop
                }
            }
        }
    </script>


2、查看视口的尺寸

可视区窗口就是编写的html文档可以看到的部分,不含菜单栏、地址栏、控制台

1、window.innerWidth/innerHeight可视区域的宽高(加上滚动条宽度/高度)

IE8以及IE8以下不兼容
w3c标准方法


例:求可视区窗口的尺寸

<script>
        function getViewportOffset() {
            if (window.innerWidth) {
                return {
                    w: window.innerWidth,
                    h: window.innerHeight
                }
            } else {
                if (document.compatMode == "BackCompat") {
                    return {
                        w: document.body.clientWidth,
                        h: document.body.clientHeight
                    }
                } else {
                    return {
                        w: document.documentElement.clientWidth,
                        h: document.documentElement.clientHeight
                    }
                }
            }
        }
    </script>

如果窗口放大页面了,页面的尺寸也会拉伸了,尺寸就会变小

注意渲染模式

  1. 标准模式:是html5的(在emmet插件下html:5就出来了)
  2. 怪异/混杂模式:试图去兼容之前的语法,去掉这一行即可开启(向后兼容)

2、document.documentElement.clientWidth/clientHeight

标准模式下,任意浏览器都兼容
client是客户端的意思

3、document.body.clientWidth/clientHeight

适用于怪异模式下的浏览器

4、封装兼容性方法、返回浏览器视口尺寸getViewportOffset()

例:document.compatMode是用于判断是怪异模式还是标准模式的

在这里插入图片描述

在这里插入图片描述



封装查看可视窗口的兼容性方法

<script>
        function getViewportOffset() {
            if (window.innerWidth) {
                return {
                    w: window.innerWidth,
                    h: window.innerHeight
                }
            } else {
                if (document.compatMode == "BackCompat") {
                    return {
                        w: document.body.clientWidth,
                        h: document.body.clientHeight
                    }
                } else {
                    return {
                        w: document.documentElement.clientWidth,
                        h: document.documentElement.clientHeight
                    }
                }
            }
        }
    </script>

在这里插入图片描述
在这里插入图片描述

3、查看元素的几何尺寸

1、domEle.getBoundingClinetRect();

//这是es5.0的方法,但是只用了解

<div style="width: 100px;height: 100px;background-color: red;position: absolute;left: 100px;top: 100px;"></div>
    <script>
        var div = document.getElementsByTagName("div")[0];
    </script>

在这里插入图片描述
求的是四个边和窗口之间的像素距离,right是右边离document的边有200px,也可以理解成求的是左上点和右下点的位置

2、兼容性很好
3、该方法返回一个对象,对象里面有left,top,right,bottom等属性。left和top代表该元素左上角的X和Y坐标,right和botton代表元素右下角的X和Y坐标
4、height和width属性老版本IE并未实现

在老版本的ie里面,利用右侧边减左侧面解决

5、返回的结果并不是“实时的”
<div style="width: 100px;height: 100px;background-color: red;position: absolute;left: 100px;top: 100px;"></div>
    <script>
        var div = document.getElementsByTagName("div")[0];
        var box = div.getBoundingClientRect();
    </script>

在这里插入图片描述

在这里插入图片描述

4、查看元素的尺寸

dom.offsetWidth,dom.offsetHeight
求的值是包括padding的

例:我们求的是实际内容区的宽高,还是长的看起来的宽高(视觉尺寸)?

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

dom.offsetWidth和domELe.getBoundingClientRect();出现的值是一样的,求的值都是padding+content(视觉尺寸),可以被代替.上面是间接的求这个div的宽高

5、查看元素的位置

1、dom.offsetLeft,dom.offsetTop

对于无定位父级的元素,返回相对文档的坐标
对于有定位父级的元素,返回相对于最近的有定位的父级的坐标。(无论是left还是margin-left等都是距离)

例:offsetLeft忽略自身是不是定位元素,求出来的是这个元素距离自己有定位的父级元素的距离,不管距离是margin生成的还是定位生成或者是其他方法(圆形,五角星都是这样)

<div style="width: 300px;height: 300px;border: 2px solid black;position: relative;left: 100px;top: 100px;">
        <div class="demo" style="width: 100px;height: 100px;background-color: red;position: absolute;left: 100px;top: 100px;"></div>
    </div>
    <script>
        var div = document.getElementsByClassName("demo")[0];
    </script>

在这里插入图片描述

在这里插入图片描述



position:static;是 position 是默认值,是不定位的写法,是静态的意思
下面这种情况是 margin 塌陷了(因为加了 border 又解决了塌陷的情况)

<div style="width: 300px;height: 300px;border: 2px solid black;margin-left: 100px;margin-top: 100px;">
        <div class="demo" style="width: 100px;height: 100px;background-color: red;margin-left: 100px;margin-top: 100px;"></div>
    </div>
    <script>
        var div = document.getElementsByClassName("demo")[0];
    </script>

在这里插入图片描述

body 有个默认的 margin:8px;存在,横向的,是相加
body 有个默认的 margin:8px;存在,纵向的 body 的 margin 和外面的 div 的 margin重叠了,实现了 margin 塌陷



2、dom.offsetParent

返回最近的有定位的父级,如无,返回body,body.offsetParent返回null

这个方法能求有定位的父级

例:沿用上面的例子,在控制台上面操作

在这里插入图片描述

例:加上个relative定位

    <div style="width: 300px;height: 300px;border: 2px solid black;margin-left: 100px;margin-top: 100px;position: relative;">
        <div class="demo" style="width: 100px;height: 100px;background-color: red;margin-left: 100px;margin-top: 100px;position: absolute;"></div>
    </div>
    <script>
        var div = document.getElementsByClassName("demo")[0];
    </script>

在这里插入图片描述



作业:求元素相对于文档的坐标,以getElementPosition()命名

思路:先看有没有有定位的父级,如果有,先求他与有定位的父级的距离,然后把视角换到他有定位的父级上,看他这个有定位的父级上还有没有有定位的父级,一段一段的加,一直加到最后,是一个循环递归的过程

六、让滚动条滚动

1、window上有三个方法scroll(),scrollTo()、两个功能一样,scroll();累加滚动距离

scroll(x,y),scrollTo(x,y)功能是一样的,里面能填两个参数
scroll(x轴滚动条的距离,y轴滚动条的距离),里面的xy可以填负数
scrollBy(x,y);是累加滚动距离,填负数就往上滚动

2、三个方法功能类似,用法都是将x,y坐标传入。即实现让滚动轮滚动到当前位置
3、区别:scrollBy()会在之前的数据基础之上做累加

例子:
利用scrollBy()快速阅读的功能

scroll会滚到当前距离(某个固定的顶)
不是累加使用,除非移动了滚动条的位置,才会重新计算距离


scrollBy();是累加滚动距离,填负数就往上滚动
scrollBy(0,10);是向下滚动 10 个距离
scrollBy(0,-10);是向上滚动 10 个距离

作业:点完收起,页面回到点展开时候的位置

在这里插入图片描述
在这里插入图片描述

思路:求滚动条的位置,记录点击展开时候的位置,点收起回到位置,记录是查看getScrollOffset()封装方法,回去是 window.scroll,在执行



例做个自动翻页的阅读(当点击 start 就自动阅读)

在这里插入图片描述
在这里插入图片描述

上面有个问题:多次点击 start 就会加速,并且停不下来了,按 stop 就只能停止一个加速,并不能使他停止



下面的例子是让多次点击 star 不能加速
所以加个锁 key,stop 以后再把锁打开

在这里插入图片描述



对比上一个增加了一个调速的按钮
增加一个 num 变量,通过调整变量来调速
注意不能通过控制 timer来调整速度
也不能通过 100 来调速

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值