1
1
<template >
2
2
<!-- https://www.cnblogs.com/mmzuo-798/p/10712009.html -->
3
3
<div class =" vue-route-transition" >
4
- <transition :name =" pageDirection" >
5
- <keep-alive v-show =" $route.meta.keepAlive" >
6
- <router-view :kkk =" pageDirection" id =" mmnn" ></router-view >
4
+ <!-- <transition :name="state.pageDirection" @leave="setRouterMap">
5
+ <keep-alive v-if="this.keepAlive===true && $route.meta.keepAlive!==false">
6
+ <router-view></router-view>
7
+ </keep-alive>
8
+ <router-view v-else></router-view>
9
+ </transition> -->
10
+ <!-- <transition :name="state.pageDirection" @leave="setRouterMap">
11
+ <keep-alive>
12
+ <router-view
13
+ v-if="keepAlive === true && $route.meta.keepAlive !== false"
14
+ ></router-view>
7
15
</keep-alive>
8
16
</transition>
9
- <transition :name =" pageDirection" >
17
+ <transition :name="state. pageDirection" @leave="setRouterMap ">
10
18
<router-view
11
- :kkk =" pageDirection"
12
- id =" xxoo"
13
- v-show =" $route.meta.keepAlive === false"
19
+ v-if="keepAlive === false || $route.meta.keepAlive === false"
14
20
></router-view>
15
- </transition >
16
- <!-- <transition :name="state.pageDirection" @leave="setRouterMap">
17
- <div class="abc" v-if="$route.meta.keepAlive !== false" key="xx">
18
- <keep-alive>
19
- <router-view></router-view>
20
- </keep-alive>
21
- </div>
22
- <div class="abc" v-if="$route.meta.keepAlive === false" key="oo">
23
- <router-view></router-view>
24
- </div>
25
21
</transition> -->
22
+ <transition
23
+ v-on:before-enter =" beforeEnter"
24
+ v-on:enter =" enter"
25
+ v-on:after-enter =" afterEnter"
26
+ v-on:before-leave =" beforeLeave"
27
+ v-on:leave =" leave"
28
+ v-on:after-leave =" afterLeave"
29
+ v-bind:css =" false"
30
+ >
31
+ <keep-alive >
32
+ <router-view
33
+ v-if =" keepAlive === true && $route.meta.keepAlive !== false"
34
+ ></router-view >
35
+ </keep-alive >
36
+ </transition >
37
+ <transition
38
+ v-on:before-enter =" beforeEnter"
39
+ v-on:enter =" enter"
40
+ v-on:after-enter =" afterEnter"
41
+ v-on:before-leave =" beforeLeave"
42
+ v-on:leave =" leave"
43
+ v-on:after-leave =" afterLeave"
44
+ v-bind:css =" false"
45
+ >
46
+ <router-view
47
+ v-if =" keepAlive === false || $route.meta.keepAlive === false"
48
+ ></router-view >
49
+ </transition >
50
+ <!-- <transition-group :name="state.pageDirection" @leave="setRouterMap">
51
+ <keep-alive :key="1234">
52
+ <router-view :key="2134" v-if="this.keepAlive===true && $route.meta.keepAlive!==false"></router-view>
53
+ </keep-alive>
54
+ <router-view :key="234" v-if="this.keepAlive===false || $route.meta.keepAlive===false"></router-view>
55
+ </transition-group> -->
26
56
</div >
27
57
</template >
28
58
<script >
@@ -46,7 +76,6 @@ export default {
46
76
localSessionRouteChain = [];
47
77
}
48
78
return {
49
- pageDirection: " fade" ,
50
79
state: {
51
80
addCount: localSessionRouteChain .length ,
52
81
routerMap: {},
@@ -56,6 +85,131 @@ export default {
56
85
};
57
86
},
58
87
methods: {
88
+ // --------
89
+ // 进入中
90
+ // --------
91
+
92
+ beforeEnter : function (el ) {
93
+ // ...
94
+ console .log (" beforeEnter" , el);
95
+ console .log (this .state .pageDirection );
96
+
97
+ let dir = this .state .pageDirection ;
98
+ if (dir === " slide-left" ) {
99
+ // 进入
100
+ // el.style.transform = 'translate(100%, 0)'
101
+ } else if (dir === " slide-right" ) {
102
+ // 返回
103
+ // el.style.transform = 'translate(-20%, 0)'
104
+ } else {
105
+ // fade
106
+ }
107
+
108
+ console .log (el .style .transform );
109
+ console .log (" -----------------" );
110
+ },
111
+ // 当与 CSS 结合使用时
112
+ // 回调函数 done 是可选的
113
+ enter : function (el , done ) {
114
+ // ...
115
+ console .log (" enter" , el);
116
+ console .log (this .state .pageDirection );
117
+ console .log (" -----------------" );
118
+ // eslint-disable-next-line no-unused-expressions
119
+ el .offsetWidth ;
120
+ let dir = this .state .pageDirection ;
121
+ if (dir === " slide-left" ) {
122
+ // 进入
123
+ // el.style.transform = 'translate(0, 0)'
124
+ // el.style.transition = 'all 0.4s'
125
+ el .style .animation = " pageFromRightToCenter 5000ms forwards" ;
126
+ el .style .zIndex = " 10" ;
127
+ el .style .boxShadow = " -3px 0 5px rgba(0, 0, 0, 0.1)" ;
128
+ } else if (dir === " slide-right" ) {
129
+ // 返回
130
+ // el.style.transform = 'translate(0, 0)'
131
+ // el.style.transition = 'transform 0.4s'
132
+ el .style .animation = " pageFromLeftToCenter 5000ms forwards" ;
133
+ el .style .zIndex = " 1" ;
134
+ } else {
135
+ // fade
136
+ }
137
+ setTimeout (() => {
138
+ done ();
139
+ }, 5000 );
140
+ // done()
141
+ },
142
+ afterEnter : function (el ) {
143
+ // ...
144
+ console .log (" afterEnter" , el);
145
+ console .log (this .state .pageDirection );
146
+ console .log (" -----------------" );
147
+ },
148
+
149
+ // --------
150
+ // 离开时
151
+ // --------
152
+
153
+ beforeLeave : function (el ) {
154
+ // ...
155
+ console .log (" beforeLeave" , el);
156
+ console .log (this .state .pageDirection );
157
+ console .log (" -----------------" );
158
+
159
+ let dir = this .state .pageDirection ;
160
+ if (dir === " slide-left" ) {
161
+ // 进入
162
+ // el.style.transform = 'translate(0, 0)'
163
+ } else if (dir === " slide-right" ) {
164
+ // 返回
165
+ // el.style.transform = 'translate(0, 0)'
166
+ } else {
167
+ // fade
168
+ }
169
+ },
170
+ // 当与 CSS 结合使用时
171
+ // 回调函数 done 是可选的
172
+ leave : function (el , done ) {
173
+ // ...
174
+ console .log (" leave" , el);
175
+ console .log (this .state .pageDirection );
176
+ let dir = this .state .pageDirection ;
177
+ let to = this .state .routerMap .to .replace (/ \/ / g , " _" );
178
+ let from = this .state .routerMap .from .replace (/ \/ / g , " _" );
179
+ console .log (" setRouterMap" , dir);
180
+ console .log (" setRouterMap" , to);
181
+ console .log (" setRouterMap" , from);
182
+ console .log (" -----------------" );
183
+ // eslint-disable-next-line no-unused-expressions
184
+ el .offsetWidth ;
185
+ if (dir === " slide-left" ) {
186
+ // el.style.transform = 'translate(-100%, 0)'
187
+ // el.style.transition = 'all 0.4s'
188
+ el .style .animation = " pageFromCenterToLeft 5000ms forwards" ;
189
+ el .style .zIndex = " 1" ;
190
+ } else if (dir === " slide-right" ) {
191
+ // 返回
192
+ // el.style.transform = 'translate(100%, 0)'
193
+ // el.style.transition = 'all 0.4s'
194
+ el .style .animation = " pageFromCenterToRight 5000ms forwards" ;
195
+ el .style .boxShadow = " -3px 0 5px rgba(0, 0, 0, 0.1)" ;
196
+ el .style .zIndex = " 10" ;
197
+ } else {
198
+ // fade
199
+ }
200
+
201
+ setTimeout (() => {
202
+ done ();
203
+ }, 5000 );
204
+ // done()
205
+ },
206
+ afterLeave : function (el ) {
207
+ // ...
208
+ console .log (" afterLeave" , el);
209
+ console .log (this .state .pageDirection );
210
+ console .log (" -----------------" );
211
+ },
212
+
59
213
addRouteChain (route ) {
60
214
console .log (" addRouteChain - " , this .state .addCount );
61
215
console .log (" addRouteChain - " , localSessionRouteChain .length );
@@ -93,7 +247,6 @@ export default {
93
247
},
94
248
setPageDirection ({ dir, to, from }) {
95
249
this .state .pageDirection = dir;
96
- this .pageDirection = dir;
97
250
this .state .routerMap [" to" ] = to .path ;
98
251
this .state .routerMap [" from" ] = from .path ;
99
252
},
@@ -119,48 +272,6 @@ export default {
119
272
} else {
120
273
}
121
274
} catch (error) {}
122
- },
123
- // --------
124
- // 进入中
125
- // --------
126
-
127
- beforeEnter : function (el ) {
128
- // ...
129
- console .log (" beforeEnter" , el);
130
- },
131
- // 当与 CSS 结合使用时
132
- // 回调函数 done 是可选的
133
- enter : function (el , done ) {
134
- // ...
135
- console .log (" enter" , el);
136
-
137
- done ();
138
- },
139
- afterEnter : function (el ) {
140
- // ...
141
- // ...
142
- console .log (" afterEnter" , el);
143
- },
144
-
145
- // --------
146
- // 离开时
147
- // --------
148
- beforeLeave : function (el ) {
149
- // ...
150
- console .log (" beforeLeave" , el);
151
- },
152
- // 当与 CSS 结合使用时
153
- // 回调函数 done 是可选的
154
- leave : function (el , done ) {
155
- console .log (" leave" , el);
156
-
157
- // ...
158
- done ();
159
- },
160
- afterLeave : function (el ) {
161
- console .log (" leaafterLeaveve" , el);
162
-
163
- // ...
164
275
}
165
276
},
166
277
mounted () {
@@ -203,25 +314,22 @@ export default {
203
314
});
204
315
},
205
316
created () {
206
- console .log (" created😁😁😁 " , this .$route .meta );
207
- console .log (" created😁😁😁 " , this .state );
317
+ // console.log(' created😁😁😁 ' , this.$route.meta)
318
+ // console.log(' created😁😁😁 ' , this.state)
208
319
},
209
320
activated () {
210
- console .log (" activated😁😁😁 " , this .$route .meta );
211
- console .log (" activated😁😁😁 " , this .state );
321
+ // console.log(' activated😁😁😁 ' , this.$route.meta)
322
+ // console.log(' activated😁😁😁 ' , this.state)
212
323
}
213
324
};
214
325
</script >
215
326
216
- <style scoped></style >
217
-
218
- <style scoped>
219
- .abc {
220
- position : absolute ;
327
+ <style lang="less">
328
+ html ,
329
+ body {
221
330
width : 100% ;
222
331
height : 100% ;
223
332
}
224
- /* 子绝父相 */
225
333
.vue-route-transition {
226
334
position : absolute ;
227
335
width : 100% ;
@@ -232,9 +340,8 @@ export default {
232
340
backface-visibility : hidden ;
233
341
perspective : 1000 ;
234
342
}
235
-
236
343
.fade-enter-active {
237
- animation : pageFadeIn 400 ms forwards ;
344
+ animation : pageFadeIn 5000 ms forwards ;
238
345
}
239
346
@keyframes pageFadeIn {
240
347
from {
@@ -245,27 +352,28 @@ export default {
245
352
}
246
353
}
247
354
355
+ /* 路由前进,退出*/
356
+ .slide-left-leave-active {
357
+ animation : pageFromCenterToLeft 5000ms forwards ;
358
+ z-index : 1 ;
359
+ }
360
+
248
361
/* 路由后退,进入*/
249
362
.slide-right-enter-active {
250
- animation : pageFromLeftToCenter 10000 ms forwards ;
363
+ animation : pageFromLeftToCenter 5000 ms forwards ;
251
364
z-index : 1 ;
252
365
}
253
366
254
367
/* 路由后退,退出*/
255
368
.slide-right-leave-active {
256
- animation : pageFromCenterToRight 10000 ms forwards ;
369
+ animation : pageFromCenterToRight 5000 ms forwards ;
257
370
z-index : 10 ;
258
371
box-shadow : -3px 0 5px rgba (0 , 0 , 0 , 0.1 );
259
372
}
260
373
261
- /* 路由前进,退出*/
262
- .slide-left-leave-active {
263
- animation : pageFromCenterToLeft 10000ms forwards ;
264
- z-index : 9 ;
265
- }
266
374
/* 路由前进,进入*/
267
375
.slide-left-enter-active {
268
- animation : pageFromRightToCenter 10000 ms forwards ;
376
+ animation : pageFromRightToCenter 5000 ms forwards ;
269
377
z-index : 10 ;
270
378
box-shadow : -3px 0 5px rgba (0 , 0 , 0 , 0.1 );
271
379
}
@@ -288,6 +396,7 @@ export default {
288
396
}
289
397
290
398
/* 路由前进,退出*/
399
+
291
400
@keyframes pageFromCenterToLeft {
292
401
from {
293
402
opacity : 1 ;
0 commit comments