| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- <template>
- <view class="dropdown">
- <view class="dropdown-link" @click="open">
- <slot name="dropdown-link"></slot>
- </view>
- <uni-transition key="1" name="mask" mode-class="fade" :styles="maskClass" :duration="300" :show="showTrans" @click="close" />
- <uni-transition key="2" mode-class="slide-top" class="dropdown-box" name="content" :style="dropdownClass" :duration="300" :show="showTrans">
- <view class="dropdown-content" @click="close">
- <slot name="dropdown"></slot>
- </view>
- </uni-transition>
- </view>
- </template>
- <script>
- export default {
- name: 'uniDropdown',
- data(){
- return {
- showTrans: false,
- maskClass: {
- position: 'fixed',
- zIndex: 1,
- bottom: 0,
- top: 0,
- left: 0,
- right: 0,
- backgroundColor: 'rgba(0, 0, 0, 0)'
- },
- dropdownClass: {}
- }
- },
- methods:{
- open(){
- this.showTrans = true;
-
- const query = uni.createSelectorQuery().in(this);
-
- query.select('.dropdown-link').boundingClientRect(data => {
- this.dropdownClass = {
- position: 'absolute',
- zIndex: 1,
- top: '100%',
- right: '0px'
- }
- }).exec();
- },
- close(){
- this.showTrans = false;
- }
- }
- }
- </script>
- <style lang="scss">
- .dropdown-mask {
- position: fixed;
- top: 0;
- left: 0;
- width: 100vw;
- height: 100vh;
- background: none;
- z-index: 9999;
- }
-
- .dropdown {
- position: relative;
- }
-
- .dropdown-box{
- z-index: 999 !important;
- }
- </style>
|