New file |
| | |
| | | <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> |