关于javascript:你会用到的-15-个前端小知识

29次阅读

共计 4547 个字符,预计需要花费 12 分钟才能阅读完成。

css 满满的干货:https://lhammer.cn/You-need-t…

1. css 一行文本超出 …

`overflow: hidden;
text-overflow:ellipsis;
white-space: nowrap;
`

2. 多行文本超出显示 …

`display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;
`

3.IOS 手机容器滚动条滑动不晦涩

`overflow: auto;
-webkit-overflow-scrolling: touch;
`

4. 批改滚动条款式

暗藏 div 元素的滚动条

`div::-webkit-scrollbar {
    display: none;
}
`

  • div::-webkit-scrollbar 滚动条整体局部
  • div::-webkit-scrollbar-thumb 滚动条外面的小方块,能向上向下挪动(或往左往右挪动,取决于是垂直滚动条还是程度滚动条
  • div::-webkit-scrollbar-track 滚动条的轨道(外面装有 Thumb
  • div::-webkit-scrollbar-button 滚动条的轨道的两端按钮,容许通过点击微调小方块的地位
  • div::-webkit-scrollbar-track-piece 内层轨道,滚动条两头局部(除去
  • div::-webkit-scrollbar-corner 边角,即两个滚动条的交汇处
  • div::-webkit-resizer 两个滚动条的交汇处上用于通过拖动调整元素大小的小控件留神此计划有兼容性问题,个别须要暗藏滚动条时我都是用一个色块通过定位盖下来,或者将子级元素调大,父级元素应用 overflow-hidden 截掉滚动条局部。暴力且间接。
5. 应用 css 写出一个三角形角标

元素宽高设置为 0,通过 border 属性来设置,让其它三个方向的 border 色彩为通明或者和背景色保持一致,残余一条 border 的色彩设置为须要的色彩。

`div {
    width: 0;
    height: 0;
    border: 5px solid #transparent;
    border-top-color: red;
}
`

6. 解决 ios audio 无奈自动播放、循环播放的问题

ios 手机在应用 audio 或者 video 播放的时候,个别机型无奈实现自动播放,可应用上面的代码 hack

`// 解决 ios audio 无奈自动播放、循环播放的问题
var music = document.getElementById(‘video’);
var state = 0;
document.addEventListener(‘touchstart’, function(){
    if(state==0){
        music.play();
        state=1;
    }
}, false);
document.addEventListener(“WeixinJSBridgeReady”, function () {
    music.play();
}, false);
// 循环播放
music.onended = function () {
    music.load();
    music.play();
}
`

7. 程度垂直居中

我个别只应用两种形式 定位 或者 flex,我感觉够用了。

`div {
    width: 100px;
    height: 100px;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    margin: auto;
}
`

父级管制子集居中

`.parent {
    display: flex;
    justify-content: center;
    align-items: center;
}
`

8. 暗藏页面元素
  • display-none: 元素不存在,从 dom 中删除
  • opacity-0: 元素透明度将为 0,但元素依然存在,绑定的事件仍旧无效仍可触发执行。
  • visibility-hidden:元素暗藏,但元素仍旧存在,页面中无奈触发该元素的事件。
9. 前端工程化

一提到前端工程化很多人想到的都是 webpack,这是不对的,webpack 仅仅是前端工程化中的一环。在整个工程化过程中他帮咱们解决了绝大多数的问题,但并没有解决所有问题。

前端工程化是通过工具晋升效率,降低成本的一种伎俩。

近些年被宽泛的关注和探讨,究其原因次要是因为现代化前端利用性能要求一直进步,业务逻辑日益简单,作为当下互联网时代惟一不可或缺的技术,前端能够说是占据了整个开发行业的半壁江山。从传统的网站,到当初的 H5, 挪动 App, 桌面利用,以及小程序。前端技术简直是无所不能的全面笼罩。

在这些表象的背地呢,实际上是行业对开发人员的要求产生了翻天覆地的变动,以往前端写 demo,套模板,调页面这种刀耕火种的形式曾经齐全不合乎当下对开发效率的要求,前端工程化就是在这样一个背景下被提上台面,成为前端工程师必备的伎俩之一。

一般来说前端工程蕴含,我的项目初始化,我的项目开发,集成,构建,打包,测试,部署等流程。工程化就是以工程的角度来解决这些问题。比方我的项目初始化咱们个别应用 npm init, 创立页面模板应用 plop,咱们喜爱应用 ES6+ 开发,然而须要通过 babel 编码成 ES5,继续集成的时候咱们应用 git,然而为了放弃开发标准咱们引入了 ESLint,部署个别应用 ci/cd 或者 jenkins 等等。

前端工程化是一个比拟大的话题,前面咱们会单开话题来讲。

10.contenteditable

html 中大部分标签都是不能够编辑的,然而增加了 contenteditable 属性之后,标签会变成可编辑状态。

`<div contenteditable=”true”></div>
`

不过通过这个属性把标签变为可编辑状态后只有 input 事件,没有 change 事件。也不能像表单一样通过 maxlength 管制最大长度。我也遗记我在什么状况下用到过了,前面想起来再补吧。

11.calc

这是一个 css 属性,我个别称之为 css 表达式。能够计算 css 的值。最乏味的是他能够计算不同单位的差值。很好用的一个性能,毛病是不容易浏览。接盘侠没方法一眼看出 20px 是啥。

`div {
    width: calc(25% – 20px);
}
`

12.Proxy 和 Object.defineProperty 区别

Proxy 的意思是代理,我个别教他拦截器,能够拦挡对象上的一个操作。用法如下,通过 new 的形式创建对象,第一个参数是被拦挡的对象,第二个参数是对象操作的形容。实例化后返回一个新的对象,当咱们对这个新的对象进行操作时就会调用咱们形容中对应的办法。

`new Proxy(target, {
    get(target, property) {
    },
    set(target, property) {
    },
    deleteProperty(target, property) {
    }
})
`

Proxy 区别于 Object.definedProperty

Object.defineProperty 只能监听到属性的读写,而 Proxy 除读写外还能够监听属性的删除,办法的调用等。

通常状况下咱们想要监督数组的变动,根本要依附重写数组办法的形式实现,这也是 Vue 的实现形式,而 Proxy 能够间接监督数组的变动。

`const list = [1, 2, 3];
const listproxy = new Proxy(list, {
    set(target, property, value) {
        target[property] = value;
        return true; // 标识设置胜利
    }
});
list.push(4);
`

Proxy 是以非入侵的形式监管了对象的读写,而 defineProperty 须要按特定的形式定义对象的属性。

13.Reflect

他是 ES2015 新增的对象,纯动态对象也就是不能被实例画,只能通过静态方法的形式调用,和 Math 对象相似,只能相似 Math.random 的形式调用。

Reflect 外部封装了一系列对对象的底层操作,一共 14 个,其中 1 个被废除,还剩下 13 个。

Reflect 的静态方法和 Proxy 形容中的办法完全一致。也就是说 Reflect 成员办法就是 Proxy 解决对象的默认实现。

Proxy 对象默认的办法就是调用了 Reflect 外部的解决逻辑,也就是如果咱们调用 get 办法,那么在外部,proxy 就是将 get 一成不变的交给了 Reflect,如下。

`const proxy = new Proxy(obj, {
    get(target, property) {
        return Reflect.get(target, property);
    }
})
`

Reflect 和 Proxy 没有相对的关系,咱们个别将他们两个放在一起讲是为了不便对二者的了解。

那为什么会有 Reflect 对象呢,其实他最大的用途就是提供了一套对立操作 Object 的 API。判断对象是否存在某一个属性,能够应用 in 操作符,然而不够优雅,还能够应用 Reflect.has(obj, name); 删除一个属性能够应用 delete,也能够应用 Reflect.deleteProperty(obj, name); 获取所有属性名能够应用 Object.keys, 也能够应用 Reflect.ownKeys(obj); 咱们更举荐应用 Reflect 的 API 来操作对象,因为他才是将来。

14. 解析 get 参数

通过 replace 办法获取 url 中的参数键值对,能够疾速解析 get 参数。

`const q = {};
location.search.replace(/(1+)=(2+)/g,(_,k,v)=>q[k]=v);
console.log(q);
`

15. 解析连贯 url

能够通过创立 a 标签,给 a 标签赋值 href 属性的形式,获取到协定,pathnameorigin 等 location 对象上的属性。

`// 创立 a 标签
const aEle = document.createElement(‘a’);
// 给 a 标签赋值 href 门路
aEle.href = ‘/test.html’;
// 拜访 aEle 中的属性
aEle.protocol; // 获取协定
aEle.pathname; // 获取 path
aEle.origin;
aEle.host;
aEle.search;`


  1. ?&= ↩
  2. & ↩
正文完
 0