前言

最近在重做公司项目的主页,正好新来了个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制作滚动动画以及其他记录的更多相关文章

  1. 推荐几款制作网页滚动动画的 JavaScript 库

    这里集合了几款很棒的制作网页滚动动画的 JavaScript 库和插件.它们中,有的可以帮助你在页面滚动的时候添加动感的元素动画,有的则是实现目前非常流行的全屏页面切换动画.相信借助这些插件,你也可以 ...

  2. 微信小程序滚动动画,点击事件及评分星星制作!

    前言 小程序上线刷爆了朋友圈,但是最近渐渐消沉了,很少有动静!最近公司项目需要,体验了一下微信小程序,制作了几个功能,布局感觉很简单,但是交互和动画等写起来确实很费劲,主要是因为他不能操作DOM,只能 ...

  3. 利用jquery制作滚动到指定位置触发动画

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>利用 ...

  4. Expression Design与Blend制作滚动的小球动画教程

    原文:Expression Design与Blend制作滚动的小球动画教程 一,开发工具 Microsoft Expression Design & Blend 4.0 (3.0亦可). 这两 ...

  5. Adobe edge animate制作HTML5动画可视化工具(一)

    Edge Animate for mac是Adobe最新出品的制作HTML5动画的可视化工具,简单的可以理解为HTML5版本的Flash Pro.在之后的文章中,我会逐一的介绍这款新的HTML5动画神 ...

  6. css3制作旋转动画

    现在的css3真是强大,之前很多动画都是用jq来实现,但是css3制作的动画要比jq实现起来简单很多,今天呢,我自己也写了一个css旋转动画和大家分享.效果如下面的图片 思路:1.制作之前呢,我们先来 ...

  7. 用Canvas制作loading动画

    上一篇讲到用SVG制作loading动画,其中提到了线性渐变在扇形区域中的问题,并且用SVG SIML语法制作的loading动画并不是所有浏览器都兼容,所以现在用Canvas重新实现了一遍. 这里与 ...

  8. 3D Grid Effect – 使用 CSS3 制作网格动画效果

    今天我们想与大家分享一个小的动画概念.这个梦幻般的效果是在马库斯·埃克特的原型应用程序里发现的​​.实现的基本思路是对网格项目进行 3D 旋转,扩展成全屏,并呈现内容.我们试图模仿应用程序的行为,因此 ...

  9. ScrollMe – 在网页中加入各种滚动动画效果

    ScrollMe 是一款 jQuery 插件,用于给网页添加简单的滚动效果.当你向下滚动页面的时候,ScrollMe 可以缩放,旋转和平移页面上的元素.它易于设置,不需要任何自定义的 JavaScri ...

随机推荐

  1. Golang调用Dll案例

    Golang调用Dll案例 前言 在家办公已经两个多星期了,目前最大的困难就是网络很差.独自一个人用golang开发调用dll的驱动程序.本来就是半桶水的我,还在为等待打开一个页面而磨平了耐心.本想依 ...

  2. node.js+express+mongoose实现用户增删查改案例

    node.js+express+mongodb对用户进行增删查改 一.用到的相关技术 使用 Node.js 的 express 框架搭建web服务 使用 express 中间件 body-parse ...

  3. Robot Framework自动化测试框架核心指南-如何使用Java编写自定义的RobotFramework Lib

    如何使用Java编写自定义的RobotFramework Lib 本文包括2个章节 1. Robot Frdamwork中如何调用java Lib库 2.使用 java编写自定义的Lib 本文作者为: ...

  4. 使用mysqlfrm恢复frm表结构的方法

    1.mysqlfrm安装 由于mysqlfrm是mysql-utilities工具一部分,那么我们安装mysql-utilities即可,下载好对应的源码包,进行编译安装 shell> wget ...

  5. CentOS6.5安装指定的PHP版本(php5.5)(转)

    查询是否安装有php #rpm -qa|grep php 删除之前安装的php版本 (yum install 安装) #rpm -e php-fpm-5.3.3-47.el6.x86_64 --nod ...

  6. Arm开发板+Qt学习之路-开发板显示 /bin/sh: ./hello: Permission denied

    将pc上交叉编译完成的可执行文件hello,通过串口传输到开发板上后,执行./hello显示 /bin/sh: ./hello: Permission denied 解决方案:在开发板上执行  chm ...

  7. flex布局小结

    2009年,W3C 提出了一种新的方案----Flex 布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得到了所有浏览器的支持. Flex 是 Flexible Box 的缩写,意为&qu ...

  8. 【iOS】Spring Animations (弹性动画)

    This interface shows how a spring animation can be created by specifying a “damping” (bounciness) an ...

  9. 测试.NET core MiddleWare 运行逻辑

    话不多说,直接开整. 首先创建一个.NET CORE web 工程,创建完成之后,会自动创建相关文件如图(本示例基于.NET CORE 3.0): 打开Startup.cs可以看到在Configure ...

  10. 正则表达式中的exec()方法

    推荐该博主的内容链接: https://blog.csdn.net/ddwddw4/article/details/84658398?ops_request_misc=%7B%22request%5F ...