当前位置: 首页 > news >正文

使用lottie 模仿san的动画

在百度前端技术学院学习 设计师学院 绿(大佬)的课程 (第一课QAQ) 传送门

然后模仿san官网的动画效果 san

模仿的效果 传送们 pc端食用更佳!

大佬的实现已经很棒了 个人只让部分动画变得平滑

transition: transform .3s;
复制代码

这样可以让鼠标移出Div的时候更加平滑

分界线~~~


首先贴出资料和大佬的教程

  • ife.baidu.com/course/deta…
  • zhuanlan.zhihu.com/uxelement
  • baidu.github.io/san/
  • github.com/airbnb/lott…
  • codepen.io/airnan/proj…
  • www.youtube.com/watch?v=5XM…
  • ......

大概就是这么写 大家可以去Google搜教程 官方案例很不错

首先布局 结构和样式都可以借鉴san官网 利用控制台(so easy~)

<div class="resource-block">
  <a href="" class="resource-item">
    <div class="resource-item-top resource-item-top-two">
        <div
        id="bm"
        class="bodymovin"
        data-movpath="js/compass.json">
      </div>
    </div>

    <div class="resource-item-bottom">
      <h5>教程</h5>
      <p>教程是入门的捷径,请从这里开始了解San</p>
    </div>
  </a>
</div>
复制代码

这是结构 具体样式可以查看我的github文件 传送门

然后就是js 控制动画效果了

引入jquery (方便~)

  • 在github上的build/player获取最新版本的lottie.js文件 或者 从AE的插件导出
  • 在HTML引入文件
<script src="js/lottie.js"></script>
复制代码
  • 调用lottie.loadAnimation()启动一个动画。将一个对象作为参数
var animData = {
  container: bodymovinLayer,
  renderer: 'svg',
  prerender: true,
  loop: false,
  autoplay: false,
  path: bodymovinLayer.getAttribute('data-movpath')
}

# animData 导出的动画数据的Object
# container 渲染动画的dom元素
# renderer 'svg'/'canvas'/'html'来设置渲染器
# prerender 这个根据英文应该是预渲染
# loop 是否循环播放
# autoplay 是否自动播放
# path 路径


复制代码
  • while循环绑定事件 将上面封装进一个方法
setBodymovin = function (cards, len) {
  while (len--) {
    var bodymovinLayer = cards[len].getElementsByClassName('bodymovin')[0]

    var animData = {
      container: bodymovinLayer,
      renderer: 'svg',
      prerender: true,
      loop: false,
      autoplay: false,
      path: bodymovinLayer.getAttribute('data-movpath')
    }

    anim = lottie.loadAnimation(animData);

    (function (anim) {
      var card = cards[len]

      $(card).on('mouseenter', function () {
        anim.play()
      })

      $(card).on('mouseleave', function (e) {
        anim.stop()
      })
    })(anim)

  }

}
复制代码
  • 最后获取元素调用

var resourceCards = document.querySelectorAll('.resource-block')
var facilityCards = document.querySelectorAll('.facility-block')
var len = resourceCards.length

setBodymovin(resourceCards, len)
setBodymovin(facilityCards, len)

复制代码

最后贴 gulp 任务

const gulp = require('gulp')
const connect = require('gulp-connect')

gulp.task('connect', function(){
  connect.server({
    root: 'app',
    port: 8000,
    livereload: true
  })
})

gulp.task('html', function(){
  gulp.src('./app/*.html')
    .pipe(connect.reload())
})

gulp.task('css', function(){
  gulp.src('./app/css/*.css')
    .pipe(connect.reload())
})

gulp.task('watch', function () {
  gulp.watch(['./app/*.html'], ['html'])
  gulp.watch(['./app/css/*.css'], ['css'])
})

gulp.task('default', ['connect','watch'])
复制代码

具体代码见github源码,大佬多给给意见哦~~~ 也可以私戳我哈 Qq: 952822399

新开了个Qq群,大家也可以进来互相交流~ iD 718639024

相关文章:

  • Python3求英文文档中每个单词出现的次数并排序
  • 【享受工作系列】我们为什么工作之自我意识管理
  • 深入理解spring生命周期与BeanPostProcessor的实现原理
  • JS基础学习
  • 一个可以更好地调试的 Perl 模块
  • 系统认识JavaScript正则表达式
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 深入理解linux系统下proc文件系统内容
  • Servlet容器启动过程
  • 序列化有关内容
  • 30亿元收购比特币公司 鲁亿通称不是炒概念
  • [译] android应用开发者,你们真的了解Activity的生命周期吗?
  • 分布式系统的经典基础理论
  • 如何在工作中学习
  • 实现自动SSH连接
  • 07.Android之多媒体问题
  • Druid 在有赞的实践
  • iOS编译提示和导航提示
  • JavaScript类型识别
  • JavaScript设计模式系列一:工厂模式
  • Redis 懒删除(lazy free)简史
  • Vue UI框架库开发介绍
  • windows下mongoDB的环境配置
  • 搞机器学习要哪些技能
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 突破自己的技术思维
  • 【干货分享】dos命令大全
  • 阿里云服务器如何修改远程端口?
  • 数据库巡检项
  • ​一些不规范的GTID使用场景
  • #define,static,const,三种常量的区别
  • #pragma multi_compile #pragma shader_feature
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (windows2012共享文件夹和防火墙设置
  • (六)软件测试分工
  • (十六)串口UART
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)甲方乙方——赵民谈找工作
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • *上位机的定义
  • .libPaths()设置包加载目录
  • .net core 6 redis操作类
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET使用存储过程实现对数据库的增删改查
  • .NET中的十进制浮点类型,徐汇区网站设计
  • .sh 的运行
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [C++]STL之map
  • [C语言]一维数组二维数组的大小
  • [hdu 4405] Aeroplane chess [概率DP 期望]
  • [hdu 4552] 怪盗基德的挑战书
  • [InnoDB系列] -- SHOW INNODB STATUS 探秘