用了这么多年的字体,你知道它是怎么解析的吗?
大家好呀。 因为之前有过字体解析的相关代码开发,一直想把这个过程记录下来,总觉得这个并不是很难,自认为了解得不算全面,就一拖再拖了。今天仅做简单的抛砖引玉,通过本篇文章,可以知道Opentype.js是如何解析字体的。在遇到对应问题的时候,可以有其它的思路去解决。比如:.ttc的解析。又或者好奇我们开发软件过程中字体是如何解析的。 ...
大家好呀。 因为之前有过字体解析的相关代码开发,一直想把这个过程记录下来,总觉得这个并不是很难,自认为了解得不算全面,就一拖再拖了。今天仅做简单的抛砖引玉,通过本篇文章,可以知道Opentype.js是如何解析字体的。在遇到对应问题的时候,可以有其它的思路去解决。比如:.ttc的解析。又或者好奇我们开发软件过程中字体是如何解析的。 ...
大家好。 今天继续来学习Figma客户端。在看Electron Web Embeds 文档的时候,知道官方因为Webview结构还在发生变化,而不推荐使用。但如果锁定Electron版本不再升级,这种不用考虑结构变动的情况下,到底应该使用WebviewTag还是BrowserView呢? ...
大家好呀,时隔两月,今天又来学习和研究figma客户端了。不管是从什么角度去揣测,分析,今天不如更直接一些,看代码!虽然是压缩混淆过的。 过程仅供交流学习 过程仅供交流学习 过程仅供交流学习 ...
对于当前互联网产品开发中,协调的颜色设计至关重要,甚至决定用户是否愿意主动使用产品。一些独立开发者、中小微企业,在没有设计师的时候,是否就无法拥有至少合理、方便使用的配色方案呢?当然不了。我们可以使用很多现成的组件库,解决方案等等,但是如果在不引入组件库的时候呢?material-color-utilities给我们提供了方案。 ...
今儿个朋友在重构代码的时候,和我吐槽了如下题这么个代码。让判断下调用顺序,真是Promise写出了callback的感觉。 先不看答案,试试能不能解答正确。 这道题可以说99%手写的promise都不能正确输出。 答案由Google Chrome 控制台输出(目前使用的是 125.0.6422.176 正式版本,arm64架构)。 ...
手写call、apply、bind 区别: call 接收多个参数 apply 接收数组 bind 返回函数,不直接调用。能够分两次接收参数。 原理上就是把function挂在target对象上面,通过target.function 的方式,隐式的将执行上下文修改。 ...
原型链是JavaScript中实现继承和对象间属性共享的一种机制。 当谈到继承时,JavaScript 只有一种结构:对象。每个实例对象(object)都有一个私有属性(称之为 proto )指向它的构造函数的原型对象(prototype)。该原型对象也有一个自己的原型对象(proto),层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。 ...
大家好。 今天接着研究个人站长探索之博客搭建。 前阵子来了趟西北环线旅行,写了几天游记,并附上几张图,但图片大小不一,也不能占太多空间,就想着要是能有那种点击图片放大查看的功能就好了,找了一圈没找到hugo PaperMod有类似的设置。 ...
给版本号排序 var versions = ['2.0.1', '1.1.0', '1.0.2', '2.0.0', '1.0.0', '3.0.10', '2.1.10', '2.0.0']; versions.sort((a, b) => { const alist = a.split('.'); const blist = b.split('.'); for (let i = 0; i < alist.length; i ++) { if (alist[i] > blist[i]) { return 1; } else if (alist[i] < blist[i]) { return -1; } else { continue; } } return 0; }) sort是怎么实现的 compareFn(a, b) 返回值 排序顺序 > 0 a 在 b 后,如 [b, a] < 0 a 在 b 前,如 [a, b] === 0 保持 a 和 b 原来的顺序 const MySort = function (list, compareFn) { if (!compareFn) throw "compareFn is not a function"; if (list.length <= 1) return list; // null list fn ... const mid = Math.floor(list.length / 2); const midValue = list[mid]; const beforeList = []; const midList = [] const afterList = []; for(let i = 0; i < list.length; i ++) { if ( compareFn(list[i], list[mid]) < 0 ) { beforeList.push(list[i]) } else if ( compareFn(list[i], list[mid]) > 0 ) { afterList.push(list[i]) } else { midList.push(list[i]) } } return [].concat( MySort(beforeList, compareFn), midList, MySort(afterList, compareFn) ) } (别的实现方式) ...
场景:点击按钮下载什么架构的客户端 为啥需要JS判断当前浏览器所属的系统架构?可以代入到场景:如果需要自行分发arm、x86技术架构的客户端安装包(为了控制包大小等),怎么能让用户直接点击下载按钮,下载正确的技术架构,而不是需要用户了解相关内容,查看本机架构呢? ...