<template> 
 | 
    <!-- #ifdef APP-NVUE --> 
 | 
    <header> 
 | 
    <!-- #endif --> 
 | 
    <view 
 | 
        class="u-index-anchor u-border-bottom" 
 | 
        :ref="`u-index-anchor-${text}`" 
 | 
        :style="{ 
 | 
            height: $u.addUnit(height), 
 | 
            backgroundColor: bgColor 
 | 
        }" 
 | 
    > 
 | 
        <text 
 | 
            class="u-index-anchor__text" 
 | 
            :style="{ 
 | 
                fontSize: $u.addUnit(size), 
 | 
                color: color 
 | 
            }" 
 | 
        >{{ text }}</text> 
 | 
    </view> 
 | 
    <!-- #ifdef APP-NVUE --> 
 | 
    </header> 
 | 
    <!-- #endif --> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
    import props from './props.js'; 
 | 
    // #ifdef APP-NVUE 
 | 
    const dom = uni.requireNativePlugin('dom') 
 | 
    // #endif 
 | 
    /** 
 | 
     * IndexAnchor 列表锚点 
 | 
     * @description  
 | 
     * @tutorial https://uviewui.com/components/indexList.html 
 | 
     * @property {String | Number}    text    列表锚点文本内容 
 | 
     * @property {String}            color    列表锚点文字颜色 ( 默认 '#606266' ) 
 | 
     * @property {String | Number}    size    列表锚点文字大小,单位默认px ( 默认 14 ) 
 | 
     * @property {String}            bgColor    列表锚点背景颜色 ( 默认 '#dedede' ) 
 | 
     * @property {String | Number}    height    列表锚点高度,单位默认px ( 默认 32 ) 
 | 
     * @example <u-index-anchor :text="indexList[index]"></u-index-anchor> 
 | 
     */ 
 | 
    export default { 
 | 
        name: 'u-index-anchor', 
 | 
        mixins: [uni.$u.mpMixin, uni.$u.mixin,props], 
 | 
        data() { 
 | 
            return { 
 | 
            } 
 | 
        }, 
 | 
        mounted() { 
 | 
            this.init() 
 | 
        }, 
 | 
        methods: { 
 | 
            init() { 
 | 
                // 此处会活动父组件实例,并赋值给实例的parent属性 
 | 
                const indexList = uni.$u.$parent.call(this, 'u-index-list') 
 | 
                if (!indexList) {  
 | 
                    return uni.$u.error('u-index-anchor必须要搭配u-index-list组件使用') 
 | 
                } 
 | 
                // 将当前实例放入到u-index-list中 
 | 
                indexList.anchors.push(this) 
 | 
                const indexListItem = uni.$u.$parent.call(this, 'u-index-item') 
 | 
                // #ifndef APP-NVUE 
 | 
                // 只有在非nvue下,u-index-anchor才是嵌套在u-index-item中的 
 | 
                if (!indexListItem) { 
 | 
                    return uni.$u.error('u-index-anchor必须要搭配u-index-item组件使用') 
 | 
                } 
 | 
                // 设置u-index-item的id为anchor的text标识符,因为非nvue下滚动列表需要依赖scroll-view滚动到元素的特性 
 | 
                indexListItem.id = this.text.charCodeAt(0) 
 | 
                // #endif 
 | 
            } 
 | 
        }, 
 | 
    } 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
    @import "../../libs/css/components.scss"; 
 | 
  
 | 
    .u-index-anchor { 
 | 
        position: sticky; 
 | 
        top: 0; 
 | 
        @include flex; 
 | 
        align-items: center; 
 | 
        padding-left: 15px; 
 | 
        z-index: 1; 
 | 
  
 | 
        &__text { 
 | 
            @include flex; 
 | 
            align-items: center; 
 | 
        } 
 | 
    } 
 | 
</style> 
 |