| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | <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>
 |