自动调整字体大小适用容器宽度

自动调整字体大小适用容器宽度

经常遇到标题里的内容不固定的情况,用三个点来兼容,效果还不是太完美,如果,文字太多,字符自动变小,就可以很完美的解决问题

1、首先我们需要有一个方法获取字符占用的宽度,通过字符的长度来计算肯定很不准,
正好canvas有这个方法measureText,需要指定字体
2、然后我们需要一个循环来不断的尝试 我们能用的最大字体是多少

ok 上代码


export  let AutoShrink ={
	getMaxFontSize:function (text,containerWidth,fontFamily,minSize,maxSize) {
		let canvas = document.createElement('canvas');
		let context = canvas.getContext('2d');
		minSize = minSize || 12;
		maxSize = maxSize || 50;

		for(var i=minSize;i<=maxSize;i++){
			context.font = i+"px "+fontFamily;
			let detail = context.measureText(text);
			let width = detail.width;
			if(width === containerWidth) {
				return i;
			}
			if(width>containerWidth) {
				return i-1;
			}
		}
		return i>maxSize?maxSize:i;
	},
	adjust:function (dom,options) {
		options = options || {};
		let text = dom.innerText;
		let containerWidth = parseInt(getComputedStyle(dom).width);
		let fontFamily = getComputedStyle(dom).fontFamily;
		let maxFontSize = this.getMaxFontSize(text,containerWidth,fontFamily,options.minSize,options.maxSize);
		dom.style.fontSize = maxFontSize+'px';
	}
};
export default AutoShrink;
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
    <script src="../dist/auto-shrink.min.js"></script>
</head>

<style>
    #test {
        width: 800px;
        background-color: red;
        font-family: 微软雅黑, Arial, Helvetica, sans-serif;
    }
</style>


<body>
<div class="auto-shrink" id="test" style="">从前有座山,1233hahahh啊哈哈哈哈就啊哈哈啊哈对对是打发斯蒂芬对哈哈,阿看见爱上大路口甲方阿斯顿发的</div>
<script>
	AutoShrink.adjust(document.querySelector('#test'),{
		maxSize:200
    });
</script>
</body>
</html>

可以通过npm安装

npm i pingansec-auto-shrink
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值