Vue--过渡动画实现的三种方式
一.使用vue的transition标签结合css样式完成动画
1 <!DOCTYPE html>2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <meta http-equiv="X-UA-Compatible" content="ie=edge">
7 <title>Document</title>
8 <style>
9 /* .v-enter-active,.v-leave-active{
10 transition:all 2s;
11 }
12 .v-enter,.v-leave-to{
13 margin-left: 100px;
14 }
15 .v-enter-to,.v-leave{
16 margin-left:0px;
17 } */
18 .show-enter-active,.show-leave-active{
19 transition:all 2s;
20 }
21 .show-enter,.show-leave-to{
22 margin-left: 100px;
23 }
24 .show-enter-to,.show-leave{
25 margin-left:0px;
26 }
27 </style>
28 <script src="../vue2.4.4.js"></script>
29 </head>
30
31 <body>
32 <!-- 定义一个vue的管理区块,(MVVM中的View) -->
33 <!--
34 如果要使用动画效果:
35 第一种方式是使用transition标签加css样式结合完成:
36 1.给需要运动的元素加入transition标签
37 2.默认情况下如果控制了transition标签元素的显示和隐藏它会默认
38 给这个元素加入一些class
39 隐藏: 加入类名:
40 v-leave
41 v-leave-active
42 v-leave-to
43
44 显示: 加入类名:
45 v-enter 准备进行运动的状态(起始状态)
46 v-enter-active 整个运动状态
47 v-enter-to 整个运动状态(强调运动的结果,结束状态)
48 3.将来如果给transition设置一个name为“show”以后,将来所有的类的名称都需要改变,默认前缀为v-
49 如果加入了name属性,需要将v- 改为show-
50 -->
51 <div >
52 <button @click="toggle">显示/隐藏</button><br>
53 <!-- <transition > -->
54 <transition name="show" >
55 <span class="show" v-show="isshow">it 传说</span>
56 </transition>
57 </div>
58
59 </body>
60
61 <script>
62
63 // 实例化vue对象(MVVM中的View Model)
64 new Vue({
65 // vm控制的区块为id为app的div,此div中的所有vue指令均可以被vm解析
66 el:'#app',
67 data:{
68 // 数据 (MVVM中的Model)
69 isshow:false
70 },
71 methods:{
72 toggle:function(){
73 this.isshow = !this.isshow;
74 }
75 }
76 })
77 </script>
78 </html>
二.利用animate.css结合transition实现动画
animate.css 演示地址 : https://daneden.github.io/animate.css/
1 @charset "UTF-8";2
3 /*!
4 * animate.css -http://daneden.me/animate
5 * Version - 3.5.2
6 * Licensed under the MIT license - http://opensource.org/licenses/MIT
7 *
8 * Copyright (c) 2017 Daniel Eden
9 */
10
11 .animated {
12 animation-duration: 1s;
13 animation-fill-mode: both;
14 }
15
16 .animated.infinite {
17 animation-iteration-count: infinite;
18 }
19
20 .animated.hinge {
21 animation-duration: 2s;
22 }
23
24 .animated.flipOutX,
25 .animated.flipOutY,
26 .animated.bounceIn,
27 .animated.bounceOut {
28 animation-duration: .75s;
29 }
30
31 @keyframes bounce {
32 from, 20%, 53%, 80%, to {
33 animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
34 transform: translate3d(0,0,0);
35 }
36
37 40%, 43% {
38 animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
39 transform: translate3d(0, -30px, 0);
40 }
41
42 70% {
43 animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
44 transform: translate3d(0, -15px, 0);
45 }
46
47 90% {
48 transform: translate3d(0,-4px,0);
49 }
50 }
51
52 .bounce {
53 animation-name: bounce;
54 transform-origin: center bottom;
55 }
56
57 @keyframes flash {
58 from, 50%, to {
59 opacity: 1;
60 }
61
62 25%, 75% {
63 opacity: 0;
64 }
65 }
66
67 .flash {
68 animation-name: flash;
69 }
70
71 /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
72
73 @keyframes pulse {
74 from {
75 transform: scale3d(1, 1, 1);
76 }
77
78 50% {
79 transform: scale3d(1.05, 1.05, 1.05);
80 }
81
82 to {
83 transform: scale3d(1, 1, 1);
84 }
85 }
86
87 .pulse {
88 animation-name: pulse;
89 }
90
91 @keyframes rubberBand {
92 from {
93 transform: scale3d(1, 1, 1);
94 }
95
96 30% {
97 transform: scale3d(1.25, 0.75, 1);
98 }
99
100 40% {
101 transform: scale3d(0.75, 1.25, 1);
102 }
103
104 50% {
105 transform: scale3d(1.15, 0.85, 1);
106 }
107
108 65% {
109 transform: scale3d(.95, 1.05, 1);
110 }
111
112 75% {
113 transform: scale3d(1.05, .95, 1);
114 }
115
116 to {
117 transform: scale3d(1, 1, 1);
118 }
119 }
120
121 .rubberBand {
122 animation-name: rubberBand;
123 }
124
125 @keyframes shake {
126 from, to {
127 transform: translate3d(0, 0, 0);
128 }
129
130 10%, 30%, 50%, 70%, 90% {
131 transform: translate3d(-10px, 0, 0);
132 }
133
134 20%, 40%, 60%, 80% {
135 transform: translate3d(10px, 0, 0);
136 }
137 }
138
139 .shake {
140 animation-name: shake;
141 }
142
143 @keyframes headShake {
144 0% {
145 transform: translateX(0);
146 }
147
148 6.5% {
149 transform: translateX(-6px) rotateY(-9deg);
150 }
151
152 18.5% {
153 transform: translateX(5px) rotateY(7deg);
154 }
155
156 31.5% {
157 transform: translateX(-3px) rotateY(-5deg);
158 }
159
160 43.5% {
161 transform: translateX(2px) rotateY(3deg);
162 }
163
164 50% {
165 transform: translateX(0);
166 }
167 }
168
169 .headShake {
170 animation-timing-function: ease-in-out;
171 animation-name: headShake;
172 }
173
174 @keyframes swing {
175 20% {
176 transform: rotate3d(0, 0, 1, 15deg);
177 }
178
179 40% {
180 transform: rotate3d(0, 0, 1, -10deg);
181 }
182
183 60% {
184 transform: rotate3d(0, 0, 1, 5deg);
185 }
186
187 80% {
188 transform: rotate3d(0, 0, 1, -5deg);
189 }
190
191 to {
192 transform: rotate3d(0, 0, 1, 0deg);
193 }
194 }
195
196 .swing {
197 transform-origin: top center;
198 animation-name: swing;
199 }
200
201 @keyframes tada {
202 from {
203 transform: scale3d(1, 1, 1);
204 }
205
206 10%, 20% {
207 transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
208 }
209
210 30%, 50%, 70%, 90% {
211 transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
212 }
213
214 40%, 60%, 80% {
215 transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
216 }
217
218 to {
219 transform: scale3d(1, 1, 1);
220 }
221 }
222
223 .tada {
224 animation-name: tada;
225 }
226
227 /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
228
229 @keyframes wobble {
230 from {
231 transform: none;
232 }
233
234 15% {
235 transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
236 }
237
238 30% {
239 transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
240 }
241
242 45% {
243 transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
244 }
245
246 60% {
247 transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
248 }
249
250 75% {
251 transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
252 }
253
254 to {
255 transform: none;
256 }
257 }
258
259 .wobble {
260 animation-name: wobble;
261 }
262
263 @keyframes jello {
264 from, 11.1%, to {
265 transform: none;
266 }
267
268 22.2% {
269 transform: skewX(-12.5deg) skewY(-12.5deg);
270 }
271
272 33.3% {
273 transform: skewX(6.25deg) skewY(6.25deg);
274 }
275
276 44.4% {
277 transform: skewX(-3.125deg) skewY(-3.125deg);
278 }
279
280 55.5% {
281 transform: skewX(1.5625deg) skewY(1.5625deg);
282 }
283
284 66.6% {
285 transform: skewX(-0.78125deg) skewY(-0.78125deg);
286 }
287
288 77.7% {
289 transform: skewX(0.390625deg) skewY(0.390625deg);
290 }
291
292 88.8% {
293 transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
294 }
295 }
296
297 .jello {
298 animation-name: jello;
299 transform-origin: center;
300 }
301
302 @keyframes bounceIn {
303 from, 20%, 40%, 60%, 80%, to {
304 animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
305 }
306
307 0% {
308 opacity: 0;
309 transform: scale3d(.3, .3, .3);
310 }
311
312 20% {
313 transform: scale3d(1.1, 1.1, 1.1);
314 }
315
316 40% {
317 transform: scale3d(.9, .9, .9);
318 }
319
320 60% {
321 opacity: 1;
322 transform: scale3d(1.03, 1.03, 1.03);
323 }
324
325 80% {
326 transform: scale3d(.97, .97, .97);
327 }
328
329 to {
330 opacity: 1;
331 transform: scale3d(1, 1, 1);
332 }
333 }
334
335 .bounceIn {
336 animation-name: bounceIn;
337 }
338
339 @keyframes bounceInDown {
340 from, 60%, 75%, 90%, to {
341 animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
342 }
343
344 0% {
345 opacity: 0;
346 transform: translate3d(0, -3000px, 0);
347 }
348
349 60% {
350 opacity: 1;
351 transform: translate3d(0, 25px, 0);
352 }
353
354 75% {
355 transform: translate3d(0, -10px, 0);
356 }
357
358 90% {
359 transform: translate3d(0, 5px, 0);
360 }
361
362 to {
363 transform: none;
364 }
365 }
366
367 .bounceInDown {
368 animation-name: bounceInDown;
369 }
370
371 @keyframes bounceInLeft {
372 from, 60%, 75%, 90%, to {
373 animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
374 }
375
376 0% {
377 opacity: 0;
378 transform: translate3d(-3000px, 0, 0);
379 }
380
381 60% {
382 opacity: 1;
383 transform: translate3d(25px, 0, 0);
384 }
385
386 75% {
387 transform: translate3d(-10px, 0, 0);
388 }
389
390 90% {
391 transform: translate3d(5px, 0, 0);
392 }
393
394 to {
395 transform: none;
396 }
397 }
398
399 .bounceInLeft {
400 animation-name: bounceInLeft;
401 }
402
403 @keyframes bounceInRight {
404 from, 60%, 75%, 90%, to {
405 animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
406 }
407
408 from {
409 opacity: 0;
410 transform: translate3d(3000px, 0, 0);
411 }
412
413 60% {
414 opacity: 1;
415 transform: translate3d(-25px, 0, 0);
416 }
417
418 75% {
419 transform: translate3d(10px, 0, 0);
420 }
421
422 90% {
423 transform: translate3d(-5px, 0, 0);
424 }
425
426 to {
427 transform: none;
428 }
429 }
430
431 .bounceInRight {
432 animation-name: bounceInRight;
433 }
434
435 @keyframes bounceInUp {
436 from, 60%, 75%, 90%, to {
437 animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
438 }
439
440 from {
441 opacity: 0;
442 transform: translate3d(0, 3000px, 0);
443 }
444
445 60% {
446 opacity: 1;
447 transform: translate3d(0, -20px, 0);
448 }
449
450 75% {
451 transform: translate3d(0, 10px, 0);
452 }
453
454 90% {
455 transform: translate3d(0, -5px, 0);
456 }
457
458 to {
459 transform: translate3d(0, 0, 0);
460 }
461 }
462
463 .bounceInUp {
464 animation-name: bounceInUp;
465 }
466
467 @keyframes bounceOut {
468 20% {
469 transform: scale3d(.9, .9, .9);
470 }
471
472 50%, 55% {
473 opacity: 1;
474 transform: scale3d(1.1, 1.1, 1.1);
475 }
476
477 to {
478 opacity: 0;
479 transform: scale3d(.3, .3, .3);
480 }
481 }
482
483 .bounceOut {
484 animation-name: bounceOut;
485 }
486
487 @keyframes bounceOutDown {
488 20% {
489 transform: translate3d(0, 10px, 0);
490 }
491
492 40%, 45% {
493 opacity: 1;
494 transform: translate3d(0, -20px, 0);
495 }
496
497 to {
498 opacity: 0;
499 transform: translate3d(0, 2000px, 0);
500 }
501 }
502
503 .bounceOutDown {
504 animation-name: bounceOutDown;
505 }
506
507 @keyframes bounceOutLeft {
508 20% {
509 opacity: 1;
510 transform: translate3d(20px, 0, 0);
511 }
512
513 to {
514 opacity: 0;
515 transform: translate3d(-2000px, 0, 0);
516 }
517 }
518
519 .bounceOutLeft {
520 animation-name: bounceOutLeft;
521 }
522
523 @keyframes bounceOutRight {
524 20% {
525 opacity: 1;
526 transform: translate3d(-20px, 0, 0);
527 }
528
529 to {
530 opacity: 0;
531 transform: translate3d(2000px, 0, 0);
532 }
533 }
534
535 .bounceOutRight {
536 animation-name: bounceOutRight;
537 }
538
539 @keyframes bounceOutUp {
540 20% {
541 transform: translate3d(0, -10px, 0);
542 }
543
544 40%, 45% {
545 opacity: 1;
546 transform: translate3d(0, 20px, 0);
547 }
548
549 to {
550 opacity: 0;
551 transform: translate3d(0, -2000px, 0);
552 }
553 }
554
555 .bounceOutUp {
556 animation-name: bounceOutUp;
557 }
558
559 @keyframes fadeIn {
560 from {
561 opacity: 0;
562 }
563
564 to {
565 opacity: 1;
566 }
567 }
568
569 .fadeIn {
570 animation-name: fadeIn;
571 }
572
573 @keyframes fadeInDown {
574 from {
575 opacity: 0;
576 transform: translate3d(0, -100%, 0);
577 }
578
579 to {
580 opacity: 1;
581 transform: none;
582 }
583 }
584
585 .fadeInDown {
586 animation-name: fadeInDown;
587 }
588
589 @keyframes fadeInDownBig {
590 from {
591 opacity: 0;
592 transform: translate3d(0, -2000px, 0);
593 }
594
595 to {
596 opacity: 1;
597 transform: none;
598 }
599 }
600
601 .fadeInDownBig {
602 animation-name: fadeInDownBig;
603 }
604
605 @keyframes fadeInLeft {
606 from {
607 opacity: 0;
608 transform: translate3d(-100%, 0, 0);
609 }
610
611 to {
612 opacity: 1;
613 transform: none;
614 }
615 }
616
617 .fadeInLeft {
618 animation-name: fadeInLeft;
619 }
620
621 @keyframes fadeInLeftBig {
622 from {
623 opacity: 0;
624 transform: translate3d(-2000px, 0, 0);
625 }
626
627 to {
628 opacity: 1;
629 transform: none;
630 }
631 }
632
633 .fadeInLeftBig {
634 animation-name: fadeInLeftBig;
635 }
636
637 @keyframes fadeInRight {
638 from {
639 opacity: 0;
640 transform: translate3d(100%, 0, 0);
641 }
642
643 to {
644 opacity: 1;
645 transform: none;
646 }
647 }
648
649 .fadeInRight {
650 animation-name: fadeInRight;
651 }
652
653 @keyframes fadeInRightBig {
654 from {
655 opacity: 0;
656 transform: translate3d(2000px, 0, 0);
657 }
658
659 to {
660 opacity: 1;
661 transform: none;
662 }
663 }
664
665 .fadeInRightBig {
666 animation-name: fadeInRightBig;
667 }
668
669 @keyframes fadeInUp {
670 from {
671 opacity: 0;
672 transform: translate3d(0, 100%, 0);
673 }
674
675 to {
676 opacity: 1;
677 transform: none;
678 }
679 }
680
681 .fadeInUp {
682 animation-name: fadeInUp;
683 }
684
685 @keyframes fadeInUpBig {
686 from {
687 opacity: 0;
688 transform: translate3d(0, 2000px, 0);
689 }
690
691 to {
692 opacity: 1;
693 transform: none;
694 }
695 }
696
697 .fadeInUpBig {
698 animation-name: fadeInUpBig;
699 }
700
701 @keyframes fadeOut {
702 from {
703 opacity: 1;
704 }
705
706 to {
707 opacity: 0;
708 }
709 }
710
711 .fadeOut {
712 animation-name: fadeOut;
713 }
714
715 @keyframes fadeOutDown {
716 from {
717 opacity: 1;
718 }
719
720 to {
721 opacity: 0;
722 transform: translate3d(0, 100%, 0);
723 }
724 }
725
726 .fadeOutDown {
727 animation-name: fadeOutDown;
728 }
729
730 @keyframes fadeOutDownBig {
731 from {
732 opacity: 1;
733 }
734
735 to {
736 opacity: 0;
737 transform: translate3d(0, 2000px, 0);
738 }
739 }
740
741 .fadeOutDownBig {
742 animation-name: fadeOutDownBig;
743 }
744
745 @keyframes fadeOutLeft {
746 from {
747 opacity: 1;
748 }
749
750 to {
751 opacity: 0;
752 transform: translate3d(-100%, 0, 0);
753 }
754 }
755
756 .fadeOutLeft {
757 animation-name: fadeOutLeft;
758 }
759
760 @keyframes fadeOutLeftBig {
761 from {
762 opacity: 1;
763 }
764
765 to {
766 opacity: 0;
767 transform: translate3d(-2000px, 0, 0);
768 }
769 }
770
771 .fadeOutLeftBig {
772 animation-name: fadeOutLeftBig;
773 }
774
775 @keyframes fadeOutRight {
776 from {
777 opacity: 1;
778 }
779
780 to {
781 opacity: 0;
782 transform: translate3d(100%, 0, 0);
783 }
784 }
785
786 .fadeOutRight {
787 animation-name: fadeOutRight;
788 }
789
790 @keyframes fadeOutRightBig {
791 from {
792 opacity: 1;
793 }
794
795 to {
796 opacity: 0;
797 transform: translate3d(2000px, 0, 0);
798 }
799 }
800
801 .fadeOutRightBig {
802 animation-name: fadeOutRightBig;
803 }
804
805 @keyframes fadeOutUp {
806 from {
807 opacity: 1;
808 }
809
810 to {
811 opacity: 0;
812 transform: translate3d(0, -100%, 0);
813 }
814 }
815
816 .fadeOutUp {
817 animation-name: fadeOutUp;
818 }
819
820 @keyframes fadeOutUpBig {
821 from {
822 opacity: 1;
823 }
824
825 to {
826 opacity: 0;
827 transform: translate3d(0, -2000px, 0);
828 }
829 }
830
831 .fadeOutUpBig {
832 animation-name: fadeOutUpBig;
833 }
834
835 @keyframes flip {
836 from {
837 transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
838 animation-timing-function: ease-out;
839 }
840
841 40% {
842 transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
843 animation-timing-function: ease-out;
844 }
845
846 50% {
847 transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
848 animation-timing-function: ease-in;
849 }
850
851 80% {
852 transform: perspective(400px) scale3d(.95, .95, .95);
853 animation-timing-function: ease-in;
854 }
855
856 to {
857 transform: perspective(400px);
858 animation-timing-function: ease-in;
859 }
860 }
861
862 .animated.flip {
863 -webkit-backface-visibility: visible;
864 backface-visibility: visible;
865 animation-name: flip;
866 }
867
868 @keyframes flipInX {
869 from {
870 transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
871 animation-timing-function: ease-in;
872 opacity: 0;
873 }
874
875 40% {
876 transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
877 animation-timing-function: ease-in;
878 }
879
880 60% {
881 transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
882 opacity: 1;
883 }
884
885 80% {
886 transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
887 }
888
889 to {
890 transform: perspective(400px);
891 }
892 }
893
894 .flipInX {
895 -webkit-backface-visibility: visible !important;
896 backface-visibility: visible !important;
897 animation-name: flipInX;
898 }
899
900 @keyframes flipInY {
901 from {
902 transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
903 animation-timing-function: ease-in;
904 opacity: 0;
905 }
906
907 40% {
908 transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
909 animation-timing-function: ease-in;
910 }
911
912 60% {
913 transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
914 opacity: 1;
915 }
916
917 80% {
918 transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
919 }
920
921 to {
922 transform: perspective(400px);
923 }
924 }
925
926 .flipInY {
927 -webkit-backface-visibility: visible !important;
928 backface-visibility: visible !important;
929 animation-name: flipInY;
930 }
931
932 @keyframes flipOutX {
933 from {
934 transform: perspective(400px);
935 }
936
937 30% {
938 transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
939 opacity: 1;
940 }
941
942 to {
943 transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
944 opacity: 0;
945 }
946 }
947
948 .flipOutX {
949 animation-name: flipOutX;
950 -webkit-backface-visibility: visible !important;
951 backface-visibility: visible !important;
952 }
953
954 @keyframes flipOutY {
955 from {
956 transform: perspective(400px);
957 }
958
959 30% {
960 transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
961 opacity: 1;
962 }
963
964 to {
965 transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
966 opacity: 0;
967 }
968 }
969
970 .flipOutY {
971 -webkit-backface-visibility: visible !important;
972 backface-visibility: visible !important;
973 animation-name: flipOutY;
974 }
975
976 @keyframes lightSpeedIn {
977 from {
978 transform: translate3d(100%, 0, 0) skewX(-30deg);
979 opacity: 0;
980 }
981
982 60% {
983 transform: skewX(20deg);
984 opacity: 1;
985 }
986
987 80% {
988 transform: skewX(-5deg);
989 opacity: 1;
990 }
991
992 to {
993 transform: none;
994 opacity: 1;
995 }
996 }
997
998 .lightSpeedIn {
999 animation-name: lightSpeedIn;
1000 animation-timing-function: ease-out;
1001 }
1002
1003 @keyframes lightSpeedOut {
1004 from {
1005 opacity: 1;
1006 }
1007
1008 to {
1009 transform: translate3d(100%, 0, 0) skewX(30deg);
1010 opacity: 0;
1011 }
1012 }
1013
1014 .lightSpeedOut {
1015 animation-name: lightSpeedOut;
1016 animation-timing-function: ease-in;
1017 }
1018
1019 @keyframes rotateIn {
1020 from {
1021 transform-origin: center;
1022 transform: rotate3d(0, 0, 1, -200deg);
1023 opacity: 0;
1024 }
1025
1026 to {
1027 transform-origin: center;
1028 transform: none;
1029 opacity: 1;
1030 }
1031 }
1032
1033 .rotateIn {
1034 animation-name: rotateIn;
1035 }
1036
1037 @keyframes rotateInDownLeft {
1038 from {
1039 transform-origin: left bottom;
1040 transform: rotate3d(0, 0, 1, -45deg);
1041 opacity: 0;
1042 }
1043
1044 to {
1045 transform-origin: left bottom;
1046 transform: none;
1047 opacity: 1;
1048 }
1049 }
1050
1051 .rotateInDownLeft {
1052 animation-name: rotateInDownLeft;
1053 }
1054
1055 @keyframes rotateInDownRight {
1056 from {
1057 transform-origin: right bottom;
1058 transform: rotate3d(0, 0, 1, 45deg);
1059 opacity: 0;
1060 }
1061
1062 to {
1063 transform-origin: right bottom;
1064 transform: none;
1065 opacity: 1;
1066 }
1067 }
1068
1069 .rotateInDownRight {
1070 animation-name: rotateInDownRight;
1071 }
1072
1073 @keyframes rotateInUpLeft {
1074 from {
1075 transform-origin: left bottom;
1076 transform: rotate3d(0, 0, 1, 45deg);
1077 opacity: 0;
1078 }
1079
1080 to {
1081 transform-origin: left bottom;
1082 transform: none;
1083 opacity: 1;
1084 }
1085 }
1086
1087 .rotateInUpLeft {
1088 animation-name: rotateInUpLeft;
1089 }
1090
1091 @keyframes rotateInUpRight {
1092 from {
1093 transform-origin: right bottom;
1094 transform: rotate3d(0, 0, 1, -90deg);
1095 opacity: 0;
1096 }
1097
1098 to {
1099 transform-origin: right bottom;
1100 transform: none;
1101 opacity: 1;
1102 }
1103 }
1104
1105 .rotateInUpRight {
1106 animation-name: rotateInUpRight;
1107 }
1108
1109 @keyframes rotateOut {
1110 from {
1111 transform-origin: center;
1112 opacity: 1;
1113 }
1114
1115 to {
1116 transform-origin: center;
1117 transform: rotate3d(0, 0, 1, 200deg);
1118 opacity: 0;
1119 }
1120 }
1121
1122 .rotateOut {
1123 animation-name: rotateOut;
1124 }
1125
1126 @keyframes rotateOutDownLeft {
1127 from {
1128 transform-origin: left bottom;
1129 opacity: 1;
1130 }
1131
1132 to {
1133 transform-origin: left bottom;
1134 transform: rotate3d(0, 0, 1, 45deg);
1135 opacity: 0;
1136 }
1137 }
1138
1139 .rotateOutDownLeft {
1140 animation-name: rotateOutDownLeft;
1141 }
1142
1143 @keyframes rotateOutDownRight {
1144 from {
1145 transform-origin: right bottom;
1146 opacity: 1;
1147 }
1148
1149 to {
1150 transform-origin: right bottom;
1151 transform: rotate3d(0, 0, 1, -45deg);
1152 opacity: 0;
1153 }
1154 }
1155
1156 .rotateOutDownRight {
1157 animation-name: rotateOutDownRight;
1158 }
1159
1160 @keyframes rotateOutUpLeft {
1161 from {
1162 transform-origin: left bottom;
1163 opacity: 1;
1164 }
1165
1166 to {
1167 transform-origin: left bottom;
1168 transform: rotate3d(0, 0, 1, -45deg);
1169 opacity: 0;
1170 }
1171 }
1172
1173 .rotateOutUpLeft {
1174 animation-name: rotateOutUpLeft;
1175 }
1176
1177 @keyframes rotateOutUpRight {
1178 from {
1179 transform-origin: right bottom;
1180 opacity: 1;
1181 }
1182
1183 to {
1184 transform-origin: right bottom;
1185 transform: rotate3d(0, 0, 1, 90deg);
1186 opacity: 0;
1187 }
1188 }
1189
1190 .rotateOutUpRight {
1191 animation-name: rotateOutUpRight;
1192 }
1193
1194 @keyframes hinge {
1195 0% {
1196 transform-origin: top left;
1197 animation-timing-function: ease-in-out;
1198 }
1199
1200 20%, 60% {
1201 transform: rotate3d(0, 0, 1, 80deg);
1202 transform-origin: top left;
1203 animation-timing-function: ease-in-out;
1204 }
1205
1206 40%, 80% {
1207 transform: rotate3d(0, 0, 1, 60deg);
1208 transform-origin: top left;
1209 animation-timing-function: ease-in-out;
1210 opacity: 1;
1211 }
1212
1213 to {
1214 transform: translate3d(0, 700px, 0);
1215 opacity: 0;
1216 }
1217 }
1218
1219 .hinge {
1220 animation-name: hinge;
1221 }
1222
1223 @keyframes jackInTheBox {
1224 from {
1225 opacity: 0;
1226 transform: scale(0.1) rotate(30deg);
1227 transform-origin: center bottom;
1228 }
1229
1230 50% {
1231 transform: rotate(-10deg);
1232 }
1233
1234 70% {
1235 transform: rotate(3deg);
1236 }
1237
1238 to {
1239 opacity: 1;
1240 transform: scale(1);
1241 }
1242 }
1243
1244 .jackInTheBox {
1245 animation-name: jackInTheBox;
1246 }
1247
1248 /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
1249
1250 @keyframes rollIn {
1251 from {
1252 opacity: 0;
1253 transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
1254 }
1255
1256 to {
1257 opacity: 1;
1258 transform: none;
1259 }
1260 }
1261
1262 .rollIn {
1263 animation-name: rollIn;
1264 }
1265
1266 /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
1267
1268 @keyframes rollOut {
1269 from {
1270 opacity: 1;
1271 }
1272
1273 to {
1274 opacity: 0;
1275 transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
1276 }
1277 }
1278
1279 .rollOut {
1280 animation-name: rollOut;
1281 }
1282
1283 @keyframes zoomIn {
1284 from {
1285 opacity: 0;
1286 transform: scale3d(.3, .3, .3);
1287 }
1288
1289 50% {
1290 opacity: 1;
1291 }
1292 }
1293
1294 .zoomIn {
1295 animation-name: zoomIn;
1296 }
1297
1298 @keyframes zoomInDown {
1299 from {
1300 opacity: 0;
1301 transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
1302 animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1303 }
1304
1305 60% {
1306 opacity: 1;
1307 transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
1308 animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1309 }
1310 }
1311
1312 .zoomInDown {
1313 animation-name: zoomInDown;
1314 }
1315
1316 @keyframes zoomInLeft {
1317 from {
1318 opacity: 0;
1319 transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
1320 animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1321 }
1322
1323 60% {
1324 opacity: 1;
1325 transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
1326 animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1327 }
1328 }
1329
1330 .zoomInLeft {
1331 animation-name: zoomInLeft;
1332 }
1333
1334 @keyframes zoomInRight {
1335 from {
1336 opacity: 0;
1337 transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
1338 animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1339 }
1340
1341 60% {
1342 opacity: 1;
1343 transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
1344 animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1345 }
1346 }
1347
1348 .zoomInRight {
1349 animation-name: zoomInRight;
1350 }
1351
1352 @keyframes zoomInUp {
1353 from {
1354 opacity: 0;
1355 transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
1356 animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1357 }
1358
1359 60% {
1360 opacity: 1;
1361 transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
1362 animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1363 }
1364 }
1365
1366 .zoomInUp {
1367 animation-name: zoomInUp;
1368 }
1369
1370 @keyframes zoomOut {
1371 from {
1372 opacity: 1;
1373 }
1374
1375 50% {
1376 opacity: 0;
1377 transform: scale3d(.3, .3, .3);
1378 }
1379
1380 to {
1381 opacity: 0;
1382 }
1383 }
1384
1385 .zoomOut {
1386 animation-name: zoomOut;
1387 }
1388
1389 @keyframes zoomOutDown {
1390 40% {
1391 opacity: 1;
1392 transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
1393 animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1394 }
1395
1396 to {
1397 opacity: 0;
1398 transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
1399 transform-origin: center bottom;
1400 animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1401 }
1402 }
1403
1404 .zoomOutDown {
1405 animation-name: zoomOutDown;
1406 }
1407
1408 @keyframes zoomOutLeft {
1409 40% {
1410 opacity: 1;
1411 transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
1412 }
1413
1414 to {
1415 opacity: 0;
1416 transform: scale(.1) translate3d(-2000px, 0, 0);
1417 transform-origin: left center;
1418 }
1419 }
1420
1421 .zoomOutLeft {
1422 animation-name: zoomOutLeft;
1423 }
1424
1425 @keyframes zoomOutRight {
1426 40% {
1427 opacity: 1;
1428 transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
1429 }
1430
1431 to {
1432 opacity: 0;
1433 transform: scale(.1) translate3d(2000px, 0, 0);
1434 transform-origin: right center;
1435 }
1436 }
1437
1438 .zoomOutRight {
1439 animation-name: zoomOutRight;
1440 }
1441
1442 @keyframes zoomOutUp {
1443 40% {
1444 opacity: 1;
1445 transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
1446 animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
1447 }
1448
1449 to {
1450 opacity: 0;
1451 transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
1452 transform-origin: center bottom;
1453 animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
1454 }
1455 }
1456
1457 .zoomOutUp {
1458 animation-name: zoomOutUp;
1459 }
1460
1461 @keyframes slideInDown {
1462 from {
1463 transform: translate3d(0, -100%, 0);
1464 visibility: visible;
1465 }
1466
1467 to {
1468 transform: translate3d(0, 0, 0);
1469 }
1470 }
1471
1472 .slideInDown {
1473 animation-name: slideInDown;
1474 }
1475
1476 @keyframes slideInLeft {
1477 from {
1478 transform: translate3d(-100%, 0, 0);
1479 visibility: visible;
1480 }
1481
1482 to {
1483 transform: translate3d(0, 0, 0);
1484 }
1485 }
1486
1487 .slideInLeft {
1488 animation-name: slideInLeft;
1489 }
1490
1491 @keyframes slideInRight {
1492 from {
1493 transform: translate3d(100%, 0, 0);
1494 visibility: visible;
1495 }
1496
1497 to {
1498 transform: translate3d(0, 0, 0);
1499 }
1500 }
1501
1502 .slideInRight {
1503 animation-name: slideInRight;
1504 }
1505
1506 @keyframes slideInUp {
1507 from {
1508 transform: translate3d(0, 100%, 0);
1509 visibility: visible;
1510 }
1511
1512 to {
1513 transform: translate3d(0, 0, 0);
1514 }
1515 }
1516
1517 .slideInUp {
1518 animation-name: slideInUp;
1519 }
1520
1521 @keyframes slideOutDown {
1522 from {
1523 transform: translate3d(0, 0, 0);
1524 }
1525
1526 to {
1527 visibility: hidden;
1528 transform: translate3d(0, 100%, 0);
1529 }
1530 }
1531
1532 .slideOutDown {
1533 animation-name: slideOutDown;
1534 }
1535
1536 @keyframes slideOutLeft {
1537 from {
1538 transform: translate3d(0, 0, 0);
1539 }
1540
1541 to {
1542 visibility: hidden;
1543 transform: translate3d(-100%, 0, 0);
1544 }
1545 }
1546
1547 .slideOutLeft {
1548 animation-name: slideOutLeft;
1549 }
1550
1551 @keyframes slideOutRight {
1552 from {
1553 transform: translate3d(0, 0, 0);
1554 }
1555
1556 to {
1557 visibility: hidden;
1558 transform: translate3d(100%, 0, 0);
1559 }
1560 }
1561
1562 .slideOutRight {
1563 animation-name: slideOutRight;
1564 }
1565
1566 @keyframes slideOutUp {
1567 from {
1568 transform: translate3d(0, 0, 0);
1569 }
1570
1571 to {
1572 visibility: hidden;
1573 transform: translate3d(0, -100%, 0);
1574 }
1575 }
1576
1577 .slideOutUp {
1578 animation-name: slideOutUp;
1579 }
View Code
实例代码:
1 <!DOCTYPE html>2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <meta http-equiv="X-UA-Compatible" content="ie=edge">
7 <title>Document</title>
8 <link rel="stylesheet" href="../animate.css">
9 <script src="../vue2.4.4.js"></script>
10 </head>
11
12 <body>
13 <!-- 定义一个vue的管理区块,(MVVM中的View) -->
14 <div >
15 <button @click="toggle">显示/隐藏</button><br>
16 <transition
17 enter-active-class="animated fadeInRight"
18 leave-active-class="animated fadeOutRight"
19 >
20 <!-- 坑:span行内元素(行内元素没有宽)
21 应该改为块级元素
22 -->
23 <!-- <span class="show" v-show="isshow">it创业</span> -->
24 <div style="width:200px" class="show" v-show="isshow">it创业</div>
25 </transition>
26 </div>
27 </body>
28
29 <script>
30
31 // 实例化vue对象(MVVM中的View Model)
32 new Vue({
33 // vm控制的区块为id为app的div,此div中的所有vue指令均可以被vm解析
34 el:'#app',
35 data:{
36 // 数据 (MVVM中的Model)
37 isshow:false
38 },
39 methods:{
40 toggle:function() {
41 this.isshow = !this.isshow;
42 }
43 }
44 })
45 </script>
46 </html>
三.利用 vue中的钩子函数实现动画
1 <!DOCTYPE html>2 <html lang="en">
3
4 <head>
5 <meta charset="UTF-8">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 <meta http-equiv="X-UA-Compatible" content="ie=edge">
8 <title>Document</title>
9 <style>
10 .show {
11 transition: all 0.5s;
12 }
13 </style>
14 <script src="../vue2.4.4.js"></script>
15 </head>
16
17 <body>
18 <!-- 定义一个vue的管理区块,(MVVM中的View) -->
19 <div >
20 <button @click="toggle">显示/隐藏</button><br>
21 <transition @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter">
22 <div class="show" v-show="isshow">itcast 传智</div>
23 </transition>
24 </div>
25
26 </body>
27
28 <script>
29 // 实例化vue对象(MVVM中的View Model)
30 new Vue({
31 // vm控制的区块为id为app的div,此div中的所有vue指令均可以被vm解析
32 el: '#app',
33 data: {
34 // 数据 (MVVM中的Model)
35 isshow: false
36 },
37 methods: {
38 toggle: function () {
39 this.isshow = !this.isshow;
40 },
41 // 以下三个与enter相关的方法只会在元素由隐藏变为显示的时候才会执行
42 // el:指的是当前调用这个方法的元素对象
43 // done:用来决定是否要执行后续的代码如果不执行这个方法,那么将来执行完before执行完enter以后动画就会停止
44 beforeEnter: function (el) {
45 console.log("beforeEnter");
46 // 当入场之前会执行 v-enter
47 el.style = "padding-left:100px";
48 },
49 enter: function (el, done) {
50 // 当进行的过程中每执行 v-enter-active
51 console.log("enter");
52 // 为了能让代码正常进行,在设置了结束状态后必须调用一下这个元素的
53 // offsetHeight / offsetWeight 只是为了让动画执行
54 el.offsetHeight;
55
56 // 结束的状态最后啊写在enter中
57 el.style = "padding-left:0px";
58
59
60 // 执行done继续向下执行
61 done();
62 },
63 afterEnter: function (el) {
64 // 当执行完毕以后会执行
65 console.log("afterEnter");
66 this.isshow = false;
67 }
68 }
69 })
70
71 </script>
72
73 </html>
四.完成品牌管理案例的vue中的动画完成删除提示
1 <!DOCTYPE html>2 <html lang="en">
3
4 <head>
5 <meta charset="UTF-8">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 <meta http-equiv="X-UA-Compatible" content="ie=edge">
8 <title>Document</title>
9 <style>
10 #app {
11 width: 600px;
12 margin: 10px auto;
13 }
14
15 .tb {
16 border-collapse: collapse;
17 width: 100%;
18 }
19
20 .tb th {
21 background-color: #0094ff;
22 color: white;
23 }
24
25 .tb td,
26 .tb th {
27 padding: 5px;
28 border: 1px solid black;
29 text-align: center;
30 }
31
32 .add {
33 padding: 5px;
34 border: 1px solid black;
35 margin-bottom: 10px;
36 }
37
38 .del li{
39 list-style: none;
40 padding: 10px;
41 }
42
43 .del{
44 position: absolute;
45 top:45%;
46 left: 45%;
47 width: 300px;
48 border: 1px solid rgba(0,0,0,0.2);
49 transition: all 0.5s;
50 }
51 </style>
52 <script src="../vue2.4.4.js"></script>
53 </head>
54
55 <body>
56 <div >
57 <div class="add">
58 编号: <input >
59 <button @click="add">添加</button>
60 </div>
61 <div class="add">品牌名称:<input type="text"></div>
62 <div>
63 <table class="tb">
64 <tr>
65 <th>编号</th>
66 <th>品牌名称</th>
67 <th>创立时间</th>
68 <th>操作</th>
69 </tr>
70 <tr v-if="list.length <= 0">
71 <td colspan="4">没有品牌数据</td>
72 </tr>
73 <!--加入: key="index" 时候必须把所有参数写完整 -->
74 <tr v-for="(item,key,index) in list" :key="index">
75 <td>{{item.id}}</td>
76 <td>{{item.name}}</td>
77 <td>{{item.ctime | dateFrm("/")}}</td>
78 <!-- 使用vue来注册事件时,我们在dom元素中是看不到的 -->
79 <td><a href="javascript:void(0)" @click="del(item.id)">删除</a></td>
80 </tr>
81 </table>
82 </div>
83
84 <transition
85 @before-enter="beforeEnter"
86 @enter="enter"
87 @after-enter ="afterEnter"
88 @before-leave="beforeLeave"
89 @leave="leave"
90 @after-leave ="afterLeave"
91 >
92 <div class="del" v-show="isshow">
93 <ul>
94 <li>您确定要删除当前数据吗</li>
95 <li>
96 <button @click="delById">确定</button>
97 <button @click="showClose">关闭</button>
98 </li>
99 </ul>
100 </div>
101 </transition>
102
103 </div>
104 </body>
105
106 </html>
107
108 <script>
109 // 使用全局过滤器(公有过滤器)
110 Vue.filter("dateFrm", function (time,spliceStr) {
111 // return "2017-11-16";
112 var date = new Date(time);
113 //得到年
114 var year = date.getFullYear();
115 // 得到月
116 var month = date.getMonth() + 1;
117 // 得到日
118 var day = date.getDate();
119 return year + spliceStr + month + spliceStr + day;
120 });
121
122
123 // 先将自定义指令定义好
124 // directive有两个参数
125 //参数一: 自定义指令 v-focus
126 //参数二: 对象,对象中可以添加很多方法
127 // 添加一个inserted方法:而这个方法中又有两个参数:
128 //参数一:el 当前使用自定义指令的对象
129 //参数二:obj 是指它(v-color="color" )后面设置的表达式
130 //{expression:"color",value:"red",}
131 Vue.directive("focus", {
132 inserted: function (el, obj) {
133 // console.log(el);
134 el.focus();
135 }
136 });
137 Vue.directive("color", {
138 inserted: function (el, obj) {
139 // obj.style.color = "red";
140 obj.style.color = obj.value;//????????????
141 console.log(obj.value);
142 }
143 });
144
145 var vm = new Vue({
146 el: "#app",
147 data: {
148 delId:"",// 用来将要删除数据的id进行保存
149 isshow:false,
150 color: "green",
151 id: 0,
152 name: '',
153 list: [
154 { "id": 1, "name": "itcast", "ctime": Date() },
155 { "id": 2, "name": "黑马", "ctime": Date() }
156 ]
157 },
158 // mounted(){
159 // this.getFocus()
160 // },
161 methods: {
162 add: function () {
163 //将id和namepush到list数组中
164 this.list.push({ "id": this.id, "name": this.name, "ctime": Date() });
165 },
166 del: function (id) {
167 this.isshow = true;
168 // 将得到的id保存到delId里面
169 this.delId = id;
170 },
171 beforeEnter:function(el) {
172 el.style.left = "100%";
173 },
174 enter:function(el,done) {
175 el.offsetHeight;
176 el.style.left = "35%";
177 },
178 afterEnter:function(el){
179
180 },
181 beforeLeave:function(el){
182 el.style.left = "35%";
183 },
184 leave:function(el,done){
185 el.offsetHeight;
186 el.style.left = "100%";
187 setTimeout(function(){
188 done();
189 },500);
190 },
191 afterLeave:function(el){
192
193 },
194 showClose:function(el){
195 this.isshow = false;
196 },
197 delById:function() {
198 _this = this;
199 // 根据DelId删除对应的数据
200 var index = this.list.findIndex(function(item){
201 return item.id ==_this.delId;
202 });
203 this.list.splice(index,1);
204 // 关闭删除框
205 this.isshow = false;
206 }
207 }
208 });
209
210 </script>
以上是 Vue--过渡动画实现的三种方式 的全部内容, 来源链接: utcz.com/z/378932.html