一、元素偏移量 offset 系列
(一)offset 概述
1、offset 翻译过来就是偏移量,我们使用 offset 系列相关属性可以动态的得到该元素的位置(偏移)、大小等。
(1)获得元素距离带有定位父元素的位置;
(2)获得元素自身的大小(宽度高度);
(3)注意:返回的数值都不带单位
2、offset 系列常用属性:
offset系列属性 | 作用 |
element.offsetParent | 返回作为该元素带有定位的父级元素 如果父级都没有定位则返回body |
element.offsetTop | 返回元素相对带有定位父元素上方的偏移 |
element.offsetLeft | 返回元素相对带有定位父元素左边框的偏移 |
element.offsetWidth | 返回自身包括padding、边框、内容区的宽度,返回数值不带单位 |
element.offsetHeight | 返回自身包括padding、边框、内容区的高度,返回数值不带单位 |
(二)offset 与 style 区别
1、offset
(1)offset 可以得到任意样式表中的样式值
(2)offset 系列获得的数值是没有单位的
(3)offsetWidth 包含padding + border + width
(4)offsetWidth 等属性是只读属性,只能获取不能赋值
(5)所以,我们想要获取元素大小位置,用offset更合适
2、style
(1)style 只能得到行内样式表中的样式值
(2)style.width 获得的是带有单位的字符串
(3)style.width 获得不包含padding 和 border 的值
(4)style.width 是可读写属性,可以获取也可以赋值
(5)所以,我们想要给元素更改值,用style更合适
二、元素可视区 client 系列
(一)
1、client 翻译过来就是客户端,我们使用 client 系列的相关属性来获取元素可视区的相关信息。通过 client 系列的相关属性可以动态的得到元素的边框大小、元素大小等。
2、
client系列属性 | 作用 |
element.clientTop | 返回元素上边框的大小 |
element.clientLeft | 返回元素左边框的大小 |
element.clientWidth | 返回自身包括padding、内容区的宽度,不含边框,返回数值不带单位 |
element.clientHeight | 返回自身包括padding、内容区的高度,不含边框,返回数值不带单位 |
(二)立即执行函数
1、语法格式:
(function() {})() 或者 (function(){}())
2、主要作用:创建一个独立的作用域,避免了命名冲突的问题
(三)
1、下面三种情况都会触发 load 事件:
(1)a 标签的超链接
(2)F5或者刷新按钮(强制刷新)
(3)前进后退按钮
2、但是火狐中,有个特点,有个“往返缓存”,这个缓存中不仅保存着页面数据,还保存了DOM和JavaScript的状态,实际上是将整个页面都保存在内存里。
所以此时后退按钮不能刷新页面。
此时可以使用 pageshow 事件来触发。这个事件在页面显示时触发,无论页面是否来自缓存。在页面加载页面中,pageshow会在load事件触发后触发;根据事件对象中的persisted来判断是否是缓存中的页面触发的pageshow事件,注意这个事件给window添加。
三、元素滚动 scroll 系列
(一)元素 scroll 系列属性
1、scroll 翻译过来就是滚动的,我们使用 scroll 系列的相关属性可以动态的得到该元素的大小、滚动距离等。
scroll系列属性 | 作用 |
element.scrollTop | 返回被卷去的上侧距离,返回数值不带单位 |
element.scrollLeft | 返回被卷去的左侧距离,返回数值不带单位 |
element.scrollWidth | 返回自身实际的宽度,不含边框,返回数值不带单位 |
element.scrollHeight | 返回自身实际的高度,不含边框,返回数值不带单位 |
(二)页面被卷去的头部兼容性解决方案
1、需要注意的是,页面被卷去的头部,有兼容性问题,因此被卷去的头部通常有如下几种写法:
(1)声明了 DTD,使用 document.documentElement.scrollTop
(2)未声明 DTD,使用 document.body.scrollTop
(3)新方法window.pageYOffset 和 window.pageXOffset,IE9开始支持
(三)三大系列总结
1、
三大系列大小对比 | 作用 |
element.offsetWidth | 返回自身包括padding、边框、内容区的宽度,返回数值不带单位 |
element.clientWidth | 返回自身包括padding、内容区的宽度,不含边框,返回数值不带单位 |
element.scrollWidth | 返回自身实际的宽度,不含边框,返回数值不带单位 |
2、它们的主要用法:
(1)offset系列经常用于获取元素位置:offsetLeft、offsetTop
(2)client经常用于获取元素大小:clientWidth、clientHeight
(3)scroll经常用于获取滚动距离:scrollTop、scrollLeft
(4)注意页面滚动的距离通过 window.pageXOffset 获得
(四)mouseenter 和 mouseover的区别
mouseenter 鼠标事件
1、当鼠标移动到元素上时就会触发 mouseenter 事件
2、类似 mouseover ,它们两者之间的差别是:
mouseover 鼠标经过自身盒子会触发,经过子盒子还会触发。mouseenter 只会经过自身盒子触发
3、之所以这样,就是因为mouseenter不会冒泡
4、跟mouseenter搭配鼠标离开 mouseleave 同样不会冒泡
四、动画函数封装
(一)动画实现原理
1、核心原理:通过定时器 setInterval() 不断移动盒子位置
2、实现步骤:
(1)获得盒子当前位置
(2)让盒子在当前位置加上1个移动距离
(3)利用定时器不断重复这个操作
(4)加一个结束定时器的条件
(5)注意此元素需要加定位,才能使用element.style.left
(二)动画函数给不同元素记录不同定时器
1、如果多个函数都使用这个动画函数,每次都要var 声明定时器。我们可以给不同的元素使用不同的定时器(自己专门用自己的定时器)
2、核心原理:利用 JS 是一门动态语言,可以很方便的给当前对象添加属性
(三)缓动效果原理
1、缓动动画就是让元素运动速度有所变化,最常见的是让速度慢慢停下来
2、思路:
(1)让盒子每次移动的距离慢慢变小,速度就会慢慢落下来
(2)核心算法:(目标值-现在的位置)/ 10 作为每次移动的距离步长
(3)停止的条件是:让当前盒子位置等于目标位置就停止定时器
(四)动画函数多个目标值之间移动
可以让动画函数从800移动到500.
当我们点击按钮时候,判断步长是正值还是负值。
1、如果是正值,则步长往大了取整
2、如果是负值,则步长向小了取整
(五)动画函数封装到单独JS文件里面
因为以后经常使用这个动画函数,可以单独封装到一个JS文件里面,使用的时候引用这个JS文件即可。
1、单独新建一个JS文件
五、常见网页特效案例
(一)节流阀
1、防止轮播图按钮连续点击造成播放过快
2、节流阀目的:当上一个函数动画内容执行完毕,再去执行下一个函数动画,让事件无法连续触发
3、核心实现思路:利用回调函数,添加一个变量来控制,锁住函数和解锁函数
4、开始设置一个变量 var flag = true;
if(flag) {flag = false;do something} 关闭水龙头
利用回调函数动画执行完毕,flag = true 打开水龙头
标签:返回,特效,网页,动画,元素,element,PC,offset,边框 From: https://www.cnblogs.com/hunanxyz/p/16662843.html