App.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <template>
  2. <div id="app">
  3. <div class="view-container">
  4. <AppHeader :visible="visible"></AppHeader>
  5. <transition :name="transitionName">
  6. <router-view />
  7. </transition>
  8. <AppBackTop></AppBackTop>
  9. </div>
  10. </div>
  11. </template>
  12. <script>
  13. import AppHeader from '@/components/AppHeader.vue';
  14. import AppBackTop from '@/components/AppBackTop.vue';
  15. export default {
  16. name: 'app',
  17. components: {
  18. AppHeader,
  19. AppBackTop
  20. },
  21. data() {
  22. return {
  23. transitionName: "",
  24. isGray: false,
  25. visible:true,
  26. };
  27. },
  28. methods:{
  29. // 保存滚动值,这是兼容的写法
  30. handleScroll () {
  31. var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
  32. //变量scrollTop是滚动条滚动时,距离顶部的距离
  33. // var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
  34. // //变量windowHeight是可视区的高度
  35. // var windowHeight = document.documentElement.clientHeight || document.body.clientHeight;
  36. // //变量windowHeight是可视区的高度
  37. // var scrollHeight =document.documentElement.scrollHeight || document.body.scrollHeight;
  38. // //滚动条到底部的条件
  39. // if(scrollTop + windowHeight == scrollHeight){
  40. // //你要触发的方法
  41. // }
  42. if(scrollTop >= 80){
  43. this.visible = false;
  44. }else{
  45. this.visible = true;
  46. }
  47. },
  48. },
  49. mounted () {
  50. window.addEventListener('scroll', this.handleScroll)
  51. },
  52. destroyed () {
  53. // 离开该页面需要移除这个监听的事件,不然会报错
  54. window.removeEventListener('scroll', this.handleScroll)
  55. },
  56. watch: {
  57.   //使用watch 监听$router的变化
  58.   $route(to, from) {
  59.     //如果to索引大于from索引,判断为前进状态,反之则为后退状态
  60.     console.log(to, "to");
  61.     console.log(from, "from");
  62.     if (to.meta.index > from.meta.index) {
  63.       //设置动画名称
  64.       this.transitionName = "slide-left";
  65.     } else {
  66.       this.transitionName = "slide-right";
  67.     }
  68.   },
  69. },
  70. }
  71. </script>
  72. <style>
  73. .view-container{
  74. position: relative;
  75. margin: 0 auto;
  76. width: 100%;
  77. max-width: 1200px;
  78. }
  79. .slide-right-enter-active,
  80. .slide-right-leave-active,
  81. .slide-left-enter-active,
  82. .slide-left-leave-active {
  83. will-change: transform;
  84. transition: all 250ms;
  85. position: fixed;
  86. }
  87. .slide-right-enter {
  88. opacity: 0;
  89. transform: translate3d(-100%, 0, 0);
  90. }
  91. .slide-right-leave-active {
  92. opacity: 0;
  93. transform: translate3d(100%, 0, 0);
  94. }
  95. .slide-left-enter {
  96. opacity: 0;
  97. transform: translate3d(100%, 0, 0);
  98. }
  99. .slide-left-leave-active {
  100. opacity: 0;
  101. transform: translate3d(-100%, 0, 0);
  102. }
  103. </style>