Blame view

uni_modules/uview-plus/components/u-index-item/u-index-item.vue 2.07 KB
a2702f6d   刘淇   巡查计划
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
  <template>
  	<!-- #ifdef APP-NVUE -->
  	<cell ref="u-index-item">
  		<!-- #endif -->
  		<view
  			class="u-index-item"
  			:id="`u-index-item-${id}`"
  			:class="[`u-index-item-${id}`]"
  		>
  			<slot />
  		</view>
  		<!-- #ifdef APP-NVUE -->
  	</cell>
  	<!-- #endif -->
  </template>
  
  <script>
  	import { props } from './props';
  	import { mpMixin } from '../../libs/mixin/mpMixin';
  	import { mixin } from '../../libs/mixin/mixin';
  	import { sleep, error } from '../../libs/function/index';
  	// #ifdef APP-NVUE
  	// 由于weex为阿里的KPI业绩考核的产物,所以不支持百分比单位,这里需要通过dom查询组件的宽度
  	const dom = uni.requireNativePlugin('dom')
  	// #endif
  	/**
  	 * IndexItem 
  	 * @description 
  	 * @tutorial https://uview-plus.jiangruyi.com/components/indexList.html
  	 * @property {String}
  	 * @event {Function}
  	 * @example
  	 */
  	export default {
  		name: 'u-index-item',
  		mixins: [mpMixin, mixin, props],
  		data() {
  			return {
  				// 本组件到滚动条顶部的距离
  				top: 0,
  				height: 0,
  				id: ''
  			}
  		},
  		created() {
  			// 子组件u-index-anchor的实例
  			this.anchor = {}
  		},
  		mounted() {
  			this.init()
  		},
  		methods: {
  			init() {
  				// 此处会活动父组件实例,并赋值给实例的parent属性
  				this.getParentData('u-index-list')
  				if (!this.parent) {
  					return error('u-index-item必须要搭配u-index-list组件使用')
  				}
  				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.$uGetRect('.u-index-item').then(size => {
  						resolve(size)
  					})
  					// #endif
  
  					// #ifdef APP-NVUE
  					const ref = this.$refs['u-index-item']
  					dom.getComponentRect(ref, res => {
  						resolve(res.size)
  					})
  					// #endif
  				}) 
  			}
  		},
  	}
  </script>
  
  <style lang="scss" scoped>
  	
  </style>