基于Vue的页面切换左右滑动效果
HTML文本页面:
- <template>
- <div id="app>
- <transition :name="direction" mode="out-in"> <!--动态获得transition 的name值-->
- <router-view class="app-view" wechat-title></router-view>
- </transition>
- </div>
- </template>
JS定义代码:定义在全局js文件里面
- router.beforeEach((to, from, next) => {
- const list = ['home', 'group', 'user'] // 将需要切换效果的路由名称组成一个数组
- const toName = to.name // 即将进入的路由名字
- const fromName = from.name // 即将离开的路由名字
- const toIndex = list.indexOf(toName) // 进入下标
- const fromIndex = list.indexOf(fromName) // 离开下标
- let direction = ''
- if (toIndex > -1 && fromIndex > -1) { // 如果下标都存在
- if (toIndex < fromIndex) { // 如果进入的下标小于离开的下标,那么是左滑
- direction = 'left'
- } else {
- direction = 'right' // 如果进入的下标大于离开的下标,那么是右滑
- }
- }
- store.state.viewDirection = direction //这里使用vuex进行赋值
- return next()
- })
在App.vue文件中,进行计算属性:
- computed: {
- direction () {
- const viewDir = this.$store.state.viewDirection
- let tranName = ''
- if (viewDir === 'left') {
- tranName = 'view-out'
- } else if (viewDir === 'right') {
- tranName = 'view-in'
- } else {
- tranName = 'fade'
- }
- return tranName
- },
- },
css3进行动画效果定义:使用sass
待定义引入样式文件:
- // Variables
- $AnimateHook: "animated";
- $AnimateDuration: 0.8s;
- // Mixins
- // Base Style
- .#{$AnimateHook} {
- -webkit-animation-duration: $AnimateDuration;
- animation-duration: $AnimateDuration;
- -webkit-animation-fill-mode: both;
- animation-fill-mode: both;
- // Modifier for infinite repetition
- &.infinite {
- -webkit-animation-iteration-count: infinite;
- animation-iteration-count: infinite;
- }
- }
- // Slide
- @-webkit-keyframes slideInLeft {
- from {
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
- }
- @keyframes slideInLeft {
- from {
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
- }
- .slideInLeft {
- -webkit-animation-name: slideInLeft;
- animation-name: slideInLeft;
- }
- @-webkit-keyframes slideInRight {
- from {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
- }
- @keyframes slideInRight {
- from {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- visibility: visible;
- }
- to {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
- }
- .slideInRight {
- -webkit-animation-name: slideInRight;
- animation-name: slideInRight;
- }
- @-webkit-keyframes slideOutLeft {
- from {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
- }
- @keyframes slideOutLeft {
- from {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- }
- }
- .slideOutLeft {
- -webkit-animation-name: slideOutLeft;
- animation-name: slideOutLeft;
- }
- @-webkit-keyframes slideOutRight {
- from {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
- }
- @keyframes slideOutRight {
- from {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- }
- to {
- visibility: hidden;
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- }
- }
- .slideOutRight {
- -webkit-animation-name: slideOutRight;
- animation-name: slideOutRight;
- }
- @-webkit-keyframes inRight {
- 0% {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0)
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0)
- }
- }
- @keyframes inRight {
- 0% {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0)
- }
- to {
- -webkit-transform: translateZ(0);
- transform: translateZ(0)
- }
- }
- @-webkit-keyframes outLeft {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0)
- }
- to {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0)
- }
- }
- @keyframes outLeft {
- 0% {
- -webkit-transform: translateZ(0);
- transform: translateZ(0)
- }
- to {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0)
- }
- }
定义进入与离开的动画过渡:
- .fade-enter-active,
- .fade-leave-active {
- transition: all .2s ease;
- }
- .fade-enter,
- .fade-leave-active {
- opacity:;
- }
- .view-in-enter-active,
- .view-out-leave-active {
- position: absolute;
- top:;
- width: 100%;
- padding-top: px2rem($titbarHeight);
- -webkit-animation-duration: .3s;
- animation-duration: .3s;
- -webkit-animation-fill-mode: both;
- animation-fill-mode: both;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- }
- .view-in-enter-active {
- -webkit-animation-name: inRight;
- animation-name: inRight;
- }
- .view-out-leave-active {
- -webkit-animation-name: outLeft;
- animation-name: outLeft;
- }
基于Vue的页面切换左右滑动效果的更多相关文章
- Android开发之ViewPager实现多页面切换及动画效果(仿Android的Launcher效果)
Android开发中经常会有引导页或者切换页面等效果,本文采用ViewPager结合动画效果来实现仿Launcher以及页面切换的效果.源码地址在文章最后给出下载. 效果图如下: 1.Vi ...
- vue项目页面切换到默认显示顶部
页面切换到默认显示顶部 方法一 使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样. vue-router 能做到,而且更好,它让你可以自定义路由切换时页 ...
- vue中使用better-scroll实现滑动效果
1.安装:npm install better-scroll 2.引入:import BetterScrol from "better-scroll"; 1.滚动效果 better ...
- 实现页面切换(动画效果实现,不用ViewPager)
源代码地址 http://download.csdn.net/detail/u013210620/8791687 先看主页面布局activity_main <?xml version=" ...
- 基于jquery实现页面loading加载效果
实现loading 加载提示 ······ 透明遮罩 居中效果 具体代码如下: CSS样式部分: <style type="text/css"> .background ...
- Vue -- 项目报错整理(2):IE报错 - ‘SyntaxError:strict 模式下不允许一个属性有多个定义‘ ,基于vue element-ui页面跳转坑的解决
- Vue完成页面切换中加载数据
created() { // 拿到路由传递来的car主键 let pk = this.$route.query.pk || this.$route.params.pk; // 主键不存在,就直接结束方 ...
- 基于Vue、Bootstrap的Tab形式的进度展示
最近基于Vue.Bootstrap做了一个箭头样式的进度展示的单页应用,并且支持了对于一个本地JS文件的检索,通过这个单页应用,对于Vue的理解又深入了一些.在这里把主要的代码分享出来. 本单页应用实 ...
- Android之怎样实现滑动页面切换【Fragment】
Fragment 页面切换不能滑动 所以对于listview 能够加入的左右滑动事件 .不会有冲突比如(QQ的好友列表的删除) Fragment 和viewpager 的差别 Viewpager ...
随机推荐
- 关于HTTP协议头域详解
HTTP1.1 请求头:消息头 Accept:text/html,image/* 告诉服务器,客户机支持的数据类型 Accept-Charset:ISO-8859-1 告诉服务器,客户机采用的编 ...
- C#语言和SQL Server第十章笔记
第十章 :使用关键字模糊查询 笔记 一:使用关键字 :LIKE BETWEEN IN进行模糊查询 通配符: 一类字符,代替一个或多个真正的字符 与LIKE关键字一起使用 通配符: 解释 实例 符 ...
- java 类方法和实例方法 以及 类变量和实例变量
类体中的方法分为实例方法和类方法两种,用static修饰的是类方法 类方法: 对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址.从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通 ...
- Head First设计模式之单例模式
一.定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点.通过单例模式可以保证系统中一个类只有一个实例.即一个类只有一个对象实例. Singleton模式中的实例构造器可以设置为protecte ...
- [笔记]《JavaScript高级程序设计》- 最佳实践
一.可维护性 1 什么是可维护的代码 可理解性--其他人可以接受代码并理解它的意图和一般途径,而无需原开发人员的完整解释. 直观性--代码中的东西一看就能明白,不管其操作过程多么复杂. 可适应性--代 ...
- Javascript中遍历数组方法的性能对比
Javascript中常见的遍历数组的方法 1.for循环 for(var i = 0; i < arr.length; i++) { // do something. } 2.for循环的改进 ...
- Shell和命令基础
什么是Shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解析器),Shell接收用户输入的命令并把它送入到内核去执行,结构如下图 Shell的功能 Shell最重要的 ...
- 高可用高性能分布式文件系统FastDFS进阶keepalived+nginx对多tracker进行高可用热备
在上一篇 分布式文件系统FastDFS如何做到高可用 中已经介绍了FastDFS的原理和怎么搭建一个简单的高可用的分布式文件系统及怎么访问. 高可用是实现了,但由于我们只设置了一个group,如果现在 ...
- 聚类之dbscan算法
简要的说明: dbscan为一个密度聚类算法,无需指定聚类个数. python的简单实例: # coding:utf-8 from sklearn.cluster import DBSCAN impo ...
- 51 NOD 1238 最小公倍数之和 V3
原题链接 最近被51NOD的数论题各种刷……(NOI快到了我在干什么啊! 然后发现这题在网上找不到题解……那么既然A了就来骗一波访问量吧…… (然而并不怎么会用什么公式编辑器,写得丑也凑合着看吧…… ...