Blame view

node_modules/uview-ui/components/u-read-more/u-read-more.vue 4.6 KB
c7add6cf   “wangming”   初始版本开发完毕
1
  <template>
25852764   unknown   s
2
3
4
5
6
7
  	<view class="">
  		<view class="u-content" :class="[elId]" :style="{ 
  			height: isLongContent && !showMore ? showHeight + 'rpx' : 'auto',
  			textIndent: textIndent
  		}">
  			<slot></slot>
c7add6cf   “wangming”   初始版本开发完毕
8
  		</view>
25852764   unknown   s
9
10
11
12
13
14
15
16
17
18
19
20
  		<view @tap="toggleReadMore" v-if="isLongContent" class="u-content__showmore-wrap"
  		    :class="{ 'u-content__show-more': showMore }"
  		    :style="[innerShadowStyle]">
  			<text class="u-content__showmore-wrap__readmore-btn" :style="{
  				fontSize: fontSize + 'rpx',
  				color: color
  			}">
  				{{ showMore ? openText : closeText }}
  			</text>
  			<view class="u-content__showmore-wrap__readmore-btn__icon u-flex">
  				<u-icon :color="color" :size="fontSize" :name="showMore ? 'arrow-up' : 'arrow-down'"></u-icon>
  			</view>
c7add6cf   “wangming”   初始版本开发完毕
21
22
23
24
25
  		</view>
  	</view>
  </template>
  
  <script>
c7add6cf   “wangming”   初始版本开发完毕
26
27
28
29
  	/**
  	 * readMore 阅读更多
  	 * @description 该组件一般用于内容较长,预先收起一部分,点击展开全部内容的场景。
  	 * @tutorial https://www.uviewui.com/components/readMore.html
25852764   unknown   s
30
31
32
33
34
35
36
  	 * @property {String Number} show-height 内容超出此高度才会显示展开全文按钮,单位rpx(默认400
  	 * @property {Boolean} toggle 展开后是否显示收起按钮(默认false
  	 * @property {String} close-text 关闭时的提示文字(默认“展开阅读全文”)
  	 * @property {String Number} font-size 提示文字的大小,单位rpx(默认28
  	 * @property {String} text-indent 段落首行缩进的字符个数(默认2em
  	 * @property {String} open-text 展开时的提示文字(默认“收起”)
  	 * @property {String} color 提示文字的颜色(默认#2979ff
c7add6cf   “wangming”   初始版本开发完毕
37
38
39
  	 * @example <u-read-more><rich-text :nodes="content"></rich-text></u-read-more>
  	 */
  	export default {
25852764   unknown   s
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
  		name: "u-read-more",
  		props: {
  			// 默认的显示占位高度,单位为rpx
  			showHeight: {
  				type: [Number, String],
  				default: 400
  			},
  			// 展开后是否显示"收起"按钮
  			toggle: {
  				type: Boolean,
  				default: false
  			},
  			// 关闭时的提示文字
  			closeText: {
  				type: String,
  				default: '展开阅读全文'
  			},
  			// 展开时的提示文字
  			openText: {
  				type: String,
  				default: '收起'
  			},
  			// 提示的文字颜色
  			color: {
  				type: String,
  				default: '#2979ff'
  			},
  			// 提示文字的大小
  			fontSize: {
  				type: [String, Number],
  				default: 28
  			},
  			// 是否显示阴影
  			shadowStyle: {
  				type: Object,
  				default () {
  					return {
  						backgroundImage: "linear-gradient(-180deg, rgba(255, 255, 255, 0) 0%, #fff 80%)",
  						paddingTop: "300rpx",
  						marginTop: "-300rpx"
  					}
  				}
  			},
  			// 段落首行缩进的字符个数
  			textIndent: {
  				type: String,
  				default: '2em'
  			},
  			// open和close事件时,将此参数返回在回调参数中
  			index: {
  				type: [Number, String],
  				default: ''
  			}
  		},
  		watch: {
  			paramsChange(val) {
  				this.init();
c7add6cf   “wangming”   初始版本开发完毕
97
98
99
  			}
  		},
  		computed: {
25852764   unknown   s
100
101
102
  			paramsChange() {
  				return `${this.toggle}-${this.showHeight}`;
  			},
c7add6cf   “wangming”   初始版本开发完毕
103
104
  			// 展开后无需阴影,收起时才需要阴影样式
  			innerShadowStyle() {
25852764   unknown   s
105
  				if (this.showMore) return {};
c7add6cf   “wangming”   初始版本开发完毕
106
107
108
  				else return this.shadowStyle
  			}
  		},
25852764   unknown   s
109
110
111
112
113
114
115
  		data() {
  			return {
  				isLongContent: false, // 是否需要隐藏一部分内容
  				showMore: false, // 当前隐藏与显示的状态,true-显示,false-收起
  				elId: this.$u.guid(), // 生成唯一class
  			};
  		},
c7add6cf   “wangming”   初始版本开发完毕
116
  		mounted() {
25852764   unknown   s
117
118
119
  			this.$nextTick(() => {
  				this.init();
  			})
c7add6cf   “wangming”   初始版本开发完毕
120
121
  		},
  		methods: {
25852764   unknown   s
122
123
  			init() {
  				this.$uGetRect('.' + this.elId).then(res => {
c7add6cf   “wangming”   初始版本开发完毕
124
  					// 判断高度,如果真实内容高度大于占位高度,则显示收起与展开的控制按钮
25852764   unknown   s
125
126
127
  					if (res.height > uni.upx2px(this.showHeight)) {
  						this.isLongContent = true;
  						this.showMore = false;
c7add6cf   “wangming”   初始版本开发完毕
128
129
130
  					}
  				})
  			},
c7add6cf   “wangming”   初始版本开发完毕
131
132
  			// 展开或者收起
  			toggleReadMore() {
25852764   unknown   s
133
  				this.showMore = !this.showMore;
c7add6cf   “wangming”   初始版本开发完毕
134
  				// 如果toggle为false,隐藏"收起"部分的内容
25852764   unknown   s
135
  				if (this.toggle == false) this.isLongContent = false;
c7add6cf   “wangming”   初始版本开发完毕
136
  				// 发出打开或者收齐的事件
25852764   unknown   s
137
  				this.$emit(this.showMore ? 'open' : 'close', this.index);
c7add6cf   “wangming”   初始版本开发完毕
138
139
  			}
  		}
25852764   unknown   s
140
  	};
c7add6cf   “wangming”   初始版本开发完毕
141
142
143
  </script>
  
  <style lang="scss" scoped>
25852764   unknown   s
144
  	@import "../../libs/css/style.components.scss";
c7add6cf   “wangming”   初始版本开发完毕
145
  
25852764   unknown   s
146
147
  	.u-content {
  		font-size: 30rpx;
c7add6cf   “wangming”   初始版本开发完毕
148
  		color: $u-content-color;
25852764   unknown   s
149
  		line-height: 1.8;
c7add6cf   “wangming”   初始版本开发完毕
150
  		text-align: left;
25852764   unknown   s
151
  		overflow: hidden;
c7add6cf   “wangming”   初始版本开发完毕
152
  
25852764   unknown   s
153
154
155
156
157
  		&__show-more {
  			padding-top: 0;
  			background: none;
  			margin-top: 20rpx;
  		}
c7add6cf   “wangming”   初始版本开发完毕
158
  
25852764   unknown   s
159
160
161
162
163
  		&__showmore-wrap {
  			position: relative;
  			width: 100%;
  			padding-bottom: 26rpx;
  			@include vue-flex;
c7add6cf   “wangming”   初始版本开发完毕
164
165
  			align-items: center;
  			justify-content: center;
25852764   unknown   s
166
167
168
169
170
171
172
173
174
175
176
  
  			&__readmore-btn {
  				@include vue-flex;
  				align-items: center;
  				justify-content: center;
  				line-height: 1;
  
  				&__icon {
  					margin-left: 14rpx;
  				}
  			}
c7add6cf   “wangming”   初始版本开发完毕
177
178
  		}
  	}
c7add6cf   “wangming”   初始版本开发完毕
179
  </style>