

Vue 根据文字数量动态调整字体大小以适合容器
source link: https://blog.skyju.cc/post/vue-auto-font/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.


Vue 根据文字数量动态调整字体大小以适合容器
这是最近开发闪卡项目遇到的问题。不同卡片虽然宽高一样,但里面的内容即字数有所不同。对于文字数量小的卡片而言,需要字体大小为一个合适的值;而对于文字数量大的卡片则需要将字体调小,在不溢出容器的前提下尽可能大。
Jan 17, 2022 By 居正
这是最近开发闪卡项目遇到的问题。不同卡片虽然宽高一样,但里面的内容即字数有所不同。对于文字数量小的卡片而言,需要字体大小为一个合适的值;而对于文字数量大的卡片则需要将字体调小,在不溢出容器的前提下尽可能大。
模块代码片段:(gist地址:https://gist.github.com/juzeon/35c47d738e658fe837734d8b42538bf2)
<template>
<div :style="'height: '+containerHeight" ref="container" class="d-flex justify-center align-center"
v-intersect="resizeFont">
<div ref="text" v-html="textHtml" style="word-break: break-all;line-height: normal;">
</div>
</div>
</template>
<script>
export default {
name: "AutoFont",
props: ['containerHeight', 'defaultFontSize', 'textHtml'],
mounted() {
this.resizeFont()
},
updated() {
this.resizeFont()
},
methods: {
resizeFont() {
let containerEl, textEl
containerEl = this.$refs.container
textEl = this.$refs.text
textEl.style.fontSize = this.defaultFontSize + 'px'
let fontSize = this.defaultFontSize
for (let i = 0; i < 100; i++) {
if (containerEl.clientHeight < textEl.clientHeight) {
fontSize--
textEl.style.fontSize = fontSize + 'px'
} else {
break
}
}
},
}
}
</script>
<style scoped>
img{
max-height: 250px;
}
</style>
由于程序本身用到vuetify库,因此代码中d-flex justify-center align-center
等类名均是来自于此。
模块以传入的字体大小为基准字体大小,并将传入的容器高度认为是外部容器高度。
在DOM已经渲染完毕的情况下,通过this.$refs
获取DOM元素本身。
每次调整步长为fontSize-1
,也可以设置的更小。
调整后对比字体元素和容器元素的clientHeight
,若仍然溢出则继续调整。
为防止出现意外情况导致无限循环,设置最大调整次数为100次,这里也可以自行更改到一个合适值。
但遇到一个问题,vue组件挂载完毕并不意味着组件显示在用户界面上。例如当组件的display
为none
时获取到的clientHeight
为0,这时候调整会出现问题。因此设置了交叉观察者v-intersect
(这是vuetify对浏览器原生交叉观察者的封装)事件,当组件显示/隐藏在用户界面上时均重新调整。
Licensed under CC BY-NC-SA 4.0
Recommend
-
16
您现在的位置:首页 --> 系统运维 --> 根据文件大小删除一个特殊文件名的文件 根据文件大小删除一...
-
7
TCP接收缓存大小的动态调整 2015-03-23 13:53:00 http://blog.csdn.net/zhangskd/article/details/8200048 TCP中有拥塞控制,也有流...
-
13
25 February 2021 / mac Mac/Linux 根据大小查找文件 利用find命令,可以查找相应大小的文件 find <path> -type f -size <...
-
5
ios根据音量大小生成波形图以及展示试听波形效果 ...
-
5
大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心REM布局 REM 是一个单位, REM布局 是以 REM 为基本的一种布局方式...
-
8
Qt+ECharts开发笔记(二):Qt窗口动态调整大小,使ECharts跟随Qt窗口大小变换而变换大小 原创 ...
-
6
JavaScript 动态调整 HTML5 Canvas 大小更新日期: 2023-12-08阅读: 255标签: Canvas
-
6
【UniApp】-uni-app-动态计算字体大小(苹果计算器) - BNTang - 博客园 ...
-
5
百度浏览器如何调整字体大小?百度浏览器中的字体都是默认的,我们可以根据自己的需求来设置字体。很多小伙伴在使用百度浏览器的时候,觉得浏览器默认的字体太小了,这样浏览字体多的网页十分的不方便。希望可以自己调整字体,如果你不会操...
-
5
怎么调整私密浏览器字体大小?字体小影响我们浏览网页,可以对字体大小进行调整来方便浏览!有小伙伴反应说他们在浏览器一个网站的时候,那个网站文字特别多,字体又特别的小,十分的影响她们对网页的浏览,希望可以调大字体,小编...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK