wW3school前端小知识

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仅仅是前端工程化中的一环,在整个工程化过程中帮我们解决了大多数问题)

 

10、contenteditable

html中大部分标签都是不可以编辑的,但是添加了contenteditable属性之后,标签会变成可编辑状态

<div contenteditable="true"></div>

不过通过这个属性把标签变成可编辑状态后只有input事件,没有change事件。也不能像表单一样通过maxlength控制最大长度。

 

11、calc

这是一个css属性,可以计算css的值。

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

Reflect 的静态方法和 Proxy 描述中的方法完全一致。也就是 Reflect 成员方法就是 Proxy 处理对象的默认实现

Proxy 对象默认的方法就是调用了 Reflect 内部的处理逻辑,也就是如果我们调用 get 方法,那么在内部,proxy 就是将 get 原封不动的交给了 Reflect

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

判断对象是否存在某个属性,可以使用 in 操作符,可以使用Reflect.has(obj, name);

删除一个属性可以使用 delete,也可以使用 Reflect.deleteProperty(obj, name);

获取所有属性名可以使用 Object.keys,也可以使用 Reflect.ownKeys(obj);

 

14、解析 get 参数

通过 replace 方法获取 url 中的参数键值对,可以快速解析 get 参数

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

 

15、解析连接 url

可以通过创建 a 标签,给 a 标签赋值 href 属性的方式,获取到协议, pathname,origin 等 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;

 

posted @ 2020-11-30 16:33  超哥20  阅读(179)  评论(0编辑  收藏  举报