前言

最近在重做公司项目的主页,正好新来了个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. C++:析构函数的调用时机

    结论:只有当类的某个实例化对象的构造函数执行完毕,而且当该对象退出作用域时,才会执行析构函数. 如果在执行构造函数的过程中抛出了异常,就不会调用析构函数 上测试代码: class Test { pub ...

  2. 万字分享,我是如何一步一步监控公司MySQL的?

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...

  3. Oracle 12C In-Memory特性研究

    Oracle 12C In-Memory特性研究一.Oracle In-Memory1.1 In-Memory 开启方法1.2 开启与关闭IM column store1.3 inmemory优先级调 ...

  4. ELF文件之九——使用链接脚本-2个函数-data-bss-temp-call-debug信息-struct

    main.c int enable; ; struct aaa { int membera; char memberb; }s_aaa; int main() { int temp; add(); d ...

  5. FastDFS 原理介绍

    1 功能简介         FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适 ...

  6. Java日志介绍(3)-Logback

    Logback 继承自Log4j,它建立在有十年工业经验的日志系统之上.它比其它所有的日志系统更快并且更小,包含了许多独特并且有用的特性. 1.配置 1.1.加载配置 Logback能够在初始化期间自 ...

  7. 学习css常用基本层级伪类属性选择器

    常见的css选择器包含:常用选择器.基本选择器.层级选择器.伪类选择器.属性选择器,其中常用选择器分为:1.html选择符*{}//给页面上所有的标签设置模式:2.类选择符.hcls{}//给clas ...

  8. Python爬虫实战教程:爬取网易新闻;爬虫精选 高手技巧

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. stars声明很多小伙伴学习Python过程中会遇到各种烦恼问题解决不了.为 ...

  9. C#上位机之—WinForm实现串口通信示例

    上位机开发常用到串口通信来控制设备,串口通信的主要参数:COM口,波特率(9600),停止位(One),数据位(8),校验位(None),括号中的是常用值,具体意思我也不太懂,会用能实现功能就行哈哈: ...

  10. npm常用命令和脚手架使用

    最近前端同学使用最多的莫过于vue,angualr,react等热门前端框架了.那么就避免不掉的使用npm命令,本人就经常因为这三个脚手架的使用而不得不百度相应的npm命令,不胜其烦,,,因此就整理一 ...