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