前端-019:网页特效归纳总结

180 阅读4分钟

1. offset 元素偏移量

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

  • 获得元素距离带有定位父元素的位置
  • 获得元素自身的大小(宽度高度)
  • 返回的数值都不带单位

offset 系列常用属性:

图片1.png

图片2.png

offset 与 style 区别:

offset

  • offset 可以得到任意样式表中的样式值
  • offset 系列获得的数值是没有单位的
  • offsetWidth 包含padding+border+width
  • offsetWidth 等属性是只读属性,只能获取不能赋值
  • 所以,我们想要获取元素大小位置,用offset更合适

style

  • style 只能得到行内样式表中的样式值
  • style.width 获得的是带有单位的字符串
  • style.width 获得不包含padding和border 的值
  • style.width 是可读写属性,可以获取也可以赋值
  • 所以,我们想要给元素更改值,则需要用style改变

2. client 元素可视区

client 翻译过来就是客户端,使用 client 系列的相关属性来获取元素可视区的相关信息。通过 client 系列的相关属性可以动态的得到该元素的边框大小、元素大小等

图片3.png

图片4.png

3. scroll 元素滚动

scroll 翻译过来就是滚动的,我们使用 scroll 系列的相关属性可以动态的得到该元素的大小、滚动距离等

图片5.png

图片6.png

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

注意:

  • 页面被卷去的头部:可以通过window.pageYOffset 获得 如果是被卷去的左侧 window.pageXOffset
  • 元素被卷去的头部是 element.scrollTop , 如果是页面被卷去的头部 则是 window.pageYOffset

总结:

图片7.png

主要用法

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

4. mouseenter 和mouseover的区别

  • 当鼠标移动到元素上时就会触发 mouseenter 事件
  • 类似 mouseover,它们两者之间的差别是
  • mouseover 鼠标经过自身盒子会触发,经过子盒子还会触发。mouseenter 只会经过自身盒子触发
  • 之所以这样,就是因为mouseenter不会冒泡
  • 跟mouseenter搭配 鼠标离开 mouseleave 同样不会冒泡

5. 移动端网页特效

5.1. 触屏事件

概述: 移动端浏览器兼容性较好,我们不需要考虑以前 JS 的兼容性问题,可以放心的使用原生 JS 书写效果,但是移动端也有自己独特的地方。比如触屏事件 touch(也称触摸事件),Android 和 IOS 都有

常见的触屏事件如下:

图片1.png

touch 对象代表一个触摸点。触摸点可能是一根手指,也可能是一根触摸笔。触屏事件可响应用户手指(或触控 笔)对屏幕或者触控板操作

触摸事件对象(TouchEvent): TouchEvent 是一类描述手指在触摸平面(触摸屏、触摸板等)的状态变化的事件。这类事件用于描述一个或多个触点,使开发者可以检测触点的移动,触点的增加和减少,等等

touchstart、touchmove、touchend 三个事件都会各自有事件对象

触摸事件对象重点我们看三个常见对象列表:

图片2(1).png

重点记住 targetTocuhes

移动端拖动元素:

  • touchstart、touchmove、touchend 可以实现拖动元素
  • 但是拖动元素需要当前手指的坐标值 我们可以使用 targetTouches[0] 里面的pageX 和 pageY
  • 移动端拖动的原理: 手指移动中,计算出手指移动的距离。然后用盒子原来的位置 + 手指移动的距离
  • 手指移动的距离: 手指滑动中的位置 减去 手指刚开始触摸的位置

拖动元素三步走:

  1. 触摸元素 touchstart: 获取手指初始坐标,同时获得盒子原来的位置
  2. 移动手指 touchmove: 计算手指的滑动距离,并且移动盒子
  3. 离开手指 touchend:

手指移动也会触发滚动屏幕所以这里要阻止默认的屏幕滚动 e.preventDefault();

click 延时解决方案:

移动端 click 事件会有 300ms 的延时,原因是移动端屏幕双击会缩放(double tap to zoom) 页面。

解决方案:

<meta name="viewport" content="user-scalable=no">
// 禁用缩放。 浏览器禁用默认的双击缩放行为并且去掉 300ms 的点击延迟
document.addEventListener('DOMContentLoaded',function () {
 /*等页面文档加载完成 不需要等所有的资源*/
 FastClick.attach(document.body);
 });
// 使用插件。 fastclick 插件解决 300ms 延迟