5 changed files with 438 additions and 242 deletions
@ -0,0 +1,135 @@ |
|||
<template> |
|||
<div class="m-fold_text" :class="initOk ? '' : 'z-init'"> |
|||
<div |
|||
id="cnt" |
|||
ref="foldSlot" |
|||
class="fold_text-cnt" |
|||
:class="isFolded ? 'z-fold-' + row : ''" |
|||
> |
|||
<slot></slot> |
|||
</div> |
|||
<div v-if="!noNeedFold" class="fold_text-btn" @click="shiftFold"> |
|||
{{ isFolded ? "展开" : "收起" }} |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import nextTick from "dai-js/tools/nextTick"; |
|||
|
|||
export default { |
|||
name: "ResiSearch", |
|||
props: { |
|||
row: { |
|||
type: Number, |
|||
default: 2, |
|||
}, |
|||
lineHeight: { |
|||
type: Number, |
|||
default: 24, |
|||
}, |
|||
}, |
|||
data() { |
|||
return { |
|||
initOk: false, |
|||
|
|||
isFolded: false, |
|||
|
|||
noNeedFold: false, |
|||
}; |
|||
}, |
|||
computed: {}, |
|||
watch: {}, |
|||
created() { |
|||
this.init(); |
|||
}, |
|||
methods: { |
|||
async init() { |
|||
await nextTick(); |
|||
|
|||
const height = await this.$refs.foldSlot.offsetHeight; |
|||
const { row, lineHeight } = this; |
|||
|
|||
let noNeedFold = height / row < lineHeight; |
|||
|
|||
this.noNeedFold = noNeedFold; |
|||
this.isFolded = !noNeedFold; |
|||
this.initOk = true; |
|||
}, |
|||
|
|||
shiftFold() { |
|||
let { isFolded } = this; |
|||
this.isFolded = !isFolded; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scope> |
|||
// 清除容器自身浮动 |
|||
@mixin cs { |
|||
&::after { |
|||
display: block; |
|||
visibility: hidden; |
|||
clear: both; |
|||
overflow: hidden; |
|||
height: 0; |
|||
content: ""; |
|||
} |
|||
} |
|||
|
|||
// 不换行显示省略号 |
|||
@mixin toe { |
|||
overflow: hidden; |
|||
white-space: nowrap; |
|||
text-overflow: ellipsis; |
|||
word-wrap: normal; |
|||
} |
|||
|
|||
// 强制文本换行 多行 |
|||
@mixin toeM($num) { |
|||
display: -webkit-box; |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
-webkit-line-clamp: $num; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
|
|||
.m-fold_text { |
|||
@include cs; |
|||
|
|||
&.z-init { |
|||
background-color: rgba(#000, 0.05); |
|||
> view { |
|||
visibility: hidden; |
|||
} |
|||
} |
|||
|
|||
.fold_text-cnt { |
|||
&.z-fold-1 { |
|||
@include toe; |
|||
} |
|||
&.z-fold-2 { |
|||
@include toeM(2); |
|||
} |
|||
&.z-fold-3 { |
|||
@include toeM(3); |
|||
} |
|||
&.z-fold-4 { |
|||
@include toeM(4); |
|||
} |
|||
&.z-fold-5 { |
|||
@include toeM(5); |
|||
} |
|||
} |
|||
|
|||
.fold_text-btn { |
|||
float: right; |
|||
margin-right: -4px; |
|||
padding: 0 5px; |
|||
line-height: 20px; |
|||
color: #0c81fe; |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
</style> |
Loading…
Reference in new issue