webapp字号大小跟随系统字号大小缩放的示例代码


Posted in HTML / CSS onDecember 26, 2018

最近做了一个webapp项目,混合式开发,外部原生,内部webview嵌套H5页面。前端方面采用了vue开发,适配采用的是flexible+rem做的适配。本来一切都很好,可是吧,领导说客户有的年纪大 ,看不清字体,希望网页字体可以跟随系统字号大小变化。当时心里真是...,然无奈只能想办法解决问题,网上搜罗一圈都是禁止内部跟随系统字号变化,看来只能自己搞了。

第一种方案

最简单的让原生进行操作,内部不做控制,外部放大,里面自己适应。但是有问题,文本字体可以放大,有的输入框和输入框的内容却没有放大,故淘汰该方案。

第二种方案

外部原生webview让里面的放大缩小不跟随系统变化,内部自己控制。和安卓同事商量后,他去获取系统放大的参数,然后将参数传递给内部webapp,内部来自定义控制缩放。

代码如下:

setScaleFont(){
      let fontScale=1;
      let scaleFontSize;
      let initFontSize;
      fontScale=parseFloat(window._nativeMe.getFontScale());
      console.log(`缩放比例:${fontScale}`);
      let docHtml=document.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){
        return obj.currentStyle[name];
      }
      else{
        return getComputedStyle(obj, false)[name];
      }
    }

先获取到初始的缩放比例,然后根据安卓原生传入的缩放比例改写html标签上的fontsize大小,由于采用了rem适配,自会根据根元素大小进行适配。这种方案必须确保先让flexible的适配先执行,然后判断是否是安卓,如果是安卓就执行setScaleFont方法才有效,否则会被flexible里面的方法覆盖掉,造成页面先放大后缩小或者先缩小后放大的现象。

webapp字号大小跟随系统字号大小缩放的示例代码

如上图,我是注释掉了这段代码,不然就会产生上述放大缩小的现象。

结论

该种方法也只能在安卓上有效,苹果由于安全权限的问题无法获取系统字体的缩放比例,故无法调整,如果有大神知道在苹果上如何操作或者有别的更好办法,请告知,不胜感激。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
彻底弄明白CSS3的Media Queries(跨平台设计)
Jul 27 HTML / CSS
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
Jul 11 HTML / CSS
基于CSS3特效之动画:animation的应用
May 09 HTML / CSS
CSS3中的@keyframes关键帧动画的选择器绑定
Jun 13 HTML / CSS
css3实现六边形边框的实例代码
May 24 HTML / CSS
HTML5 实战PHP之Web页面表单设计
Oct 09 HTML / CSS
html5中地理位置定位api接口开发应用小结
Jan 04 HTML / CSS
html5的canvas实现3d雪花飘舞效果
Dec 27 HTML / CSS
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
Mar 22 HTML / CSS
HTML5新特性 多线程(Worker SharedWorker)
Apr 24 HTML / CSS
HTML5 图片预加载的示例代码
Mar 25 HTML / CSS
canvas画图被放大且模糊的解决方法
Aug 11 HTML / CSS
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
Jan 05 #HTML / CSS
HTML5实现表单自动验证功能实例代码
Jan 11 #HTML / CSS
HTML5 File接口在web页面上使用文件下载
Feb 27 #HTML / CSS
使用phonegap检测网络状态的方法
Mar 30 #HTML / CSS
HTML5文档结构标签
Apr 21 #HTML / CSS
HTML5的文档结构和新增标签完全解析
Apr 21 #HTML / CSS
html5的localstorage详解
May 09 #HTML / CSS
You might like
PHP中读写文件实现代码
2011/10/20 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
js图片预加载示例
2014/04/30 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
读Javascript高性能编程重点笔记
2016/12/21 Javascript
webpack入门+react环境配置
2017/02/08 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
node.js 抓取代理ip实例代码
2017/04/30 Javascript
vuex state及mapState的基础用法详解
2018/04/19 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
用js编写留言板
2020/03/17 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
2020/05/03 Javascript
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
Python内置数据类型详解
2014/08/18 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
python中的字典操作及字典函数
2018/01/03 Python
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
签约仪式主持词
2014/03/19 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
十七岁的单车观后感
2015/06/12 职场文书
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电