【前端三剑客——JS】本地存储与动画函数

85 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

本地存储

原因: 网页复杂化,经常性需要在本地存储大量数据

特性:

  • 存储在用户浏览器
  • 容量大,sessionStorage约5M、localStorage约20M
  • 只能存储字符串,可以将对象JSON.stringify() 编码后存储

1. window.sessionStage

特点如下:

  1. 生命周期为关闭浏览器窗口
  2. 在同一个窗口下数据可以共享
  3. 以键值对形式存储使用

下面是四个操作方法:

储存数据:

sessionStroage.setltem(key, value)

获取数据:

sessionStroage.getItem(key)

删除数据:

sessionStroage.removeItem(key)

删除所有数据:

sessionStroage.clear()

2. window.loaclStroage

特点:

  1. 声明周期永久生效,除非手动删除
  2. 可以多窗口共享,(同一浏览器)
  3. 以键值对形式存储

下面是四个操作方法,在格式上与sessionStroage没什么区别

存储数据:

localStroage.setItem(key, value)

获取数据:

localStroage.getItem(key)

删除数据:

localStroage.removeItem(key)

删除所有数据

localStroage.clear()

3. mouseenter 和 mouseover 的区别

  • mouseenter 不会冒泡,因此 mouseover 鼠标经过自身盒子会触发,经过子盒子还会触发。 mouseenter 只会经过自身盒子触发
  • 跟mouseenter搭配 鼠标离开 mouseleave 同样不会冒泡

这个需要有一定的了解,因为当用到事件捕获和事件冒泡的时候,更加需要区别这俩者。

4. 动画函数

动画函数的实现在一定程度上遵循比较固定的格式,下面如一讲解,在使用时只需要套就好了

4.1 原理

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

实现步骤:

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

4.2 动画函数简单封装

需要传递俩个参数——动画对象和移动到的距离

4.3 动画元素定时器单一法

利用对象,传入对象,使得每个动画只有一个定时器

注意:

有时会出现定时器重复开始,导致动画效果“叠加”

可以将下面代码放入动画封装函数的第一行

clearInterval(obj.timer);

4.4 缓动效果

原理:

让元素运动效果有所变化,最常见便是让速度慢慢停下来

思路:

  1. 让盒子每次移动的距离慢慢变小,速度就会慢慢落下来。
  2. 核心算法: (目标值 - 现在的位置 ) / 10 做为每次移动的距离 步长
  3. 停止的条件是: 让当前盒子位置等于目标位置就停止定时器
  4. 注意步长值需要取整

其实就是利用算法,让相同时长下运动距离变化

步长值给与往上取整

Math.ceil

4.5 缓动动画多个目标值之间移动

注意,需要加上对负值,往小取整

Math.floor

4.6 添加回调函数

给动画封装函数加一个参数callback函数即可

看需求,一般写在定时器结束事件里

4.7 动画函数封装单独放在一个JS文件里

5. 节流阀

让同一时间内只有某一个东西通过,不允许出现,多次触发的情况

一般的应用在:

防止轮播图按钮连续点击造成播放过快

目的: 让上一个函数动画内容执行完毕,再去执行下一个函数动画

思路: 利用回调函数,添加一个变量来控制

返回顶部做法:

window.scroll(x,y);

注意里面的xy不会顶部

页面滚动了多少,可以通过window.pageYOffset