You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							91 lines
						
					
					
						
							2.4 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							91 lines
						
					
					
						
							2.4 KiB
						
					
					
				
								<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>
							 |