vue+swiper+animate.css制作全屏滚动H5

本文介绍了如何使用Swiper和animate.css库来制作全屏滚动的H5页面,通过添加动画效果实现翻页时元素的动态展示。在Vue项目中,首先安装所需依赖,然后引入animate.css和修改后的animate.js。接着在组件内应用 ani 类和相关参数,最后在初始化和滑动切换时调用动画函数,实现了不同slide内容的动态进入效果。
摘要由CSDN通过智能技术生成

年底了,接到需求要制作年度账单,形式就是全屏滚动H5页面,翻页时给页面元素添加动画,大概效果如下:
 

H5长翻页动画效果

接下来就来介绍一下我的制作步骤;

1.安装swiper、animate.css

npm install swiper@3 --save

npm install animate.css --save

2.在main.js中引入animate.css

// main.js
import Vue from "vue"
import App from "./App.vue"
import router from "./router"

// 引入animate.css
import animated from "animate.css"

Vue.use(animated)

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount("#app")

3.引入animate.js

swiper官方也提供了swiper.animate.min.js下载;下载地址看这→  https://www.swiper.com.cn/download/index.html#file8
但是官方提供的版本不能再Vue中直接使用,因此我稍作了一些改动,在src文件夹下新建lib文件夹,然后在它下面新建animate.js,将下面的内容添加到animate.js内

// animate.js
export function swiperAnimateCache() {
  const allBoxes = window.document.documentElement.querySelectorAll(".ani")
  for (var i = 0; i < allBoxes.length; i++) {
    allBoxes[i].attributes["style"]
      ? allBoxes[i].setAttribute("swiper-animate-style-cache", allBoxes[i].attributes["style"].value)
      : allBoxes[i].setAttribute("swiper-animate-style-cache", " ")
    allBoxes[i].style.visibility = "hidden"
  }
}

export function swiperAnimate(a) {
  clearSwiperAnimate()
  var b = a.slides[a.activeIndex].querySelectorAll(".ani")
  for (var i = 0; i < b.length; i++) {
    b[i].style.visibility = "visible"
    const effect = b[i].attributes["swiper-animate-effect"]
      ? b[i].attributes["swiper-animate-effect"].value
      : ""
    b[i].className = b[i].className + " " + effect + " " + "animated"
    const duration = b[i].attributes["swiper-animate-duration"]
      ? b[i].attributes["swiper-animate-duration"].value
      : ""
    // duration && style
    const delay = b[i].attributes["swiper-animate-delay"]
      ? b[i].attributes["swiper-animate-delay"].value
      : ""
    const style = b[i].attributes["style"].value + "animation-duration:" + duration + ";-webkit-animation-duration:" + duration + ";" + "animation-delay:" + delay + ";-webkit-animation-delay:" + delay + ";"
    // delay && (style = style )
    b[i].setAttribute("style", style)
  }
}

export function clearSwiperAnimate() {
  var allBoxes = window.document.documentElement.querySelectorAll(".ani")
  for (var i = 0; i < allBoxes.length; i++) {
    allBoxes[i].attributes["swiper-animate-style-cache"] && allBoxes[i].setAttribute("style", allBoxes[i].attributes["swiper-animate-style-cache"].value)
    allBoxes[i].style.visibility = "hidden"
    allBoxes[i].className = allBoxes[i].className.replace("animated", " ")
    const effectValue = allBoxes[i].attributes["swiper-animate-effect"].value
    /* eslint-disable-next-line */
    allBoxes[i].attributes['swiper-animate-effect'] && (effectValue, allBoxes[i].className = allBoxes[i].className.replace(effectValue, ' '))
  }
}

下面就是在组件内使用了

4.在组件内使用

在需要运动的元素上面增加类名  ani   ,和其他的类似插件相同,Swiper Animate需要指定几个参数:

swiper-animate-effect:切换效果,例如 fadeInUp (更多的切换效果可参考如下:https://daneden.github.io/animate.css/

swiper-animate-duration:可选,动画持续时间(单位秒),例如 0.5s
swiper-animate-delay:可选,动画延迟时间(单位秒),例如 0.3s

完整代码如下:

<template>
  <div class="main">
    <div class="swiper-container">
      <div class="swiper-wrapper">
        <div class="swiper-slide">
          <div class="swiper-slide-content ani" swiper-animate-effect="fadeInDown" swiper-animate-duration="2s" swiper-animate-delay="0" style="background:#ff0000;">11111</div>
        </div>
        <div class="swiper-slide">
          <div class="swiper-slide-content ani" swiper-animate-effect="fadeInLeft" swiper-animate-duration="2s" swiper-animate-delay="0" style="background:#ff0000;">222222</div>
        </div>
        <div class="swiper-slide">
          <div class="swiper-slide-content ani" swiper-animate-effect="fadeInRight" swiper-animate-duration="2s" swiper-animate-delay="0" style="background:#ff0000;">333333</div>
        </div>
        <div class="swiper-slide">
          <div class="swiper-slide-content ani" swiper-animate-effect="rotateInDownLeft" swiper-animate-duration="2s" swiper-animate-delay="0" style="background:#ff0000;">44444</div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import * as swiperAni from "../lib/animate"
import Swiper from "swiper"
import "swiper/dist/css/swiper.min.css"
export default {
  name: "culture",
  data() {
    return {}
  },
  created() {
    this.$nextTick(function() {
      const mySwiper = new Swiper(".swiper-container", {
        loop: false, // 循环模式选项
        // speed: 500,
        direction: "vertical",
        onInit: (swiper) => {
          swiperAni.swiperAnimateCache(swiper) // 隐藏动画元素
          swiperAni.swiperAnimate(swiper) // 初始化完成开始动画
        },
        onSlideChangeEnd: (swiper) => {
          swiperAni.swiperAnimate(swiper) // 每个slide开始切换时也运行当前slide动画
          // swiper.slides.eq(this.activeIndex).find(".ani").removeClass("ani") // 动画只展现一次,去除ani类名
        }
      })
    })
  }
}
</script>

<style scoped lang="scss">
.main {
  width: 100vw;
  height: 100vh;
  .swiper-container {
    background-color: #020d35;
    height: 100vh;

    .swiper-slide {
      height: 100vh;

      .swiper-slide-content {
        width: 200px;
        height: 200px;
        margin: 0 auto;
      }
    }
  }
}
</style>

 

animateControl v1.0.3 的功能特点: 1、完全兼容swiper的loop模式,完美支持swiper的嵌套。 2、完美支持animate.css,能够为页面中的任意元素添加动画。 3、完美支持为单个元素同时添加多个animate.css动画效果(无需进行HTML标签的嵌套),并且,可以随意控制这些动画效果的播放方式。 4、能够设置每一个动画效果的播放方式:同步播放、依次播放、循环播放。 5、能够设置每一个动画效果的动画类型:进入动画、表演动画、退出动画(在animate.css的源码中,opacity值从0至100的是进入动画,没有opacity属性的是表演动画。opacity值从100到0的是退出动画)。 6、实现了排版效果、动画效果、动画控制的完美分离,极大的提高了开发效率,能够在很短的时间内实现复杂的动画效果控制。 7、animateControl 不与swiper结合时,可对网页中的其它元素添加动画效果,并进行控制。 8、能够让不懂JS代码的人,经过简单的学习,就能快速的制作HTML5+CSS3动态微网页。 9、相较于上一个版本,在 v1.0.3 中对整个核心代码进行了优化,大大提升了运行速率,使动画播放更流畅。 10、相较于上一个版本,在 v1.0.3 中简化了所有参数的名称,让使用变得更加简单(用更少的代码,就能实现更复杂的效果)。 11、本次发布的动画控制器文件为min版,大大减少了文件的体积(下载解压后,文件位置在:js/swiper.animate.min.js)。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值