JavaScript - 7

一、PC端网页特效

一、元素偏移量offset系列

1. 概述

使用其相关属性可以动态的得到该元素的位置偏移、大小等(包含padding+border+width)

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

常用属性:

element.offsetParent返回作为该元素带有定位的父级元素 若父级元素都无定位则返回body
element.offsetTop返回元素相对带有定位父元素上方的偏移(距离)
element.offsetLeft返回元素相对带有定位父元素左边框的偏移
element.offsetWidth返回自身包括padding、边框、内容区的宽度(相加),返回的数值都不带单位
element.offsetHeight返回自身包括padding、边框、内容区的宽度,返回的数值都不带单位

2. offset与style区别

!!!仿京东放大镜效果案例记得写一遍!!1

二、元素可视区client系列

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

element.clientTop返回元素上边框的大小
element.clientLeft返回元素左边框的大小
element.clientWidth返回自身包括padding+内容区的宽度+不含边框,返回数值不带单位
element.clientHeight返回自身包括padding+内容区的宽度+不含边框,返回数值不带单位

立即执行函数:不需要调用立马能够自己执行的函数  (function() {})()  或者 (function(){}())

主要作用: 创建一个独立的作用域。 避免了命名冲突问题 

!!!淘宝 flexible.js 源码分析!!!

三、元素滚动scroll系列

element.scrollTop返回被卷上去的上侧距离,返回数值不带单位 超出去的
element.scrollLeft返回被卷去的左侧距离,返回数值不带单位
element.scrollWidth返回自身实际的宽度,不含边框,返回数值不带单位
element.scrollHeight返回自身实际的高度,不含边框,返回数值不带单位

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

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

  • 声明了 DTD,使用 document.documentElement.scrollTop
  • 未声明 DTD,使用  document.body.scrollTop
  • 新方法 window.pageYOffset 和 window.pageXOffset,IE9 开始支持

总结

  •  offset系列经常用语获得元素位置 offsetTOP、offsetLeft
  • client经常用语获取元素大小 clientWidth、clientHeight
  • scroll经常用语获取滚动距离 scrollTop、scrollLeft
  • 注意页面滚动的距离通过window.pageXOffset获得

!!!经典面试题!!!

mouseenter与mouseover的区别

mouseover鼠标经过自身盒子会触发,经过子盒子还会触发

mouseenter只有经过自身盒子才会触发

因为mouseenter不会冒泡,同样他当mouseleave鼠标离开也不会冒泡

四、动画函数封装

.html实例

1. 动画实现原理

核心原理:通过定时器 setInterval() 不断移动盒子位置。

  • 获得盒子当前位置 
  • 让盒子在当前位置加上1个移动距离 
  • 利用定时器不断重复这个操作 
  • 加一个结束定时器的条件 
  • 注意此元素需要添加定位,才能使用element.style.left

2. 动画函数简单封装

函数需要传递2个参数,动画对象和移动到的距离。

3. 动画函数给不同元素记录不同定时器

如果多个元素都使用这个动画函数,每次都要var 声明定时器。我们可以给不同的元素使用不同的定时器(自己专门用自己的定时器)。 核心原理:利用 JS 是一门动态语言,可以很方便的给当前对象添加属性。

4. 缓动效果原理

  • 核心算法: (目标值 - 现在的位置 )   /   10    做为每次移动的距离 步长
  • 停止的条件是: 让当前盒子位置等于目标位置就停止定时器  
  • 注意步长值需要取整  

5. 动画函数多个目标值之间移动 

点击按钮时候,判断步长是正值还是负值

  • 如果是正值,则步长 往大了取整 Math.ceil
  • 如果是负值,则步长 向小了取整Math.floor

6. 动画函数添加回调函数

回调函数原理:函数可以作为一个参数。将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数,这个过程就叫做回调。

回调函数写的位置:定时器结束的位置。

7. 动画函数封装到单独JS文件里面

五、常见网页特效案例

.html实例

节流阀P328

二、移动端网页特效

一、触屏事件

1. 触屏事件touch

touchstart手指触摸到一个DOM元素时触发
touchmove手指在一个DOM 元素上滑动时触发
touchend手指从一个DOM元素上移开是触发

2. 触摸事件对象(TouchEvent)

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

touches正在触摸屏幕的所有手指的一个列表
targetTouches正在触摸当前DOM元素上的手指的一个列表
changedTouches手指状态发生改变的列表,从无到有,or从有到无变化
  • e.targetTouches[0]可以得到正在触摸DOM元素的第一个手指的相关信息 例如手指的坐标

3. 移动端拖动元素

  • 拖动元素需要当前手指的坐标值 我们可以使用  targetTouches[0] 里面的pageX 和 pageY
  • 原理:计算出手指移动的距离,用盒子原来的位置+手指移动距离
  • 手指移动距离:手指滑动中的位置 - 手指刚开始触摸的位置
  • 触摸元素 touchstart:  获取手指初始坐标,同时获得盒子原来的位置
  • 移动手指 touchmove:  计算手指的滑动距离,并且移动盒子
  • 离开手指 touchend:
  • 注意: 手指移动也会触发滚动屏幕所以这里要阻止默认的屏幕滚动 e.preventDefault();

二、常见特效

1. classList属性

返回元素的类名。ie10以上版本支持。该属性用于在元素中添加,移除及切换 CSS 类。

切换类:有就删除 无就添加 

 注意以上方法里面,所有类名都不带点

2. click 延时解决方案

移动端click事件会有300ms演示,因为移动端屏幕双击会缩放页面

3. 使用插件。 fastclick 插件解决 300ms 延迟。 

三、常用开发插件

1. JS 插件是 js 文件,它遵循一定规范编写,方便程序展示效果,拥有特定功能且方便调用。如轮播图和瀑布流插件。 特点:它一般是为了解决某个问题而专门存在,其功能单一,并且比较小。

GitHub官网地址:https://github.com/ftlabs/fastclick

  • 引入 js 插件文件。
  • 按照规定语法使用。

2. Swiper 插件的使用

中文官网地址: https://www.swiper.com.cn/ 

3. 其他移动端常见插件

superslide: http://www.superslide2.com/  

iscroll: https://github.com/cubiq/iscroll

总结

  • 确认插件实现的功能
  • 去官网查看使用说明
  • 下载插件
  • 打开demo实例文件,查看需要引入的相关文件,并且引入
  • 复制demo实例文件中的结构html,样式css以及js代码

四、常用开发框架

1. 框架

一套架构,它会基于自身的特点向用户提供一套较为完整的解决方案。框架的控制权在框架本身,使用者要按照框架所规定的某种规范进行开发。

  • 前端常用的框架有 Bootstrap、Vue、Angular、React 等。既能开发PC端,也能开发移动端
  • 前端常用的移动端插件有 swiper、superslide、iscroll等。

2. Bootstrap

Bootstrap 是一个简洁、直观、强悍的前端开发框架,它让 web 开发更迅速、简单。

它能开发PC端,也能开发移动端 Bootstrap JS插件使用步骤:

  • 引入相关js 文件
  • 复制HTML 结构
  • 修改对应样式
  • 修改相应JS 参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值