JavaScript实现多行文本溢出

 更新时间:2024年03月27日 09:18:55   作者:Jxiang  
这篇文章主要为大家详细介绍了如何使用JavaScript实现多行文本溢出省略号的样式,文中的示例代码讲解详细,有需要的小伙伴可以参考一下

脚本之家 / 编程助手:解决程序员“几乎”所有问题!
脚本之家官方知识库 → 点击立即使用

背景:UED给的设计稿要求。需要实现多行文本溢出省略号的样式。

原以为是一个简单的小需求, 框框直接上手。代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<template>
<div class="name-wrap">
    <span class="tag bd">
         我是标签
    </span>hhhhhhhhhhhhhhhhhhhh
</div>
</template>
<style>
.tag {
    dispaly: inline-block;
}
.name-wrap {
    word-break: break-all;
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
}
</style>

一切看起来都是嘎嘎完美,虽然我知道这么写是有兼容问题的,但这个不是我这次关注的点。重点在于,我还有一个标签,在大部分手机下都能实现我想要的样式。但是在高版本的ios(iphone14、iphone15)下,他会默认成单行文本溢出省略号 。我了解到原因是-webkit-line-clamp属性的工作原则需要其容器是块级元素或至少表现得像一个块级元素。 所以我猜测,有没有可能在高版本的ios中,这个属性实现方式有所调整。

由于我需要的样式是类似文字环绕的效果,所以我无法直接给标签外的文字添加一个span标签来改变html结构。需要加上浮动效果才行。

总结就是我太菜了,所以我改用了一种比较原始的方法。用js去实现多行文本溢出省略+浮动去实现我想要的效果. 因此记录一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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
<div class="name-wrap">
    <span class="tag bd">
         我是标签
    </span>
    <span class="text-ellipsis" :ref="setItemRef">hhhhhhhhhhhhhhhhhhhh</span>   
</div>
<script lang="ts">
export default defineComponent({
    props: {
        show: Boolean,
    },
    setup(props, ctx) {
        let showPopup = computed({
            get: () => props.show,
            set: (val: boolean) => ctx.emit("update:show", val),
        });
 
        const textElements = ref<HTMLElement[]>([]);
        const setItemRef = (el: any) => {
            if (el) {
                textElements.value.push(el);
            }
        };
 
        const applyEllipsis = (element: HTMLElement, maxLines: number) => {
            let text = element.innerHTML;
            const lineHeight = parseInt(window.getComputedStyle(element).lineHeight);
            const maxHeight = lineHeight * maxLines;
 
            // 不断减少文本直到其高度小于或等于最大允许高度
            while (element.scrollHeight > maxHeight) {
                text = text.slice(0, -1);
                element.innerHTML = text + '...';
            }
        }
 
        watch(() => showPopup.value, (val: boolean) => {
            if (val) {
                requestAnimationFrame(async () => {
                    await nextTick(); // 确保 DOM 已更新
                    textElements.value.forEach((element) => {
                        applyEllipsis(element, 2);
                    });
                });
            }
        })
 
 
        return {
            showPopup,
            setItemRef,
        }
    },
});
</script>
<style>
.name-wrap {
    font-size: 14px;
    font-family: PingFangSC-Regular, PingFang SC;
    font-weight: 400;
    color: #101112;
    line-height: 20px;
    flex: 1;
}
.tag {
    float: left;
}
.text-ellipsis {
    display: block;
    word-break: break-all;
}
</style>

到此这篇关于JavaScript实现多行文本溢出的文章就介绍到这了,更多相关JavaScript多行文本溢出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://juejin.cn/post/7350511449997000754

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • js中join()方法举例详解

    js中join()方法举例详解

    这篇文章主要给大家介绍了关于js中join()方法的相关资料,join方法用于把数组中的所有元素放入一个字符串,文中通过代码以及图文介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • 浅谈JavaScript节流和防抖函数

    浅谈JavaScript节流和防抖函数

    这篇文章主要介绍了JavaScript节流和防抖函数的相关资料,帮助大家更好的理解和学习JavaScript,感兴趣的朋友可以了解下
    2020-08-08
  • 微信小程序时间轴组件的示例代码

    微信小程序时间轴组件的示例代码

    这篇文章主要介绍了微信小程序时间轴组件,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • JS版图片放大镜效果

    JS版图片放大镜效果

    这篇文章主要为大家详细介绍了JS版的图片放大镜效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 瀑布流的实现方式(原生js+jquery+css3)

    瀑布流的实现方式(原生js+jquery+css3)

    这篇文章主要为大家详细介绍了原生js+jquery+css3实现瀑布流的相关代码,三种实现瀑布流的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • 详解JavaScript数组的操作大全

    详解JavaScript数组的操作大全

    这篇文章主要给大家介绍js数组的操作,数组的创建,数组元素的发那个吻,数组元素的添加,数组元素的删除,数组的截取和合并,数组的拷贝,数组元素的排序,数组元素的字符串化等知识,对js数组的操作感兴趣的朋友可以参考下本篇文章
    2015-10-10
  • 使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享

    使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享

    这篇文章主要介绍了使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享,编写半透明遮罩层时要注意定位问题、不要满屏遮罩,需要的朋友可以参考下
    2016-05-05
  • js字符编码函数区别分析

    js字符编码函数区别分析

    js对文字编码有3个函数: escape,encodeURI,encodeURIComponent, 对应的解码函数:unescape,decodeURI,decodeURIComponent
    2008-06-06
  • HTML长文本截取含有HTML代码同样适用的两种方法

    HTML长文本截取含有HTML代码同样适用的两种方法

    正如标题所言我们可以使用CSS截断字符串:IE,FireFox,Opera ,Safari都兼容也可以使用js截取,具体实现如下,希望对大家有所帮助
    2013-07-07
  • 拥有一个属于自己的javascript表单验证插件

    拥有一个属于自己的javascript表单验证插件

    这篇文章主要帮助大家拥有一个属于自己的javascript表单验证插件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-03-03

最新评论