当前位置: 首页 > Web前端 > HTML5

webapp字体大小随系统字体大小

时间:2023-04-05 23:35:47 HTML5

最近做了一个webapp项目,混合开发,外部原生,内部webview嵌套H5页面。前端用vue开发,适配采用flexible+rem。一开始还好,但是领导说有些客户年纪大了,字体看不清楚,希望网页字体能按照系统的字体大小。那个时候,我真的是……,无奈,只能想办法解决问题。在网上搜了一圈,发现内部是禁止跟随系统改名的。看来只能自己动手了。第一种方案是最简单的让原来的操作,没有内部控制,外部放大,内部适配。但是有一个问题,文字字体可以放大,但是有些输入框和输入框的内容没有放大,所以这个方案被淘汰了。第二种方案是外部原生webview,这样放大缩小不跟随系统变化,内部控制自控。和Android同事商量后,他去获取系统缩放的参数,然后将参数传递给内部的webapp,内部可以自定义缩放控件。代码如下:setScaleFont(){letfontScale=1;让scaleFontSize;让初始化字体大小;fontScale=parseFloat(window._nativeMe.getFontScale());console.log(`缩放比例:${fontScale}`);让docHtml=文档.getElementsByTagName("html")[0];initFontSize=this.getStyle(docHtml,'fontSize').split('px')[0];scaleFontSize=fontScale*initFontSize;//1-1.4比例缩放docHtml.style.fontSize=scaleFontSize+'px';},getStyle(obj,name){if(window.currentStyle){returnobj.currentStyle[name];}else{返回getComputedStyle(obj,false)[名称];}}先获取初始缩放比例,然后根据Android传入的原生缩放比例重写html标签上的fontsize。由于使用了rem适配,所以会根据根元素的大小进行适配。这个方案一定要保证先执行灵活适配,再判断是不是Android。如果是Android,执行setScaleFont方法即可生效。否则会被flexible中的方法覆盖,导致页面先放大后缩小或先缩小。放大现象。如上图,这段代码我已经注释掉了,不然会出现放大缩小的现象。结论此方法仅在Android上有效。苹果因为安全权限无法获取系统字体的缩放比例,所以无法调整。如果哪位知道如何在苹果上操作或者有其他更好的方法请告诉我。太棒了。