|
|
|
|
<template>
|
|
|
|
|
<view class="t-wrap">
|
|
|
|
|
<view class="t-txt-hide" :id="hid" v-if="!isCompute" :style="[computeStyle(0)]">
|
|
|
|
|
{{testContent?testContent:content}}{{showSymbol?'...':''}}
|
|
|
|
|
<text v-if="(expandText || collapseText)&&rows>0"
|
|
|
|
|
class="t-button">
|
|
|
|
|
{{expandText}}
|
|
|
|
|
</text>
|
|
|
|
|
</view>
|
|
|
|
|
<view class="t-ellipsis" :id="id" :style="[!isCompute?computeStyle(1):computeStyle(2)]" @click="contentClick">
|
|
|
|
|
{{((!isCompute || expand)&&rows>0)?content:(actualContent+(showSymbol?'...':''))}}<text
|
|
|
|
|
v-if="(expandText || collapseText) && showSymbol" class="t-button" @click.stop="changeCollapse"
|
|
|
|
|
:style="{'color':actionFontColor,'float':'right'}">{{!expand?expandText:collapseText}}</text>
|
|
|
|
|
</view>
|
|
|
|
|
<!-- #ifdef H5 -->
|
|
|
|
|
<view v-if="!isCompute && rows>0" class="t-skeleton">
|
|
|
|
|
<view class="skeletons" v-for="(item,index) in rows">
|
|
|
|
|
<view class="empty"></view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<!-- #endif -->
|
|
|
|
|
</view>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
import {
|
|
|
|
|
init,
|
|
|
|
|
computeStyle,
|
|
|
|
|
compute
|
|
|
|
|
} from './kevy-ellipsis.min.js'
|
|
|
|
|
export default {
|
|
|
|
|
name: "kevy-ellipsis",
|
|
|
|
|
props: {
|
|
|
|
|
/**
|
|
|
|
|
* 文本内容,默认''
|
|
|
|
|
*/
|
|
|
|
|
content: {
|
|
|
|
|
type: String,
|
|
|
|
|
default: ''
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 字体大小,单位rpx,默认28
|
|
|
|
|
*/
|
|
|
|
|
fontSize: {
|
|
|
|
|
type: Number,
|
|
|
|
|
default: '28'
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 字体颜色,默认#666666
|
|
|
|
|
*/
|
|
|
|
|
fontColor: {
|
|
|
|
|
color: String,
|
|
|
|
|
default: '#666666'
|
|
|
|
|
},
|
|
|
|
|
fontWeight: {
|
|
|
|
|
color: String,
|
|
|
|
|
default: '400'
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 收起操作的文案,默认''
|
|
|
|
|
*/
|
|
|
|
|
collapseText: {
|
|
|
|
|
type: String,
|
|
|
|
|
default: ''
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 展开操作的文案,默认''
|
|
|
|
|
*/
|
|
|
|
|
expandText: {
|
|
|
|
|
type: String,
|
|
|
|
|
default: ''
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 收起、展开操作文字颜色,默认'#007aff'
|
|
|
|
|
*/
|
|
|
|
|
actionFontColor: {
|
|
|
|
|
color: String,
|
|
|
|
|
default: '#007aff'
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 展示行数,默认1
|
|
|
|
|
*/
|
|
|
|
|
rows:{
|
|
|
|
|
type: [String,Number],
|
|
|
|
|
default: 1
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
//是否展开
|
|
|
|
|
expand: false,
|
|
|
|
|
//是否已计算
|
|
|
|
|
isCompute: false,
|
|
|
|
|
//内容高度
|
|
|
|
|
h: undefined,
|
|
|
|
|
//内容宽度
|
|
|
|
|
w: undefined,
|
|
|
|
|
//实际显示内容
|
|
|
|
|
actualContent: '',
|
|
|
|
|
//高度探测内容
|
|
|
|
|
testContent: undefined,
|
|
|
|
|
//是否显示省略号
|
|
|
|
|
showSymbol: false,
|
|
|
|
|
//hid和id,唯一标识符
|
|
|
|
|
hid: 'hid' + Math.random().toString(36).substr(2),
|
|
|
|
|
id: 'id' + Math.random().toString(36).substr(2),
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
created(){},
|
|
|
|
|
mounted() {
|
|
|
|
|
if (this.content?.length > 0) {
|
|
|
|
|
// #ifdef H5
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
init(this, () => {
|
|
|
|
|
compute(this);
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
// #endif
|
|
|
|
|
// #ifdef MP-ALIPAY
|
|
|
|
|
init(this, () => {
|
|
|
|
|
compute(this, true);
|
|
|
|
|
}, true)
|
|
|
|
|
// #endif
|
|
|
|
|
// #ifndef MP-ALIPAY || H5
|
|
|
|
|
init(this, () => {
|
|
|
|
|
compute(this);
|
|
|
|
|
})
|
|
|
|
|
// #endif
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
computed: {
|
|
|
|
|
computeStyle
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
//收起展开状态切换
|
|
|
|
|
changeCollapse() {
|
|
|
|
|
this.$emit('moreClick')
|
|
|
|
|
if(!this.collapseText) return;
|
|
|
|
|
this.expand = !this.expand;
|
|
|
|
|
},
|
|
|
|
|
//文本点击事件
|
|
|
|
|
contentClick() {
|
|
|
|
|
this.$emit('contentClick');
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
watch:{
|
|
|
|
|
isCompute:{
|
|
|
|
|
handler(newval){
|
|
|
|
|
console.log(newval,'newval')
|
|
|
|
|
},
|
|
|
|
|
immediate: true,
|
|
|
|
|
deep: true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
.t-wrap {
|
|
|
|
|
// width: var(--width);
|
|
|
|
|
width:100%;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
position: relative;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.t-txt-hide {
|
|
|
|
|
word-break: break-word;
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 999999px;
|
|
|
|
|
left: 999999px;
|
|
|
|
|
z-index: -1000;
|
|
|
|
|
top: 0rpx;
|
|
|
|
|
width: 100%;
|
|
|
|
|
margin: 0rpx;
|
|
|
|
|
text-align: justify;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.t-ellipsis {
|
|
|
|
|
text-align: end;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
width: 100%;
|
|
|
|
|
word-break: break-word;
|
|
|
|
|
position: relative;
|
|
|
|
|
left: 99999px;
|
|
|
|
|
}
|
|
|
|
|
.t-skeleton{
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 0rpx;
|
|
|
|
|
left: 0rpx;
|
|
|
|
|
}
|
|
|
|
|
.skeletons:first-child{
|
|
|
|
|
margin-top: 0rpx !important;
|
|
|
|
|
}
|
|
|
|
|
.skeletons {
|
|
|
|
|
position: relative;
|
|
|
|
|
display: block;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 32rpx;
|
|
|
|
|
margin-top: 12rpx;
|
|
|
|
|
background-color: rgba(0, 0, 0, 0.06);
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// .skeletons .empty {
|
|
|
|
|
// display: block;
|
|
|
|
|
// position: absolute;
|
|
|
|
|
// width: 100%;
|
|
|
|
|
// height: 100%;
|
|
|
|
|
// -webkit-transform: translateX(-100%);
|
|
|
|
|
// transform: translateX(-100%);
|
|
|
|
|
// background: linear-gradient(90deg, transparent, rgba(216, 216, 216, 0.753), transparent);
|
|
|
|
|
// -webkit-animation: loading .8s infinite;
|
|
|
|
|
// animation: loading .8s infinite;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// @keyframes loading {
|
|
|
|
|
// 100% {
|
|
|
|
|
// -webkit-transform: translateX(100%);
|
|
|
|
|
// transform: translateX(100%);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
</style>
|