美文网首页前端开发笔记Web前端之路让前端飞
Vue2.0 过渡动画——仿微信左右切换效果

Vue2.0 过渡动画——仿微信左右切换效果

作者: Yunfly | 来源:发表于2017-06-08 18:00 被阅读13661次

需要用到的技术栈Vue+Vuex

先丢个图


过渡动画.gif

awesomes上寻找移动端框架的时候意外发现了vux的页面切换效果,后面由于其他考虑没有选用但是这个切换效果确实感觉很有新意,也就看了下源码,这里贴一份备用。

//app.vue
<transition :name="'vux-pop-' + (direction === 'forward' ? 'in' : 'out')">
      <keep-alive>
      <router-view class="router-view" ></router-view>
      </keep-alive>
</transition>
<script>
  import { mapState } from 'vuex'
  import sideFooter from "./components/Footer.vue"

  export default {
    name: 'app',
    data () {
      return {
        showFooter : false
      }
    },
    components : {
      sideFooter
    },
    computed:{
      ...mapState({
        direction: state => state.mutations.direction
      })
    },
  }
</script>

<style scoped>
 .vux-pop-out-enter-active,
  .vux-pop-out-leave-active,
  .vux-pop-in-enter-active,
  .vux-pop-in-leave-active {
    will-change: transform;
    transition: all 250ms;
    height: 100%;
    top: 0;
    position: absolute;
    backface-visibility: hidden;
    perspective: 1000;
  }

  .vux-pop-out-enter {
    opacity: 0;
    transform: translate3d(-100%, 0, 0);
  }

  .vux-pop-out-leave-active {
    opacity: 0;
    transform: translate3d(100%, 0, 0);
  }

  .vux-pop-in-enter {
    opacity: 0;
    transform: translate3d(100%, 0, 0);
  }

  .vux-pop-in-leave-active {
    opacity: 0;
    transform: translate3d(-100%, 0, 0);
  }
</style>
// main.js
const history = window.sessionStorage;
history.clear()
let historyCount = history.getItem('count') * 1 || 0;
history.setItem('/', 0);

router.beforeEach(function (to, from, next) {

  const toIndex = history.getItem(to.path);
  const fromIndex = history.getItem(from.path);

  if (toIndex) {
    if (!fromIndex || parseInt(toIndex, 10) > parseInt(fromIndex, 10) || (toIndex === '0' && fromIndex === '0')) {
      store.commit('UPDATE_DIRECTION', {direction: 'forward'})
    } else {
      store.commit('UPDATE_DIRECTION', {direction: 'reverse'})
    }
  } else {
    ++historyCount;
    history.setItem('count', historyCount);
    to.path !== '/' && history.setItem(to.path, historyCount);
    store.commit('UPDATE_DIRECTION', {direction: 'forward'})
  }
    next()
});

这里还用到了vuex,但是我stroe写了很多就不提出来了,主要就是通过 UPDATE_DIRECTION方法更新每一次的路由方向是前进还是后退。


man.js里面主要思想就是给路由增加一个索引存到sessionStorage里面,以点击过的索引值不变,新增加的路由,索引增加1,同时count+1,这样在页面切换时通过比较索引值的大小,大的向右小的向左,做到左右有规律的过渡。

好了至此一个左右切换的过渡效果就成了,最近由于一直在开发也没怎么更新文章,如果有朋友有好的想法欢迎与我交流。


另附github地址:https://github.com/Yunfly/vue-wechatAnimation

相关文章

  • Vue2.0 过渡动画——仿微信左右切换效果

    需要用到的技术栈Vue+Vuex 先丢个图 在awesomes上寻找移动端框架的时候意外发现了vux的页面切换效果...

  • vue 路由动画过渡效果

    为了增加用户体验,在切换路由时可加动态的过渡效果。应用场景: 切换如上页面的底部导航栏,添加 动画过渡效果。 1、...

  • vue 路由动画过渡效果

    为了增加用户体验,在切换路由时可加动态的过渡效果。应用场景: 切换如上页面的底部导航栏,添加 动画过渡效果。 1、...

  • 🔥一款高仿mac版微信的单页面应用

    ??一款高仿mac版微信的单页面应用 概述 ?? 利用Vue2.0模仿微信app,努力做到以假乱真的效果。个人独立...

  • iOS条形码动画

    WeiXinBarCodeImitate 是仿微信支付条形码的切换动画,包含条形码的生成、截图、旋转动画。gith...

  • 仿新版微信浮窗效果

    仿新版微信浮窗效果 仿新版微信浮窗效果

  • 如何实现一个图片浏览器

    实现效果 目录结构 调用方法 不带过渡动画,直接添加图片浏览器到window上 附带微信图片浏览器一样的过渡动画 ...

  • 【Android视图效果】共享元素实现仿微信查看大图效果

    在之前的文章中,我们通过动画实现了这个,具体可以查看【Android 动画】动画详解之仿微信查看大图效果(四),这...

  • Vue中的动画

    基础CSS过渡和动画 动画:keyframes过渡:transition 列表动画 状态动画 组件和元素切换 1....

  • CSS3过渡动画

    过渡动画 transition属性简介transition是网页上的过渡动画,变化的逐渐过渡效果,简称过渡动画!列...

网友评论

  • 97e262b913d6:跳转的时候整体页面先乱一下,然后才好。建议将这里的宽度设成100%:
    .vux-pop-out-enter-active,
    .vux-pop-out-leave-active,
    .vux-pop-in-enter-active,
    .vux-pop-in-leave-active{
    width:100%
    }
    Yunfly:@學著往前走 嗯,这篇文章只是给大家解析一下思路,可以根据自己的场景改动,满足项目要求
  • 62ac776458d8:请问这个demo,当跳转非子页面的时候动画不会乱吗
  • 1f2483162c46:请问一下滑动的效果 有白屏滑动 效果有点缓慢 应该怎么解决呢
    Yunfly:什么设备呢,可以试试提高css3性能的一些方法
  • be668982793b:不错,应该就是你了,哈哈。
    有消息,请查看
  • 星枫岳:楼主,如果出现循环的界面怎么办,现在由 "详情页" 前往 "列表页" 这时候是前进的动画,然后点击了"列表页"上的项目要前往 "详情页"这个同样也是需要前进的动画,可是再路由判断上就会变成后退了
    Yunfly:@星枫岳 可在main.js里面的router.beforeEach直接写判断,也可以在session中删除详情页的序号让他重新获取序号
  • 开车去环游世界:vux(https://vux.li/#/) 在微信不用『返回』按钮点击返回的时候,用手势触摸屏幕返回的时候,会有两次过渡效果,这个有思路解决嘛?
    kevinlvhsl:@Yunfly 如果不是微信,而就是safari网页呢? 手势返回就是会播放两次动效, 也没有好的解决方案了是吧?
    Yunfly:手势返回是指向右滑动吗? 单页面应用好像就直接退出回到公众号了吧
  • 大桔子123:楼主,我又发现一个新问题,这个记录sessionStorage 的过程是从 第一个路由组件开始的,如果 路由地址是 http://192.168.31.13:8081/#/index2 而不是 http://192.168.31.13:8081/#/index1 ,此时 history 里记录的 toIndex 和 fromIndex 就乱掉了(即不是按照顺序点击每个tab页的),楼主有没有解决办法啊
    大桔子123:@Yunfly 效果还不错,,请问你这 gif 图片是怎么做的啊??我百度了一番也没找到好办法
    大桔子123:@Yunfly 对的,你这种方法我觉得可行,我试一下
    Yunfly:@大橘子小锦 比如底部导航栏或者说首页的的几个入口你是想按照顺序来切换,可以预先把这几个路由写入sessionStroage中,count的初始值也更改一下, 就可以解决了,至于里面的二级页面,只需要有一个切换效果就行。
  • 大桔子123:请问楼主,这个 状态为什么要存储在 session storage 中,为什么不存储在 localstorage 中,有什么特别的含义吗
  • 大桔子123:我发现切换的时候中间有根白条,在速度快的时候,白条很扎眼,
    Yunfly: @大橘子小锦 这个我只在底部有看到滚动条,你在中间是不是因为body跟htnl的高度没设置100%?
  • db4de7b4e62a:思路跟官方的差不离,自己想出来很不错很不错。不过实际中特别是低端安卓机过场动画会有卡顿
    Yunfly: @蓟门忘轩 确实,所以我们把时间调整到300-100ms之间,速度快了,体验效果能稍微提上来点,移动端的动画确实不像PC那么好
  • b0833e25542b:其实没有什么卵用,我们实现了和微信转场动画一模一样的效果。但是无法解决手机手势右划返回上一页,导致体验会特别差。不如没有转场动画。 你发的这种根本和微信转场动画一点也不像
    Yunfly: @二哲 我说过有手势😳 是说别搞错了
    b0833e25542b:@Yunfly 别搞错重点,是即使这样做了,手势返回上一页,依旧会出现动画,导致用户体验就像bug。
    Yunfly:你觉得这种根本一点也不想,那请你把你一摸一样的贴出来供大家赞赏一下而不是在这里玩文字,谢谢。
  • 0cbf60113d5e:没有滚动条的问题?
    Yunfly:滚动条的问题倒是没出现过
  • Chris:<!-- 使用动态的 transition name -->
    <transition :name="transitionName">
    <router-view></router-view>
    </transition>
    // 接着在父组件内
    // watch $route 决定使用哪种过渡
    watch: {
    '$route' (to, from) {
    const toDepth = to.path.split('/').length
    const fromDepth = from.path.split('/').length
    this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left'
    }
    }
    这是vue官方的写法。。。

    还有楼主有没有试过微信右滑返回时的动效
    一个小小的蚂蚁:这个方法如果是平级的路由怎么办?路径长度都一样了。
    aa3c9fcd8f9b:你好这个api在那里找到的
    Yunfly:我留了一个手势库在github项目里,简单的右滑返回上一页有可能实现,但是要想微信那种的效果,暂时没有试过。
  • 85bad439a440:源码呢楼主
    Yunfly:文末附上了github地址哈
  • garyhu1:有源码嘛,求楼主的源码
    Yunfly:文末附上了github地址哈

本文标题:Vue2.0 过渡动画——仿微信左右切换效果

本文链接:https://www.haomeiwen.com/subject/rcstqxtx.html