先来看效果图

完整源码在 github 中 欢迎 star:

https://github.com/imfing/vuexlearn

准备

开始之前您需要有 vue 基础,以及安装好 vue-cli

开始

新建 vue 项目:vue init webpack vuexlearn
记住安装的时候需要选择 vue-router

进入 vuexlearn 目录之后安装 vuex:
这里使用 npm 安装 npm install vuex --save 您也可以使用其他方式安装,具体请参考 vuex 官方文档。

在安装好 vuex 之后,您就可以使用 npm run dev 命令运行您的 web 应用了。

现在在 main.js 文件中引入 vuex

main.js

import vuex from 'vuex'
Vue.use(vuex);

在下方添加我们的 vuex 状态树

var store = new vuex.Store({//store对象state: {states: 'turn-on'},mutations: {setTransition(state, states) {state.states = states}}
})

state.states 就是用来记录我们目前的切换状态, turn-on 为页面入栈,turn-off 是页面出栈。

setTransition(state, states) 方法用来设置 states 的值,在需要的时候我们会调用它。

接下来,我们新建一个 common 组件,作为我们的作标题栏

common.vue

<template><div class="header"><div class="left" @click="back">back</div><div class="center">{{title}}</div></div>
</template><script>
export default {data() {return {};},props: ["title"],methods: {back() {this.$store.commit("setTransition", "turn-off");this.$router.back(-1);}}
};
</script><style scoped>
.header {position: fixed;width: 100%;height: 40px;line-height: 40px;background-color: rgb(100, 231, 60);
}
.clearfix {overflow: auto;
}
.left {position: fixed;left: 0px;width: 60px;
}
.center {left: 50%;position: fixed;
}
</style>

这里通过 props 拿到 name 的值,渲染在标题栏上

这里的切换核心就是在点击返回的时候,设置整个页面的动画效果

新建 4 个页面,其他的页面雷同,所以这里只贴出一个页面

A.vue

<template><div class="A"><common title="a"></common><div class="bottom">bottom</div></div>
</template><script>
import common from "./common";
export default {data() {return {};},components: {common}
};
</script><style scoped>
.A {width: 100%;height: 100%;background-color: rgb(214, 198, 52);position: fixed;
}.bottom {width: 100%;height: 50px;background-color: red;position: fixed;bottom: 0px;
}
</style>

App.vue

<template><div id="app"><router-link to="/A" @click.native="clickLink">A</router-link><router-link to="/B" @click.native="clickLink">B</router-link><router-link to="/C" @click.native="clickLink">C</router-link><router-link to="/D" @click.native="clickLink">D</router-link><transition :name="$store.state.states"><router-view/></transition><div>Index Page</div></div>
</template><script>
export default {name: "App",data() {return {};},methods: {clickLink() {this.$store.commit("setTransition", "turn-on");}},mounted() {var _this = this;window.addEventListener("popstate",function(e) {_this.$store.commit("setTransition", "turn-off");},false);}
};
</script><style>
* {margin: 0;padding: 0;
}
.btn {width: 50%;
}
html,
body,
#app {height: 100%;
}
.turn-on-enter {transform: translate3d(100%, 0, 0);
}
.turn-on-leave-to {/* transform: translate3d(-20%, 0, 0); */
}
.turn-on-enter-active,
.turn-on-leave-active {transition: transform 0.4s ease;
}
.turn-off-enter {/* transform: translate3d(-20%, 0, 0); */
}
.turn-off-leave-to {transform: translate3d(100%, 0, 0);
}
.turn-off-enter-active,
.turn-off-leave-active {transition: transform 0.4s ease;
}
.turn-off-leave-active {z-index: 2;
}
</style>

切换效果就在这里定义了,通过 vuex 全局保存变量达到页面入栈、出栈的动画效果。

完整源码在 github 中:

https://github.com/imfing/vuexlearn

最后在看一下效果图:

转载于:https://www.cnblogs.com/stackfing/p/9071539.html

手摸手,带你用 vue 动画实现原生 app 切换效果,丝滑般的体验相关推荐

  1. vue如何使用原生js写动画效果_手摸手,带你用 vue 动画实现原生 app 切换效果,丝滑般的体验...

    先来看效果图 完整源码在 github 中 欢迎 star: 准备 开始之前您需要有 vue 基础,以及安装好 vue-cli 开始 新建 vue 项目:vue init webpack vuexle ...

  2. 手摸手带你用实现vue全屏loading插件

    手摸手带你用实现vue全屏loading插件 前言: 由于我们打开网页时,浏览器与服务器交互需要时间,受限于宽带以及服务器性能,导致用户在访问一个网页时,往往需要一个等待期,才能在浏览器中真正完全展示 ...

  3. 手摸手,带你用vue撸后台 系列一(基础篇) - 掘金

    完整项目地址:vue-element-admin 系列文章: 手摸手,带你用 vue 撸后台 系列一(基础篇) 手摸手,带你用 vue 撸后台 系列二(登录权限篇) 手摸手,带你用 vue 撸后台 系 ...

  4. vue 前端显示图片加token_手摸手,带你用vue撸后台 系列二(登录权限篇)

    完整项目地址:vue-element-admin https://github.com/PanJiaChen/vue-element-admin 前言 拖更有点严重,过了半个月才写了第二篇教程.无奈自 ...

  5. 带你手摸手搭建vuepress站点

    vuePress是什么? VuePress 俺简单介绍下,是国内有名大神的尤雨溪发布的全新基于 vue 静态网站的生成器,内置的有 webpack组件,可以拿来写文档,主要是md格式.做出的感觉就是简 ...

  6. 每天研究一个产品,阿德老师“手摸手”带你写产品分析报告 |

    作为一个产品经理,要高频地去把玩各种最新产品,所以我们想把那些对世界充满好奇心.勇于探索新鲜事物的产品经理都聚在一起.一起深入研究国内外最新/奇产品,一起发现有趣的事情,并把研究心得都整理成文章沉淀下 ...

  7. editor修改样式 vue_手摸手Electron + Vue实战教程(三)

    系列文章: 手摸手Electron + Vue实战教程(一) 手摸手Electron + Vue实战教程(二) ❝ 上一篇我们已经完成了左侧菜单栏的基本样式功能,这一篇我们就主要来开发右侧的Markd ...

  8. 《手摸手带你学ClickHouse》之Oracle同步数据到Clickhouse

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 chaodev 即可关注. 文章目录 前文回顾: <手摸手带你学ClickHouse>之安装部署 <手摸手带你学Cl ...

  9. 手摸手带你写项目----秒杀系统(一)

    博客地址: 手摸手带你写项目----秒杀系统(一) 所有文章会第一时间在博客更新! 后面的时间我会手摸手带大家一起写几个实战性的项目.主要希望能应用上之前梳理的那些知识点,同时让没有写过项目的同学对实 ...

最新文章

  1. 《用Python进行自然语言处理》第 9 章 建立基于特征的文法
  2. C++ kadane算法的实现之二(附完整源码)
  3. Basic的Json与Xml
  4. 零基础学Python-爬虫-3、利用CSS选择器爬取整篇网络小说
  5. 方程组的直接解法和迭代法 python_数据与算法总结——基本数值算法2(线性方程组)...
  6. 才博教育:AI口语学习平台上云
  7. MapReduce二次排序
  8. python redis模块常用_Python基础-redis模块使用
  9. abb机器人焊接编程视频教程_智能制造仿真编程之带导轨的ABB机器人
  10. php中表格怎么垂直居中,如何利用display:table-cell实现垂直居中?
  11. googletest,笔记20190821
  12. 【BZOJ4538】【HNOI2016】网络(树链剖分,线段树,堆)
  13. 2020年黑龙江省水稻种植分布数据
  14. 火狐使用谷歌搜索_Google拒绝使用Firefox
  15. java 中文转英文性能最快
  16. iOS代码质量要求_iOS 无需越狱修改和平精英极限画质
  17. 在Excel中通过VBA实现不定区域的标准差计算
  18. 适用于计量站电子测量仪器自动检定系统设计
  19. 开源一个IDA小插件:修复VMP dump导入函数
  20. 强化学习用于金融时序问题(Q,DQN,AC)

热门文章

  1. ASPxGridView之PreviewRow
  2. Python去除字符串前后空格
  3. pycharm与python环境配置
  4. redis sentinel哨兵模式集群搭建教程
  5. JavaScript的DOM操作-重点部分-第一部分
  6. 关于Java函数传参以及参数在函数内部改变的问题——JAVA值传递与引用最浅显的说明!...
  7. Knockout应用开发指南 第八章:简单应用举例(1)
  8. 软件项目第一次Sprint评分表
  9. 从Asp.net转到Php之调试
  10. 敏捷开发一千零一问系列之一:序言及解决问题的心法(无我)