壹玖零Tech

前端, 后端,软件知识分享

JAVASCRIPT

ES6 抽象类示例 以及输入输出类型限制

以下代码主要是实现一个es6抽象类示例,其中包括了AOP切面编程,以及输入输出类型限制。根据该实例,可以很快实现一组策略。 若有更好的方法,请在下方留言(需kx上网)讨论,谢谢。 // 输出类型 class Res { constructor(isSuccess, msg) { this.isSuccess = isSuccess this.msg = msg } } // 输入类型 class InputParams { constructor(flag, data) { this.flag = flag this.data = data } } // 抽象类 class MsgHandler { constructor(params, callback) { if (new.target === MsgHandler) { // 抽象类不可以直接实例化 throw new Error('MsgHandler
1 min read
JAVASCRIPT

关于链式调用的实例 JS

最近被问到这样一个问题,如下: Man('hi').eat('fish').eat('rice').finishSleep(2000) 需求是: * 1、若没有调用finishSleep,则顺序打印 hi , fish , rice * 2、若调用finishSleep, 则顺序打印 2000, hi , fish , rice 鄙人粗略实现如下(欢迎更牛逼的写法,请在下方留言讨论): function Man(str) { Man.prototype.fnArr = [] Man.prototype.fnArr.push(log(str)) Man.prototype.exec() return Man;
1 min read
TYPESCRIPT

Typescript 实现一个简单的AOP,后置切面

最近回顾了下AOP——面向切面编程,刚好项目有需要用到,就使用了一下,感觉效果不错,代码贴出来,请拍砖。 主要用到的就是装饰器特性。 主要目的是在实例test.request方法调用后,自动顺序执行components和log方法 export function after(...args) { return (_target, name, descriptor) => { // 获取value,其实就是request函数 const oldValue = descriptor.value; // 将value重新赋值一个函数 descriptor.value = async function () { // tslint:disable-next-line: no-console console.log(`Calling ${name} with`, arguments); // 将原本的函数执行一下,apply改变this的指向 const val = await oldValue.apply(t
1 min read
JAVASCRIPT

做官网常用JS集合

最近做官网,需要配合一些动效,所以Mark一下相关配合的JS库 1、HoverIntent [http://www.jq22.com/jquery-info274] 这是一款非常有用的插件,很多导航在鼠标快速移动经过时触发,造成很多误操作,jQuery延迟操作误插件-hoverIntent将帮助您好解决这个问题,尝试以确定用户的意图,就像一个水晶球,仅与鼠标移动的 !这是对jQuery的悬停方法类似。 2、stellar [https://markdalgleish.com/projects/stellar.js/docs/] 用于制作视差滚动效果 3、WOW.js [http://www.jq22.com/jquery-info1705] 在页面滚动时展现动感的元素动画效果,适用于配合Animate.css使用 https://www.delac.io/wow/docs.html 4、waypoints [http://caibaojian.
1 min read
IOS

iphone/iphoneX 状态栏高度/底部安全区域高度

状态栏高度 * iphone 20 * iphoneX 44 iphoneX 安全区域高度 34 在H5上适配安全区域 viewport-fit默认有3个值: * contain:可视窗口完全包含网页内容(左图) * cover:网页内容完全覆盖可视窗口(右图) * auto:默认值,此值不影响初始布局视图端口,并且整个web页面都是可查看的。 contain和cover具体区别如下图: 而我们需要将viewport设置为cover,env和constant才能生效。设置代码如下: <metaname="viewport"content="width=device-width,initial-scale=1.0,viewport-fit=cover"> 同时设置env和constant代码,同样env()和constant()需要同时存在,而且顺序不能换。 /*可以通过增加padding-bottom来适配*/ padding-bottom:constant(safe-area-inset-bottom);/*兼容IOS&
2 min read