使用IntersectionObserver制作滚动动画以及其他记录
前言
最近在重做公司项目的主页,正好新来了个UI,整个都重新设计了一下,动画还挺多的。我之前没有怎么玩过这些,踩了挺多坑,最后找到了目前而言最合适的方法,现在做一个记录。
需要把原来的主页从项目中抽出来,所以干脆重新建了一个项目,使用vuecli4搭配ts,顺便踩一踩vue-ts的坑。
进入正题
需求之一是要有滚动动画,即当滚动到某个地方时播放动画,传统的方式是根据scroll距离判断滚动位置,当然可以用,不过还有其他方法可以做。
使用 IntersectionObserver api可以在很少代码量的情况下实现要求,我想既然他能做懒加载,做滚动动画应该绰绰有余。
在vue中使用IntersectionObserver
可以使用选择dom的方式,也可以使用更通用的方法,这里介绍通用方法
建一个ts文件
这里observe滚动,一旦元素达到可视区域,即加入enter class
之后unobserve,该动画只播放一次
const animatedScrollObserver: IntersectionObserver = new IntersectionObserver(
(entries,animatedScrollObserver) => {
entries.forEach((e): any => {
if (e.isIntersecting) {
e.target.classList.add('enter');
animatedScrollObserver.unobserve(e.target);
}
});
}
)
接下来export出去,只要传入一个dom,就可以observe该元素
export default {
bind(el: any) {
el.classList.add('before-enter');
animatedScrollObserver.observe(el);
}
}
在main.ts中引入,并且自定义指令,我们可以使用v-sa来引入需要observe的元素
import ScrollAnimation from "./ts/animation/scrollAnimation";
Vue.directive('sa',ScrollAnimation)
到这里工作基本完成,接下来可以设置一些动画,这些动画将在滚动到元素第一次时被播放
举例:html部分
<template>
<div id="container">
<!-- 省略 -->
<section class="text-wrapper">
<p v-sa>lorem ipsum之类的展位字符,.......</p>
</section>
<section class="pic-wrapper">
<img v-sa src="..." />
</section>
<!-- ..省略.. -->
</div>
</template>
css部分
// 文字从左侧缓入
.text-wrapper{
@keyframes moveup {
from {
left: -15px;
}
to {
top: 0;
}
}
.before-enter{
opacity: 0;
}
.enter {
opacity: 1;
animation: moveup 3s;
}
p {
position: relative;
}
}
// 图片从下往上
.pic-wrapper{
@keyframes moveup {
from {
top: 30px;
}
to {
top: 0;
}
}
.before-enter{
opacity: 0;
}
.enter {
opacity: 1;
animation: moveup 2s;
}
img {
position: relative;
}
}
关于vue ts的一些吐槽
ts是真香,但是目前vue对ts支持还不太好,比如引入外部js模块,需要在d.ts中declare module(还经常出问题),有些cdn方式引入的库,即便设置了vue.config.js中的externals,还是识别不了。可能是有些我还没研究透,但是足以体现支持不佳的现状。希望能在将来的vue3正式版中有所改进。
使用IntersectionObserver制作滚动动画以及其他记录的更多相关文章
- 推荐几款制作网页滚动动画的 JavaScript 库
这里集合了几款很棒的制作网页滚动动画的 JavaScript 库和插件.它们中,有的可以帮助你在页面滚动的时候添加动感的元素动画,有的则是实现目前非常流行的全屏页面切换动画.相信借助这些插件,你也可以 ...
- 微信小程序滚动动画,点击事件及评分星星制作!
前言 小程序上线刷爆了朋友圈,但是最近渐渐消沉了,很少有动静!最近公司项目需要,体验了一下微信小程序,制作了几个功能,布局感觉很简单,但是交互和动画等写起来确实很费劲,主要是因为他不能操作DOM,只能 ...
- 利用jquery制作滚动到指定位置触发动画
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>利用 ...
- Expression Design与Blend制作滚动的小球动画教程
原文:Expression Design与Blend制作滚动的小球动画教程 一,开发工具 Microsoft Expression Design & Blend 4.0 (3.0亦可). 这两 ...
- Adobe edge animate制作HTML5动画可视化工具(一)
Edge Animate for mac是Adobe最新出品的制作HTML5动画的可视化工具,简单的可以理解为HTML5版本的Flash Pro.在之后的文章中,我会逐一的介绍这款新的HTML5动画神 ...
- css3制作旋转动画
现在的css3真是强大,之前很多动画都是用jq来实现,但是css3制作的动画要比jq实现起来简单很多,今天呢,我自己也写了一个css旋转动画和大家分享.效果如下面的图片 思路:1.制作之前呢,我们先来 ...
- 用Canvas制作loading动画
上一篇讲到用SVG制作loading动画,其中提到了线性渐变在扇形区域中的问题,并且用SVG SIML语法制作的loading动画并不是所有浏览器都兼容,所以现在用Canvas重新实现了一遍. 这里与 ...
- 3D Grid Effect – 使用 CSS3 制作网格动画效果
今天我们想与大家分享一个小的动画概念.这个梦幻般的效果是在马库斯·埃克特的原型应用程序里发现的.实现的基本思路是对网格项目进行 3D 旋转,扩展成全屏,并呈现内容.我们试图模仿应用程序的行为,因此 ...
- ScrollMe – 在网页中加入各种滚动动画效果
ScrollMe 是一款 jQuery 插件,用于给网页添加简单的滚动效果.当你向下滚动页面的时候,ScrollMe 可以缩放,旋转和平移页面上的元素.它易于设置,不需要任何自定义的 JavaScri ...
随机推荐
- who 命令
1)显示系统启动时间 [root@node1 ~]# who -b 系统引导 2020-01-10 11:41 2)显示系统当前的运行级别 [root@node1 ~]# who -r 运行级别 3 ...
- [redis读书笔记] 第一部分 数据结构与对象 简单动态字符串
本读书笔记主要来自于<<redis设计与实现>> -- 黄键宏(huangz) redis主要设计了字符串,链表,字典,跳跃表,整数集合,压缩列表来做为基本的数据结构,实现键值 ...
- chkcongfig 命令
chkconfig 命令主要用来 更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig ...
- Day2前端学习之路——HTML基本知识
课程目标: 通过制作自己的简历,更加清楚地了解HTML是什么,HTML5是什么.学习基本的HTML标签,理解HTML语义化概念 任务一:回答问题 1.HTML是什么,HTML5是什么? HTML是一种 ...
- vscode+php+xdebug Time-out connecting to client (Waited: 200 ms)
如果php.ini配置没错,且端口无误,那么就可能是配置文件选错了. vscode里面有两个配置文件,一个是 Listen for xdebug ,一个是 Lanuch currently open ...
- 1.3.6 详解build.gradle文件——Android第一行代码(第二版)笔记
不同于Eclipse,Android Studio是采用Gradle来构建项目的.Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置. 首先看 ...
- echarts多条折线图
折线图单只比较好配置,但是多只的话,楼主整整难了一下午才搞出来,下面分享下啦 var myChart = echarts.init(document.getElementById('series-ch ...
- C++实现一个简单的双栈队列
双栈队列的原理是用两个栈结构模拟一个队列, 一个栈A模拟队尾, 入队的元素全部压入此栈, 另一个栈B模拟队首, 出队时将栈A的元素弹入栈B, 将栈B的栈顶元素弹出 此结构类似汉诺塔, 非常经典, 这里 ...
- 用Python制作酷炫词云图,原来这么简单!
一.简介词云图是文本挖掘中用来表征词频的数据可视化图像,通过它可以很直观地展现文本数据中地高频词:! 图1 词云图示例 在Python中有很多可视化框架可以用来制作词云图,如pyecharts,但这些 ...
- Asp.Net Core 3.1 集成Swagger
引入Nuget包 Swashbuckle.AspNetCore.SwaggerGen Swashbuckle.AspNetCore.SwaggerUI 配置Startup 配置ConfigureSer ...