1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- <template>
- <view
- class="uv-vtabs-item"
- :id="`content_${index}`"
- ref="uv-vtabs-item"
- >
- <slot />
- </view>
- </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
- const dom = uni.requireNativePlugin('dom');
- // #endif
- export default {
- name: 'uv-vtabs-item',
- mixins: [mpMixin, mixin],
- props: {
- index: {
- type: [Number,String],
- default: 0
- }
- },
- data(){
- return {
- // 记录item的离顶部的距离
- top: 0,
- // 记录item的高度
- height: 0
- // 是否为联动
- }
- },
- mounted() {
- this.init();
- },
- methods: {
- async init(){
- this.getParentData('uv-vtabs');
- if (!this.parent) {
- return this.$uv.error('uv-vtabs必须要搭配uv-vtabs-item组件使用')
- }
- if(!this.parent.chain) return;
- await this.$uv.sleep();
- this.getItemRect().then(size=>{
- // 由于对象的引用特性,此处会同时生效到父组件的children数组的本实例的top属性中,供父组件判断读取
- this.top = size.top;
- this.height = size.height;
- });
- },
- getItemRect(){
- return new Promise(resolve => {
- // #ifndef APP-NVUE
- this.$uvGetRect('.uv-vtabs-item').then(size => {
- resolve(size)
- })
- // #endif
- // #ifdef APP-NVUE
- const ref = this.$refs['uv-vtabs-item']
- dom.getComponentRect(ref, res => {
- resolve(res.size)
- })
- // #endif
- })
- }
- }
- }
- </script>
|