Blame view
src/components/Share/DropdownMenu.vue
2.05 KB
d7d9c38c2 auto commit the c... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
<template> <div :class="{active:isActive}" class="share-dropdown-menu"> <div class="share-dropdown-menu-wrapper"> <span class="share-dropdown-menu-title" @click.self="clickTitle">{{ title }}</span> <div v-for="(item,index) of items" :key="index" class="share-dropdown-menu-item"> <a v-if="item.href" :href="item.href" target="_blank">{{ item.title }}</a> <span v-else>{{ item.title }}</span> </div> </div> </div> </template> <script> export default { props: { items: { type: Array, default: function() { return [] } }, title: { type: String, default: 'vue' } }, data() { return { isActive: false } }, methods: { clickTitle() { this.isActive = !this.isActive } } } </script> <style lang="scss" > $n: 9; //和items.length 相同 $t: .1s; .share-dropdown-menu { width: 250px; position: relative; z-index: 1; height: auto!important; &-title { width: 100%; display: block; cursor: pointer; background: black; color: white; height: 60px; line-height: 60px; font-size: 20px; text-align: center; z-index: 2; transform: translate3d(0,0,0); } &-wrapper { position: relative; } &-item { text-align: center; position: absolute; width: 100%; background: #e0e0e0; color: #000; line-height: 60px; height: 60px; cursor: pointer; font-size: 18px; overflow: hidden; opacity: 1; transition: transform 0.28s ease; &:hover { background: black; color: white; } @for $i from 1 through $n { &:nth-of-type(#{$i}) { z-index: -1; transition-delay: $i*$t; transform: translate3d(0, -60px, 0); } } } &.active { .share-dropdown-menu-wrapper { z-index: 1; } .share-dropdown-menu-item { @for $i from 1 through $n { &:nth-of-type(#{$i}) { transition-delay: ($n - $i)*$t; transform: translate3d(0, ($i - 1)*60px, 0); } } } } } </style> |