当前位置: 首页 > news >正文

wordpress不同内容关键词优化排名推广搜ノ牛霸天排名软件

wordpress不同内容,关键词优化排名推广搜ノ牛霸天排名软件,夹娃娃网站如何做,建培网1. 实现效果 组件内文字样式取决与外侧定义 组件大小发生变化时,文本仍可以省略到指定行数 文本不超过时, 无展开,收起按钮 传入文本发生改变后, 组件展示新的文本 2. 代码 文件名TextEllipsis.vue <template><div ref"compRef" class"wq-text-ellip…

1. 实现效果

在这里插入图片描述
在这里插入图片描述

组件内文字样式取决与外侧定义
组件大小发生变化时,文本仍可以省略到指定行数
文本不超过时, 无展开,收起按钮
传入文本发生改变后, 组件展示新的文本

2. 代码

文件名TextEllipsis.vue

<template><div ref="compRef" class="wq-text-ellipsis"><div v-if="!isExpanded" class="ellipsis-content"><span>{{ truncatedText }}</span><slot v-if="textOver" name="ellipsis"><span>{{ ellipsis }}</span></slot><span v-if="textOver" class="show-more" @click="toggleExpand"><slot name="more">{{ moreText }}</slot></span></div><div v-else class="full-content"><span>{{ fullText }}</span><span class="show-less" @click="toggleExpand"><slot name="less">{{ lessText }}</slot></span></div></div>
</template><script setup lang="ts">
import { computed, reactive, ref, watch, nextTick } from 'vue';
import { useResizeObserver } from '@vueuse/core';
import { debounce } from 'lodash';type Prop = {text?: string;maxLines?: number;// 省略显示ellipsis?: string;moreText?: string;lessText?: string;
};// 定义 props
const props = withDefaults(defineProps<Prop>(), {maxLines: 3,text: '',ellipsis: '...',moreText: '展开',lessText: '收起',
});const compRef = ref<HTMLElement>();// 定义是否展开的状态
const isExpanded = ref(false);// 定义展开和收起的方法
const toggleExpand = () => {isExpanded.value = !isExpanded.value;
};// 计算截断后的文本
const truncatedText = ref(props.text);// 定义完整的文本
const fullText = computed<string>(() => props.text);
// 判断是否超过限制行数
const textOver = computed(() => truncatedText.value !== fullText.value);watch(fullText,(newValue) => {truncatedText.value = fullText.value;isExpanded.value = false;},{immediate: true,}
);// 判断是否超过限制行数
const isOver = () => {const { height, lineHeight } = getComputedStyle(compRef.value as Element);return parseFloat(height) > props.maxLines * parseFloat(lineHeight);
};// 对字符串进行二分, 直到 找到一个合适的截断位置
const refresh = async () => {// if (!isOver()) return;let left = 0;let right = props.text.length;while (left <= right) {const mid = Math.floor((left + right) / 2);truncatedText.value = props.text.slice(0, mid);await nextTick(() => {if (isOver()) {right = mid - 1;} else {left = mid + 1;}});}truncatedText.value = props.text.slice(0, left - 1);
};const init = () => {if (!isExpanded.value) refresh();
};
// 对init 进行防抖
const debounceInit = debounce(init, 50);
useResizeObserver(compRef, () => {debounceInit();
});
</script><style lang="scss" scoped>
.wq-text-ellipsis {position: relative;white-space: normal;word-break: break-all;.show-more,.show-less {//float: right;cursor: pointer;color: lightblue;margin-left: 2px;}.ellipsis-content {position: relative;}
}
</style>

这里使用到了两个外部库, 分别用于监听, 和防抖, 若没哟引入这两个库可自行封装
debounce函数封装: js之防抖函数
useResizeObserver hook封装: 这个参考第二部分的文件ResizeObserverStore.ts这里 <-可以直接跳转到指定位置

3. 使用说明

代码样例

<div class="mw6"><text-ellipsis :max-lines="3" :text="textContent"></text-ellipsis>
</div>

prop参数

name类型说明默认值
textstring内容“”
maxLinesnumber最大行数3
ellipsisstring省略时显示“…”
moreTextstring展示按钮文字“展示”
lessTextstring收起按钮文字“收起”

slot

name说明
ellipsis省略时尾部元素
more省略时按钮元素
less展开时按钮元素

4. 原理说明

主要原理利用二分法, 对字符串进行恰当的截取

// 对字符串进行二分, 直到 找到一个合适的截断位置
const refresh = async () => {let left = 0;let right = props.text.length;// left > right 时为截取合理位置while (left <= right) {const mid = Math.floor((left + right) / 2);truncatedText.value = props.text.slice(0, mid);// 下一次刷新后判断是否截取合理await nextTick(() => {// isOver()函数用来判断行数是否合理if (isOver()) {// 实际行数超过理想行数就切掉right = mid - 1;} else {// 行数符合理想行数,就得寸进尺, 向更合理出发left = mid + 1;}});}// 获取到合理位置后进行最后一次截取truncatedText.value = props.text.slice(0, left - 1);
};// 判断是否超过限制行数
const isOver = () => {const { height, lineHeight } = getComputedStyle(compRef.value as Element);return parseFloat(height) > props.maxLines * parseFloat(lineHeight);
};

本组件用到了 useResizeObserver, 主要作用是对组件元素进行监听, 当组件大小发生变化时会重新触发字符串截取操作, 并使用节流防止截取操作频繁触发

最后

如果在使用过程中出现了问题, 或者组件有没靠略到的地方, 欢迎评论或留言

http://www.15wanjia.com/news/184792.html

相关文章:

  • 中山网站推广词湖北网站科技建设项目
  • 做房产网站需要了解什么东西湖南网站开发公司电话
  • 网站开发推广方案策划书山东公司网站推广优化
  • 国外网站seo青岛网站建设技术托管
  • 江门网站建设方案福永电子烟网站开发
  • 免费发广告的网站大全怎么做互联网创业
  • 口碑好的网站定制公司搜索引擎推广方式
  • wordpress视频代码移动网站怎么做优化
  • 网站建设菜单栏设计做风险代理案源的网站
  • 外贸业务怎么利用网站开发客户哪个网站做头像比较好
  • 建设网站过程视频赤壁网站建设公司
  • 备案中的网站名称浦东新区建设工程安全质量监督站网站
  • 阿里云备案网站建设方案书范文事件网站推广
  • 设计有关的网站网站开发项目业务要求
  • 中国建设银行贵州分行网站春风摩托车官方网
  • wordpress手动缩略图淄博网站排名seo
  • 应用网站如何做网站建设方向课程
  • 怎么样建设网站linux wordpress是什么
  • 收费报名网站怎么做爱 做 网站吗
  • 绵阳学校网站建设网站建设需要那些人
  • seo网站优化技术做海外生意的网站
  • 南昌中小企业网站制作网站建设 博采网络 学校
  • 游戏门户网站建设承德信息港
  • 网站建站软件oss可以做视频网站吗
  • 怎么做网站的搜索引擎简网app工场下载
  • 如何在本地搭建网站免费商城建站
  • 公司网站建设方案ppt长沙建站做企业网站公司
  • 海豚一键做淘宝网站广东网络推广项目
  • 网站建设的栏目wordpress远程执行
  • 网站备案授权企业文化建设网站建设