• js一些基础细节回顾,特别是css


    FC Formatting context

    规范子元素

    BFC (块级作用域)隔离的独立容器,做浮动清除

    触发方式:

    1.body根元素划分出来

    2. Overflow不为visible, 哦VR额佛为= (hidden, auto, scroll)

      1. 绝对定位,固定定位(脱离文档刘)
      2. 4. displayListinline-block,table-cell,flex

    对外部的作用

    特性:

    一、同一个BFC外边距折叠

    //body是一个会计作用域

    Body

    {

    Divmargin10()

    Divmargin10)

    }

    最终margin不是2010

    如果生成两个会计作用域,就会变成20

    Div{overflow:hi}

    IFC(内链格式上下文)

    页面中p中自己的上下文

    不允许插入块级,如果除夕拿了, 则拆分成两个IFC

    GFC(网格布局上下文)display:grid

    FFC(自适应格式上下文)displayflex|inline-flex

    二、进行浮动计算

    如果没有bfc, 父元素内有子元素, 会根据子元素计算高度,但是如果子元素floatright,父元素告诉变成0

    如果父元素加入bfc,如overflow:hidden, 则父元素告诉变成子元素的高度,进行浮动计算。

    <div style=”overflow:hidden”>

    <div style=”float:right;height:100px”>child</div>

    </div>

    三.内容隔开

    如果没有bfc, 文字将环绕元素,如果设置bfc,在此元素的下面,就不会有文字

    DIv垂直居中

    1, position absolute

    Div{

    Background:red

    Position:absolute

    Left:50%

    Top:50%

    Transform: translate(-50%, -50%)

    }

    相似的

    Div{

    Background:red

    Height:300px;

    Width:300px;

    Position:absolute

    Left:50%

    Top:50%

    Margin-top:-150px;

    Margin-left:-150px

    }

    1. 绝对定位法,不需要知道元素宽高

    Div.child{

    Width:600px

    Height:600px;

    Position:absolute

    Top:0

    Bottom:0

    Left:0

    Right0

    Margin:auto

    }

    1. flex布局, 主轴测轴居中

    Div.parent{

    Display: flex

    Justify-contnt:center

    Align-items: center

    }

    弹性部句,也可以marginLauto

    1. Table-cell 使里面的元素水平垂直居中

    Parent{

    Display:Table-cell

    Text-aign:center

    Vertail-align:center

    }

    Child{

    Display: inline-bliokc

    }

    1. 动态计算的方法

    Parent{

    Displayrelative

    Width:600px;

    Height: 600px;

    }

    Child{

    Position:absolute

    Width:200px

    Height:200px;

    Left: calc(400px-200px)/2;

    rightLcalc(400px-200px)/2

    Top: calc(400px-200px)/2

    Bottom: calc(400px-200px)/2

    }

    隐藏元素

    Display:none

    Visibilit: hidden

    Opacitcy: 0;

    F12

    Visiblity/opaity实际上渲染了,并且占据页面的位置

    点击事件

    Visibility不会触发事件

    Opacity会触发事件

    其他

    Display:hidden 不会被子元素继承, 毕竟没有渲染处理, 而且也诶有过度效果

    visibilityLhidden,会被继承, trasction:visibitli会被继承, 隐藏会延迟

    Opacity0 会被子元素继承且不能通过opacity:1取消隐藏, transision:opacity可以延时隐藏和显示

    不改变代码的情况下, 是这张图片宽度为300

    <img src=”1.png” stye=”480px !Important”/>

    1. Css

    <img src=”1.png” stye=”480px !Important;max-300px”/>

    <img src=”1.png” stye=”480px !Important;transform:scale(0.625, 1)”/>

    <img src=”1.png” stye=”300px!Important;”/>

    1. Js

    Document.getElementByTagName(‘img’)[0].setAttribute(“style”, “300px !important”)

    手机分辨率高,1px在手机上变成2px

    Window.deviceRatio = 2

    1.如何处理1px,可以用0.5px

    2.或者用图片

    3.用背景图片

    4. 用简便背景实现

    5. box-shadom:模拟

    Boder{

    Biox-shadow:inset 0px -1ox 1px -1px #red}

    6. viewport+rem实现

    Rem等同于所有的狂傲都要修改

    1. 伪类+transform实现,把原先的给隐藏掉,然后用伪类重做,用transformscale缩小一半

    .scale-1px{

    Position:relative;

    Border:none

    }

    .scale-1px:after{

    Content:’ ’,

    Position:absolute;

    Bottom:0;

    Background:#000;

    Width:100%;

    Height:1px;

    Transform: scaleY(0.5)

    Transform-origin: 0.0

    }

    parseInt(str, radix)

    parseInt第二个参数是2-35,如果不是, 会执行下面计算

    如果str是按照0开头, 则认为8进制,

    如果str0x开头, 认为是16进制

    否则10进制

    [“1”,”2”,”3”].map(parseInt)

    [1, N/A, N/A]

    [“10”,”10”,”10”].map(parseInt)

    [10, N/a, 3]

    节流和防抖debounce and tothle

    1如果不行要调用多次, 如scrollEvent,可以用节流

    Document.body.addEventListener(‘scroll’, debounce(()=.{

    Console.log(‘scrolled’);

    }, 3000));

    Function debounce(callback, time){

    Let canrun = true;

    Return ()=>{

    If(!canrun){

    Return;

    }

    Canrun = false;

    setTimoeut(()=>{

    Callback.call(this, arguments);

    Canrun = true;

    }, time)

    }

    }

    放抖。 input需要等用户停止,去触发

    Document.body.addEventListener(‘change’, tothle(()=>{

    Console.log(‘send xhr request’);

    }3000));

    Function Tothe(callback, time){

    Let timer;

    Return function(){

    Timer && clearTimeout(timer);

    Timer = setTimeout(()=>{

    Cakkback.apply(this, arguments);

    }, time);

    }

    }

    Es6set map weakmap, weakset,主要是用了weakset/weakmap不容易造成内存泄漏

    set唯一, 不重复

    键名和键值是一致的

    可以遍历,add delete has

    Weakset

    成员都是对象

    成员都是弱引用,可以被垃圾回收回收, 可以用来保存dom节点。不造成内存泄漏

    (如果,节点从body删掉,那么集合也就删掉了,垃圾回收了,主要用在节点保存)

    不能遍历,有add, delete, has

    Map

    键值对

    方法很多,可以转化成各种数据结构?

    Weakmap

    建名是弱引用,建是任意值,可以被垃圾回收

    不能遍历,方法有

    判断是不是数组

    1. constructorname属性,可以得到原型链上的对象属性名字

    Let a=[12]

    1. Constructr.name //=>Arrau
    2. __proto__.constructor().name //=>Array
    3. Object.property.toString会返回原型脸上的对象属性名字,既包含基础类型,又包含原生引用类型,会返回【Object type

    https://zhuanlan.zhihu.com/p/118793721 

    其实在一些对象里面有[Symbol.toStringTag],所以返回的是[Object Symbol.toStringTag] "[object " + tag + "]"

    经常toString会被重写,所以需要调用没被重写以前的方法。

     Object.prototype.toString.call(a,[])

    或者 Reflect.apply(Object.proptotpye, a, []) => [Object Array]

     Object.property.toString.call(a) //=>[Object Array]

    其他的例如:

    Object.property.toString.call(“aa”) //=>[Object String]

    Object.property.toString.call(1)//=>[Object Number]

    Object.property.toString.call(Symbol(1))//=>[Object Symbol]

    Object.propert.toString.call({name: ‘A’})//=>[Object Object]

     

    Object.property.toString.call(new Date) => //[Object Date]

    var reg = /[hbc]at/gi;

    Object.prototype.toString.call(reg);//"[object RegExp]"

    自定义类型都是Object

    Function Phone(){

    }

    Var oppo = new Phone();

    Object.proprotype.toString.call(oppo) //=>[Object Object]”

    Instanceof可以判断出Person

     

     

    判断原生JSON对象

    Object.prototype.toString.call(window.JSON )

    "[object JSON]"

    Math.toString();     // => "[object Math]"

    Atomics[Symbol.toStringTag];      // => "Atomic"

    ArrayBuffer.prototype[Symbol.toStringTag];       // => "ArrayBuffer"SharedArrayBuffer.prototype[Symbol.toStringTag]; // => "SharedArrayBuffer"DataView.prototype[Symbol.toStringTag];          // => "DataView"

     

    import * as module from "./export.js";

    module[Symbol.toStringTag];        // => "Moduel"

    Object.prototype.toString.call((function() {

      return arguments;})());                                           // => "[object Arguments]"

    new Set().keys()[Symbol.toStringTag];   //"Set Iterator" 

     

     

     

    1. Instanceof

    Instanceof的内部机制是通过判断对象的原型联众不是不是能找到类型的prototpye

    但不可以判断基本类型 //1 instanceof Number //fase,所有类型的instanceof Object都是true

    [] instanceof Object //true

    [] instanceof Array //true

     

    1. Array.isArrayes5出现的,如不存在

    if(Array.isArray)

    Array.isArray = funciton(arg){

    Return Object.property.toString.call(arg)==’Object Array’

    }

    ES6 class的新增特性

    1. Class不可以变量提升
    2. 2. function是可以枚举iterator的,可是class不可以
    3. 3. function是可以重命名的, class会报错
    4. Function里面的属性function自带constructor,可以new,但是class不行

    圣杯布局

    有上下,然后

    <html>

    <style>

    .part{

    display: flex;

    flex-direction: column;

    }

    .content{

    display: flex;

    flex-direction: row

    }

    .first {

    background: red;

    height: 100;

    Flex:0 0 200px;

    Order:-1

    }

    .second {

    background: green;

    height: 300;

    flex:1

    }

    .last {

    background: grey;

    height: 500;

    flex:0 0 200px;

    }

    </style>

    <body>

    <div class="part">

    <div class="head">head</div>

    <div class="content">

    <div class="first">first</div>

    <div class="second">secnd</div>

    <div class="last">last</div>

    </div>

    <div class="head">footer</div>

    </div>

    </body>

    </html>

    <html>

    <style>

    .part{

    float:left

    width100%

    }

    .footer{

    clear:both

    }

    .content{

    padding-left:200px;

    padding-right:150px;

    }

    .first {

    background: red;

    height: 100;

    200px;

    display: inline-block;

    margin-left:-100%;

    }

    .second {

    background: green;

    height: 300;

    100%;

    display: inline-block;

    }

    .last {

    background: grey;

    height: 500;

    150px;

    display: inline-block;

    margin-right: -100%;

    }

    </style>

    <body>

    <div class="part">

    <div class="head">head</div>

    <div class="content">

    <div class="first">first</div>

    <div class="second">secnd</div>

    <div class="last">last</div>

    </div>

    <div class="head">footer</div>

    </div>

    </body>

    </html>

    解决跨域问题

    原因:浏览器同源策略

    解决:

     jsonp允许Sscript标签,

    反向代理:nginx Access-Control-Aloow-Open:*

    Cors:配置允许跨域响应头

    Iframe嵌套通讯,postmessage

    事件模型:

    事件绑定:ul-li绑定父元素,利用冒泡

    事件委托:addEventListener判断是冒泡还是响应的元素

    继承

    function SuperType(name){

    this.name = name;

    this.color = ["red"];

    }

    SuperType.prototype.getName = function(){

    return this.name;

    }

    SuperType.prototype.pushColor = function(){

    this.color.push(this.name);

    return this.color;

    }

    function SubType(name){

    SuperType.apply(this, [name]);

    this.subname = name;

    }

    function inhert(subclass, superclass){

    subclass.prototype = Object.create(superclass.prototype);

    subclass.prototype.constructor = subclass;

    }

    inhert(SubType, SuperType)

    var a = new SubType("12");

    a.pushColor();

    var a1 = new SubType("122");

    Ajax fetch

    Xml.readState==4 && xml.status==2000

    Xml.send(‘get’, url, true)

    Xml.send()

    Ajax优缺点

    Js页面数据渲染:交互性好,不会弄出白屏什么的

    单页面应用

    缺点:

    不好爬虫

    Ajax vs fetch

    Fetches6里面的内容, ajxshi xmlhttprequest, fetch是相对简单, 不能取消请求, fetch不能检测进度, 需要特别封装400, 500, 不支持cookie

    Cookie:服务端或者客户端init《服务端通过set-cookie请求头,可以设置失效时间, 默认是关闭浏览器失效 4kb

    过多在header上, 会影响性能

    访问权限窗口

    Session:session是服务端发过来的密文, sessionid

    由于浏览器的安全策略,localstorage是无法跨域的, 也无法让子域继承父域的localstorage的数据, 这点哈cookie区别还很大。

    Sessionstorage当页面关闭, 变不再存在

    如果跨域共享localstorage data

    1. window.attachEvent('storage', function() {11             // TODO: ie8 support12         });13     } else {14         window.addEventListener('storage', function(e) {15             if (e.newValue !== null && /^channel.(.+)/.test(e.key)) {16                 broadcast(RegExp.$1, e.newValue);17             }18         });

    2. ifrmae postMessage

     

    创建对象的几种方法:

    1. 字面量
    2. 工厂模式

    Function factory(){

    // Reutrn (){}

    Return{name:1};

    }

    1. 3. 构造函数
    2. 4. class

      

    Javascript this

    1. new 调用, 绑定到新创建的对象
    2. B.call/apply或者bind调用, 绑定到指定的对象
    3. c由上下文对象调用,绑定到上下文对象
    4. D.默认的,在严格声明undefined, 否则绑定到全局对象
    5. 当函数作为对象的方法调用时, 函数内this指向调用该函数的对象, obj.method指向obj对象
    6. 如果es2015的箭头函数, 经忽略上面的规则, this指向创建的上下文

    var obj ={'name':123, getName:function(){console.log(this)}}

    undefined

    obj.getName()

    //VM600:1 {name: 123, getName: ƒ}

    undefined

    var obj1 ={'name':123, getName:()=>{console.log(this)}}

    undefined

    obj1.getName()

    //Window

    浏览器优化

    渲染队列,每个16.6ms清空。1000/60..但是以下属性也刷新渲染队列, 因为计算复杂,导致回流。

    offsetTop, offsetLeft, offsetWidth, offsetHeight

    scrollTop, scrollLeft, scrollWidth, scrollHeight

    sclientTop, clientLeft, clientWidth, clientHeight

    Width, height

    getCOmputeStyle

    getBoundingClientRect()

    减少重绘和回流

    1. 1. transform而不是top
    2. 2, visiblity,而不是dipslay:none
    3. 避免table
    4. 4,css不要过长,不要内链
    5. 5.尽可能在dom树的末端使用class
    6. 6. 动画效果放在position absolute, position fixed,控制动画速度requestanimationCallback
    7. 减少使用css表达式
    8. Js docuemntFragment,一次渲染
    9. 尽量把变化大的防砸图层, vidio, iframe, cavas
    10. 尽可能一次渲染

      

    浏览器与Node的事件循环有何区别

    多线程,单进程,互斥的

    1. GUI渲染县城
    2. 2. js引芹县城
    3. 定时器触发线程
    4. 事件触发线程
    5. 异步http请求线程

    Node引擎

    运行机制

    1. V8引擎解析javacript脚本
    2. 解析后的代码,调用node api
    3. lib负责node的执行,非配给不同线程,形成eventloop,以异步的方式将任务的执行返回给v8
    4. V8引擎把结果返回给用户

    六个阶段

    Timer setTimeout/setInterval

    I/O

    Idle,

    Poll, 接收timeout,poll不为空,遍历回调队列;poll为空,如果时间比较长, 放入后面setIMmediate

    Check

    callback

  • 相关阅读:
    UI- 基础控件零散知识点回归
    UI-定时器与动画使用总结
    IE浏览器url中带中文报错的问题;以及各种兼容以及浏览器问题总结
    java实现判断一个经纬度坐标是否在一个多边形内(经自己亲测)
    高德地图web端笔记;发送http请求的工具类
    高德地图JSapi
    shiro(三),使用第三方jdbcRealm连接数据库操作
    shiro(二)自定义realm,模拟数据库查询验证
    java安全框架shiro(一)
    解决celipse中mybatis使用的时候xml没有提示的问题
  • 原文地址:https://www.cnblogs.com/connie313/p/13771861.html
Copyright © 2020-2023  润新知