10-WebAPIs⑤(offset 系列、client 系列、scroll 系列)

1. 元素偏移量 offset 系列

1.1 offset 概述

offset 翻译过来就是偏移量, 我们使用 offset系列相关属性可以动态的得到该元素的位置(偏移)、大小等。

  1. 获得元素距离带有定位父元素的位置
  2. 获得元素自身的大小(宽度高度)
  3. 注意:返回的数值都不带单位

在这里插入图片描述

offset系列属性作用
element.offsetParent返回作为该元素带有定位的父级元素 如果父级都没有定位则返回body
element.offsetTop返回元素相对带有定位父元素上方的偏移
element.offsetLeft返回元素相对带有定位父元素左方的偏移
element.offsetWidth返回自身包括padding、border、内容区的宽度
element.offsetHeight返回自身包括padding、border、内容区的高度

1.2 offset 与 style 区别

offsetstyle
offset 可以得到任意样式表中的样式值style 只能得到行内样式表中的样式值
offset 系列获得的数值是没有单位的style.width 获得的是带有单位的字符串
offsetWidth 包含padding+border+widthstyle.width 获得不包含padding和border 的值
offsetWidth 等属性是只读属性,只能获取不能赋值style.width 是可读写属性,可以获取也可以赋值
获取元素大小位置,用offset更合适给元素更改值,则需要用style改变

2. 元素可视区 client 系列

2.1 client概述

client 翻译过来就是客户端,我们使用 client 系列的相关属性来获取元素可视区的相关信息。通过 client
系列的相关属性可以动态的得到该元素的边框大小、元素大小等。
在这里插入图片描述

client系列属性作用
element.clientTop返回元素上边框的大小
element.clientLeft返回元素左边框的大小
element.clientWidth返回自身包括padding、内容区的宽度,不含边框,返回数值不带单位
element.clientHeight返回自身包括padding、内容区的高度,不含边框,返回数值不带单位

2.2 淘宝 flexible.js 源码分析

立即执行函数 (function(){})() 或者 (function(){}()) 创建一个独立的作用域。 避免了命名冲突问题

(function flexible(window, document) {
    // 获取的html 的根元素
    var docEl = document.documentElement
        // dpr 物理像素比
    var dpr = window.devicePixelRatio || 1

    // adjust body font size  设置我们body 的字体大小
    function setBodyFontSize() {
        // 如果页面中有body 这个元素 就设置body的字体大小
        if (document.body) {
            document.body.style.fontSize = (12 * dpr) + 'px'
        } else {
            // 如果页面中没有body 这个元素,则等着 我们页面主要的DOM元素加载完毕再去设置body的字体大小
            document.addEventListener('DOMContentLoaded', setBodyFontSize)
        }
    }
    setBodyFontSize();

    // set 1rem = viewWidth / 10    设置我们html 元素的文字大小
    function setRemUnit() {
        var rem = docEl.clientWidth / 10
        docEl.style.fontSize = rem + 'px'
    }

    setRemUnit()

    // reset rem unit on page resize  当我们页面尺寸大小发生变化的时候,要重新设置下rem 的大小
    window.addEventListener('resize', setRemUnit)
        // pageshow 是我们重新加载页面触发的事件
    window.addEventListener('pageshow', function(e) {
        // e.persisted 返回的是true 就是说如果这个页面是从缓存取过来的页面,也需要从新计算一下rem 的大小
        if (e.persisted) {
            setRemUnit()
        }
    })

    // detect 0.5px supports  有些移动端的浏览器不支持0.5像素的写法
    if (dpr >= 2) {
        var fakeBody = document.createElement('body')
        var testElement = document.createElement('div')
        testElement.style.border = '.5px solid transparent'
        fakeBody.appendChild(testElement)
        docEl.appendChild(fakeBody)
        if (testElement.offsetHeight === 1) {
            docEl.classList.add('hairlines')
        }
        docEl.removeChild(fakeBody)
    }
}(window, document))

下面三种情况都会刷新页面都会触发 load 事件。
1.a标签的超链接
2.F5或者刷新按钮(强制刷新)
3.前进后退按钮

但是 火狐中,有个特点,有个“往返缓存”,这个缓存中不仅保存着页面数据,还保存了DOM和JavaScript的状态;实际上是将整个页面都保存在了内存里。所以此时后退按钮不能刷新页面。可以使用 pageshow事件来触发。这个事件在页面显示时触发,无论页面是否来自缓存。在重新加载页面中,pageshow会在load事件触发后触发;根据事件对象中的persisted来判断是否是缓存中的页面触发的pageshow事件(注意这个事件给window添加。)

3. 元素滚动 scroll 系列

3.1 scroll 概述

scroll 翻译过来就是滚动的,我们使用 scroll 系列的相关属性可以动态的得到该元素的大小、滚动距离等。
在这里插入图片描述

scroll系列属性作用
element.scrollTop返回被卷去的上侧距离,返回数值不带单位
element.scrollLeft返回被卷去的左侧距离,返回数值不带单位
element.scrollWidth返回自身实际的宽度,不含边框,返回数值不带单位
element.scrollHeight返回自身实际的高度,不含边框,返回数值不带单位

3.2 页面被卷去的头部

如果浏览器的高(或宽)度不足以显示整个页面时,会自动出现滚动条。当滚动条向下滚动时,页面上面被隐藏掉的高度,我们就称为页面被卷去的头部。
滚动条在滚动时会触发 onscroll事件

页面被卷去的头部:可以通过window.pageYOffset获得 如果是被卷去的左侧window.pageXOffset

3.3 页面被卷去的头部兼容性解决方案

需要注意的是,页面被卷去的头部,有兼容性问题,因此被卷去的头部通常有如下几种写法:

  1. 声明了 DTD,使用 document.documentElement.scrollTop
  2. 未声明 DTD,使用 document.body.scrollTop
  3. 新方法 window.pageYOffset和 window.pageXOffset,IE9 开始支持
//使用的时候  getScroll().left
function getScroll() {
    return {
      left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft||0,
      top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0
    };
 } 

4. 三大系列总结

三大系列大小对比作用
element.offsetWidth返回自身包括padding、border、内容区的宽度,返回数值不带单位
element.clientWidth返回自身包括padding、内容区的宽度,不含边框,返回数值不带单位
element.scrollWidth返回自身实际的宽度,不含边框,返回数值不带单位

主要用法:

  1. offset经常用于获得元素位置 offsetLeft offsetTop
  2. client经常用于获取元素大小 clientWidth clientHeight
  3. scroll 经常用于获取滚动距离 scrollTop scrollLeft
  4. 页面滚动的距离通过 window.pageXOffset 获得

5. mouseenter 和mouseover的区别

  • mouseover 鼠标经过自身盒子会触发,经过子盒子还会触发(会冒泡)。
  • mouseenter 只会经过自身盒子触发(不会冒泡),跟mouseenter搭配鼠标离开 mouseleave 同样不会冒泡
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计一个webapis学生报名系统的代码步骤如下: 1. 数据库设计:首先确定需要存储的数据,例如学生的基本信息,课程信息等。根据需求设计数据库表结构,并创建相应的表。 2. 后端接口设计:根据系统需求,设计后端接口,包括学生信息的录入、查询、修改和删除等功能。使用合适的编程语言,如Java、Python等,实现这些接口。 3. 前端界面设计:设计一个用户友好的前端界面,包括学生报名表单和查询功能。使用HTML、CSS、JavaScript等技术实现界面的布局和交互,确保用户能够方便地输入和查询信息。 4. 前后端交互:通过AJAX或其他技术,实现前后端的数据交互。前端向后端发送请求,后端处理请求并返回相应的数据。 5. 学生信息录入:在前端界面设计好的报名表单中,用户输入个人信息,通过调用后端接口将数据传递到后台。后台接收并验证输入的数据,并将学生信息存储到数据库中。 6. 学生信息查询:在前端界面设计好的查询功能中,用户输入需要查询的条件,通过调用后端接口将查询条件传递到后台。后台根据查询条件在数据库中查找匹配的学生信息,并将查询结果返回给前端。 7. 学生信息修改和删除:在前端界面设计好的修改和删除功能中,用户选择需要修改或删除的学生信息,并通过调用后端接口将相应的操作请求传递到后台。后台根据请求进行相应的操作,更新或删除数据库中的对应数据。 8. 错误处理和数据校验:在整个系统设计过程中,需要考虑错误处理和数据校验。在后端接口中,对输入的数据进行合法性检查,确保输入的数据符合要求。在前端界面中,对用户的输入进行格式验证,及时反馈给用户。 9. 安全性保障:为了保障系统的安全性,可以采用身份认证、权限控制等机制,确保只有授权的用户能够进行报名和查询等操作。 10. 测试和部署:在完成系统开发后,进行系统的测试和调试。确保系统的正确性和稳定性。最后将系统部署到服务器上,供用户使用。 以上是一个简单的webapis学生报名系统代码步骤,具体实现还需要根据具体需求进行调整和完善。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值