| <template> | |
| 	<!-- #ifdef APP-NVUE --> | |
| 	<cell ref="uv-index-item"> | |
| 		<!-- #endif --> | |
| 		<view | |
| 			class="uv-index-item" | |
| 			:id="`uv-index-item-${id}`" | |
| 			:class="[`uv-index-item-${id}`]" | |
| 		> | |
| 			<slot /> | |
| 		</view> | |
| 		<!-- #ifdef APP-NVUE --> | |
| 	</cell> | |
| 	<!-- #endif --> | |
| </template> | |
| 
 | |
| <script> | |
| 	import mpMixin from '@/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js' | |
| 	import mixin from '@/uni_modules/uv-ui-tools/libs/mixin/mixin.js' | |
| 	// #ifdef APP-NVUE | |
| 	// 由于weex为阿里的KPI业绩考核的产物,所以不支持百分比单位,这里需要通过dom查询组件的宽度 | |
| 	const dom = uni.requireNativePlugin('dom') | |
| 	// #endif | |
| 	/** | |
| 	 * IndexItem  | |
| 	 * @description  | |
| 	 * @tutorial https://www.uvui.cn/components/indexList.html | |
| 	 * @property {String} | |
| 	 * @event {Function} | |
| 	 * @example | |
| 	 */ | |
| 	export default { | |
| 		name: 'uv-index-item', | |
| 		mixins: [mpMixin, mixin], | |
| 		data() { | |
| 			return { | |
| 				// 本组件到滚动条顶部的距离 | |
| 				top: 0, | |
| 				height: 0, | |
| 				id: '' | |
| 			} | |
| 		}, | |
| 		created() { | |
| 			// 子组件uv-index-anchor的实例 | |
| 			this.anchor = {} | |
| 		}, | |
| 		mounted() { | |
| 			this.init() | |
| 		}, | |
| 		methods: { | |
| 			init() { | |
| 				// 此处会活动父组件实例,并赋值给实例的parent属性 | |
| 				this.getParentData('uv-index-list') | |
| 				if (!this.parent) { | |
| 					return this.$uv.error('uv-index-item必须要搭配uv-index-list组件使用') | |
| 				} | |
| 				this.$uv.sleep().then(() =>{ | |
| 					this.getIndexItemRect().then(size => { | |
| 						// 由于对象的引用特性,此处会同时生效到父组件的children数组的本实例的top属性中,供父组件判断读取 | |
| 						this.top = Math.ceil(size.top) | |
| 						this.height = Math.ceil(size.height) | |
| 					}) | |
| 				}) | |
| 			}, | |
| 			getIndexItemRect() { | |
| 				return new Promise(resolve => { | |
| 					// #ifndef APP-NVUE | |
| 					this.$uvGetRect('.uv-index-item').then(size => { | |
| 						resolve(size) | |
| 					}) | |
| 					// #endif | |
|  | |
| 					// #ifdef APP-NVUE | |
| 					const ref = this.$refs['uv-index-item'] | |
| 					dom.getComponentRect(ref, res => { | |
| 						resolve(res.size) | |
| 					}) | |
| 					// #endif | |
| 				})  | |
| 			} | |
| 		}, | |
| 	} | |
| </script> | |
| 
 | |
| <style lang="scss" scoped> | |
| 	@import '@/uni_modules/uv-ui-tools/libs/css/components.scss'; | |
| </style>
 |