You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
<template> <view class="u-drawdown"> <view class="u-dropdown__menu" :style="{ height: $u.addUnit(height) }" ref="u-dropdown__menu" > <view class="u-dropdown__menu__item" v-for="(item, index) in menuList" :key="index" @tap.stop="clickHandler(item, index)" > <view class="u-dropdown__menu__item__content"> <text class="u-dropdown__menu__item__content__text" :style="[index === current ? activeStyle : inactiveStyle]" >{{item.title}}</text> <view class="u-dropdown__menu__item__content__arrow" :class="[index === current && 'u-dropdown__menu__item__content__arrow--rotate']" > <u-icon :name="menuIcon" :size="$u.addUnit(menuIconSize)" ></u-icon> </view> </view> </view> </view> <view class="u-dropdown__content"> <slot /> </view> </view> </template>
<script> import props from './props.js'; /** * Dropdown * @description * @tutorial url * @property {String} * @event {Function} * @example */ export default { name: 'u-dropdown', mixins: [uni.$u.mixin, props], data() { return { // �˵�����
menuList: [], current: 0 } }, computed: { }, created() { // �������������(u-dropdown-item)��this��������data��������������������С��������ѭ�����ö�����
this.children = []; }, methods: { clickHandler(item, index) { this.children.map(child => { if(child.title === item.title) { // this.queryRect('u-dropdown__menu').then(size => {
child.$emit('click') child.setContentAnimate(child.show ? 0 : 300) child.show = !child.show // })
} else { child.show = false child.setContentAnimate(0) } }) }, // ��ȡ��ǩ�ijߴ�λ��
queryRect(el) { // #ifndef APP-NVUE
// $uGetRectΪuView�Դ��Ľڵ��ѯ����������ĵ����ܣ�https://www.uviewui.com/js/getRect.html
// ����ڲ�һ����this.$uGetRect�������Ϊthis.$u.getRect�����߹���һ�£����Ʋ�ͬ
return new Promise(resolve => { this.$uGetRect(`.${el}`).then(size => { resolve(size) }) }) // #endif
// #ifdef APP-NVUE
// nvue�£�ʹ��domģ���ѯԪ�ظ߶�
// ����һ��promise���õ��ô˷�����������ʹ��then�ص�
return new Promise(resolve => { dom.getComponentRect(this.$refs[el], res => { resolve(res.size) }) }) // #endif
}, }, } </script>
<style lang="scss"> @import '../../libs/css/components.scss';
.u-dropdown { &__menu { @include flex; &__item { flex: 1; @include flex; justify-content: center; &__content { @include flex; align-items: center; } } } } </style>
|