mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	
		
			
	
	
		
			92 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
		
		
			
		
	
	
			92 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| 
								 | 
							
								<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>
							 |