| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | 
							- <template>
 
- 	<view class="u-drawdown-item">
 
- 		<u-overlay
 
- 			customStyle="top: 126px"
 
- 			:show="show"
 
- 			:closeOnClickOverlay="closeOnClickOverlay"
 
- 			@click="overlayClick"
 
- 		></u-overlay>
 
- 		<view
 
- 			class="u-drawdown-item__content"
 
- 			:style="[style]"
 
- 			:animation="animationData"
 
- 			ref="animation"
 
- 		>
 
- 			<slot />
 
- 		</view>
 
- 	</view>
 
- </template>
 
- <script>
 
- 	// #ifdef APP-NVUE
 
- 	const animation = uni.requireNativePlugin('animation')
 
- 	const dom = uni.requireNativePlugin('dom')
 
- 	// #endif
 
- 	import props from './props.js';
 
- 	/**
 
- 	 * Drawdownitem
 
- 	 * @description 
 
- 	 * @tutorial url
 
- 	 * @property {String}
 
- 	 * @event {Function}
 
- 	 * @example
 
- 	 */
 
- 	export default {
 
- 		name: 'u-drawdown-item',
 
- 		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
 
- 		data() {
 
- 			return {
 
- 				show: false,
 
- 				top: '126px',
 
- 				// uni.createAnimation的导出数据
 
- 				animationData: {},
 
- 			}
 
- 		},
 
- 		mounted() {
 
- 			this.init()
 
- 		},
 
- 		watch: {
 
- 			// 发生变化时,需要去更新父组件对应的值
 
- 			dataChange(newValue, oldValue) {
 
- 				this.updateParentData()
 
- 			}
 
- 		},
 
- 		computed: {
 
- 			// 监听对应变量的变化
 
- 			dataChange() {
 
- 				return [this.title, this.disabled]
 
- 			},
 
- 			style() {
 
- 				const style = {
 
- 					zIndex: 10071,
 
- 					position: 'fixed',
 
- 					display: 'flex',
 
- 					left: 0,
 
- 					right: 0
 
- 				}
 
- 				style.top = uni.$u.addUnit(this.top)
 
- 				return style
 
- 			}
 
- 		},
 
- 		methods: {
 
- 			init() {
 
- 				this.updateParentData()
 
- 			},
 
- 			// 更新父组件所需的数据
 
- 			updateParentData() {
 
- 				// 获取父组件u-dropdown
 
- 				this.getParentData('u-dropdown')
 
- 				if (!this.parent) uni.$u.error('u-dropdown-item必须配合u-dropdown使用')
 
- 				// 查找父组件menuList数组中对应的标题数据
 
- 				const menuIndex = this.parent.menuList.findIndex(item => item.title === this.title)
 
- 				const menuContent = {
 
- 					title: this.title,
 
- 					disabled: this.disabled
 
- 				}
 
- 				if (menuIndex >= 0) {
 
- 					// 如果能找到,则直接修改
 
- 					this.parent.menuList[menuIndex] = menuContent;
 
- 				} else {
 
- 					// 如果无法找到,则为第一次添加,直接push即可
 
- 					this.parent.menuList.push(menuContent);
 
- 				}
 
- 			},
 
- 			async setContentAnimate(height) {
 
- 				this.animating = true
 
- 				// #ifdef APP-NVUE
 
- 				const ref = this.$refs['animation'].ref
 
- 				animation.transition(ref, {
 
- 					styles: {
 
- 						height: uni.$u.addUnit(height)
 
- 					},
 
- 					duration: this.duration,
 
- 					timingFunction: 'ease-in-out',
 
- 				}, () => {
 
- 					this.animating = false
 
- 				})
 
- 				// #endif
 
- 			
 
- 				// #ifndef APP-NVUE
 
- 				const animation = uni.createAnimation({
 
- 					timingFunction: 'ease-in-out',
 
- 				});
 
- 				animation
 
- 					.height(height)
 
- 					.step({
 
- 						duration: this.duration,
 
- 					})
 
- 					.step()
 
- 				// 导出动画数据给面板的animationData值
 
- 				this.animationData = animation.export()
 
- 				// 标识动画结束
 
- 				uni.$u.sleep(this.duration).then(() => {
 
- 					this.animating = false
 
- 				})
 
- 				// #endif
 
- 			},
 
- 			overlayClick() {
 
- 				this.show = false
 
- 				this.setContentAnimate(0)
 
- 			}
 
- 		},
 
- 	}
 
- </script>
 
- <style lang="scss" scoped>
 
- 	@import '../../libs/css/components.scss';
 
- 	
 
- 	.u-drawdown-item {
 
- 		
 
- 		&__content {
 
- 			background-color: #FFFFFF;
 
- 			overflow: hidden;
 
- 			height: 0;
 
- 		}
 
- 	}
 
- </style>
 
 
  |