云顶娱乐棋牌-云顶娱乐每天送6元
做最好的网站

目的属性描述符,CSS3弹性伸缩布局

整治总计的有的前端面试题

2016/09/22 · 基本功能力 · 4 评论 · CSS, HTML, Javascript, 面试

正文笔者: 伯乐在线 - Damonare 。未经作者许可,禁绝转发!
迎接参加伯乐在线 云顶娱乐每天送6元,专栏撰稿人。

H5 Crash 研究

2016/05/31 · HTML5 · Crash

最先的小讲出处: 小胡子哥(@Barret李靖)   

我们精晓,支撑页面在 webview 上地利人和运行的前提是兼具四个比非常的慢並且稳固的 webview 容器,而容器的火速稳固不仅仅由容器提供方来保险,也供给容器使用者遵从一些基本法规,不然就有非常大希望出现页面 Crash 的景况,那几个轨道是什么样?什么样的上层代码会挑起容器至极退出?那是本文要求解说的剧情。

CSS3弹性伸缩布局(二)——flex布局

2015/09/02 · CSS · 云顶娱乐棋牌,CSS3

原稿出处: 郭锦荣   

上一篇博客《CSS3弹性伸缩布局(一)——box布局》介绍了旧版本的box布局,而这篇博客将重要介绍最新版本的flex布局的基础知识。

新本子简单介绍

新本子的Flexbox模型是2011年五月提议的劳作草案,那么些草案是由W3C 推出的新颖语法。那些版本立下志愿于钦命专门的学问,让新型的浏览器全面同盟,在今后浏览器的推陈出新中落到实处合併。

自在学习 JavaScript(7):对象属性描述符

2018/01/11 · JavaScript · 对象

最先的作品出处: Dhananjay Kumar   译文出处:码农网/小峰   

在JavaScript中,你能够如下所示成立一个指标字面量:

var cat = { name: 'foo', age: 9 };

1
2
3
4
var cat = {
    name: 'foo',
    age: 9
};

乍一看,好像对象cat有字符串和数字值这两本个性。不过,那不只是JavaScript解释器。在ES第55中学,介绍了品质描述符的概念。在大家继续钻探属性描述符在此之前,让咱们试着应对多少个难题:

  • 怎么样创设只读属性?
  • 如何制订不可胜数的属性?
  • 怎么样使属性不可配置?
  • 什么样鲜明壹脾质量是不是是只读的?

一经你掌握属性描述符,那么你就足以应对全部这几个主题材料。

请看上面包车型大巴代码:

var cat = { name: 'foo', age: 9 }; var a = Object.getOwnPropertyDescriptor(cat, 'name'); console.log(a);

1
2
3
4
5
6
var cat = {
    name: 'foo',
    age: 9
};
var a = Object.getOwnPropertyDescriptor(cat, 'name');
console.log(a);

出口将如下所示:

云顶娱乐每天送6元 1

正如你在此间看见的,那个本性有多本性状:

value保存属性的数额,而writable,enumerable和configurable则描述属性的别样特色。接下来大家将对那几个特点一一解说。

有关 bind 你大概要求理解的知识点以及使用景况

2016/08/18 · JavaScript · bind

本文小编: 伯乐在线 - 韩子迟 。未经小编许可,禁止转发!
招待加入伯乐在线 专辑作者。

不看不晓得,一看吓一跳,已经整整贰个月未有创新 underscore 源码解读体系作品了。前边我们已经完毕了 Object ,Array,Collection 上的恢弘方法的源码深入分析,本文开端来解读 Function 上的扩展方法。

完整的 underscore 源码解读体系文章请移步 ,以为还阔以的话,给个 star 勉力下楼主呗 ^_^

HTML面试题

1.XHTML和HTML有怎么着分裂

  • HTML是一种为主的WEB网页设计语言,XHTML是叁个依据XML的置标语言
    最关键的不及:
  • XHTML 成分必得被正确地嵌套。
  • XHTML 成分必需被关闭。
  • 标签字必需用小写字母。
  • XHTML 文书档案必需具有根成分。

2.前端页面有哪三层构成,分别是怎样?功用是怎样?

  • 结构层 Html 表示层 CSS 行为层 js;
    3.您做的页面在怎么流览器测量检验过?那一个浏览器的基石分别是怎么?
  • Ie(Ie内核) 火狐(Gecko) 谷歌(webkit,Blink) opera(Presto),Safari(wbkit)

4.如何是语义化的HTML?

  • 直观的认知标签 对于寻找引擎的抓取有好处,用准确的价签做科学的业务!
  • html语义化正是让页面包车型客车从头到尾的经过结构化,便于对浏览器、找寻引擎解析;
    在并未有样式CCS景况下也以一种文书档案格式展现,何况是轻易阅读的。搜索引擎的爬虫注重于标志来鲜明上下文和一一主要字的权重,利于 SEO。
  • 使阅读源代码的人对网址更易于将网址分块,便于阅读维护驾驭。

5.HTML5 为何只需求写 !DOCTYPE HTML?

  • HTML5 不依据S克林霉素L,由此不须要对DTD实行引用,可是供给doctype来标准浏览器的一坐一起(让浏览器根据它们应该的秘籍来运营);而HTML4.01基于S红霉素L,所以须要对DTD进行引用,手艺告诉浏览器文书档案所使用的文书档案类型。

6.Doctype效率?标准格局与同盟情势各有哪些分别?

  • !DOCTYPE证明位于位于HTML文书档案中的第一行,处于html 标签此前。告知浏览器的深入分析器用怎么着文书档案标准分析那么些文书档案。DOCTYPE不设有或格式不得法会促成文书档案以合作情势表现。
  • 正规情势的排版 和JS运作形式都以以该浏览器补助的最高规范运转。在非常方式中,页面以宽松的向后优良的秘诀展现,模拟老式浏览器的一颦一笑以免范站点不能够职业。

7.html5有哪些新特征、移除了那个元素?如什么地方理HTML5新标签的浏览器包容难点?如何区分 HTML 和
HTML5?

  • HTML5 将来已经不是 S林大霉素L 的子集,首若是关于图像,地点,存款和储蓄,多使命等效果的充实。
  • 绘画 canvas
  • 用以媒介重放的 video 和 audio 成分
  • 本土离线存款和储蓄 localStorage 短期积存数据,浏览器关闭后数据不遗弃;
  • sessionStorage 的数目在浏览器关闭后自动删除
  • 语意化更好的开始和结果成分,举例 article、footer、header、nav、section
  • 表单控件,calendar、date、time、email、url、search
  • 新的工夫webworker, websockt, 吉优location
    移除的要素
  • 纯表现的因素:basefont,big,center,font, s,strike,tt,u;
  • 对可用性产生负面影响的要素:frame,frameset,noframes;
    支持HTML5新标签:
  • IE8/IE7/IE6援助通过document.createElement方法发生的价签,
  • 能够选择这一特点让那些浏览器帮助HTML5新标签,
  • 浏览器扶助新标签后,还亟需加多标签暗中同意的体裁:

8.请描述一下 cookies,sessionStorage 和 localStorage 的界别?

  • cookie在浏览器和劳务器间来回传递。 sessionStorage和localStorage不会
  • sessionStorage和localStorage的积存空间更加大;
  • sessionStorage和localStorage有更加多增多易用的接口;
  • sessionStorage和localStorage各自独立的贮存空间;

9.什么促成浏览器内八个标签页之间的通讯?

  • 调用localstorge、cookies等本地存储格局

H5 Crash 难题大约

下图是 H5 Crash 的大约流程图:

云顶娱乐每天送6元 2

由于前端不可能捕捉到页面 Crash 的地方和库房,可是 H5 页面上发出的荒唐会传递到 Java 和更底层的 Native 直到容器至极退出,在剥离的那一刻,容器会将饭店写入到日志中,当后一次张开容器时(也大概是定时报告)就能够申报这一个旅馆消息。

那边大家依然持续上一篇博客中的例子,使用新型版本的flex布局来落到实处平等的意义。

html代码:

XHTML

<div> <p>爆发过的空间依旧看价格哈健康啊水果和卡刷卡更况兼规划哈萨克的骨灰撒块光辉卡萨很绝望啊是高科技(science and technology)傻空给产生过的半空中仍然看价格哈健康啊水果和卡刷卡更而且规划哈萨克的骨灰撒块光辉卡萨很深透啊是高科技(science and technology)傻空给</p> <p>产生过的长空依旧看价格哈健康啊水果和卡刷卡更而且规划哈萨克的骨灰撒块光辉卡萨很深透啊是高科学技术傻空给</p> <p>发生过的上空照旧看价格哈健康啊水果和卡刷卡更况且规划</p> </div>

1
2
3
4
5
<div>
    <p>发生过的空间还是看价格哈健康啊水果和卡刷卡更何况规划哈萨克的骨灰撒块光辉卡萨很干净啊是高科技傻空给发生过的空间还是看价格哈健康啊水果和卡刷卡更何况规划哈萨克的骨灰撒块光辉卡萨很干净啊是高科技傻空给</p>
    <p>发生过的空间还是看价格哈健康啊水果和卡刷卡更何况规划哈萨克的骨灰撒块光辉卡萨很干净啊是高科技傻空给</p>
    <p>发生过的空间还是看价格哈健康啊水果和卡刷卡更何况规划</p>
</div>

基础的css代码:

CSS

p{ width:150px; border:3px solid lightblue; background:lightgreen; padding:5px; margin:5px; }

1
2
3
4
5
6
7
p{
    width:150px;
    border:3px solid lightblue;
    background:lightgreen;
    padding:5px;
    margin:5px;
}

那会儿大家给div成分设置display属性为flex :

CSS

div{ display:flex; }

1
2
3
div{
    display:flex;
}

刷新浏览器后的坚守是:

云顶娱乐每天送6元 3

能够看见效果跟旧版本的-webkit-box是均等的。

在新本子中装置为弹性伸缩盒的display属性值有多少个:

  • flex : 将容器盒模型作为块级弹性伸缩盒展现
  • inline-flex : 将容器盒模型作为内联级弹性伸缩盒突显

看一下新本子的flex布局的浏览器包容意况:

云顶娱乐每天送6元 4

PS:能够见到,在有的相比旧的webkit内核的浏览器(Chrome,Safari)中,大家须要动用-webkit-flex来做协作,不过此间作者就大致了。

目的属性描述符,CSS3弹性伸缩布局。上边将顺序介绍flex布局的依次属性的功底用法:

writable

天性的值是还是不是能够退换是由writable特征决定的。要是writable设置为false,那么属性的值不可能改造,JavaScript将忽略属性值中的任何更换。请看上边包车型客车代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { writable: false }); console.log(cat.name); // foo cat.name = "koo"; // JavaScript will ignore it as writable is set to false console.log(cat.name); // foo

1
2
3
4
5
6
7
8
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { writable: false });
console.log(cat.name); // foo
cat.name = "koo"; // JavaScript will ignore it as writable is set to false
console.log(cat.name); // foo

你能够行使Object.defineProperty更换writable、enumerable和configurable特征的值。我们稍后会在那篇小说中详细座谈Object.defineProperty,但正如您在地点的代码片段中看看的那么,我们已经将writable属性设置为false,进而更动了name属性的值。JavaScript将忽略重新分配,而且name属性的值将保障为foo。

若是以严谨形式运作代码,那么为了重新分配writable设置为false的属性值,JavaScript将抛出非常。请看下边的代码:

'use strict'; var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { writable: false }); console.log(cat.name); // foo cat.name = "koo"; // error

1
2
3
4
5
6
7
8
'use strict';
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { writable: false });
console.log(cat.name); // foo
cat.name = "koo"; // error

在此间,JavaScript以严俊方式运行,由此,当您重新分配name属性的值时,JavaScript将抛出特别,如下所示:

云顶娱乐每天送6元 5

此间的错误音讯说,你不可能赋值到只读属性。也正是说,假使属性的writable特征设置为false,那么属性将出任只读属性。

bind 简介

Ok,前日要讲的正是 bind。关于 bind,能够先活动楼主以前写的作品 ECMAScript 5(ES5) 中 bind 方法简单介绍备忘,有个为主的概念。

bind() 方法会创制贰个新函数,当这一个新函数被调用时,它的 this 值是传递给 bind() 的第八个参数, 它的参数是 bind() 的其余参数和其原来的参数。

语法是那般样子的:

fun.bind(thisArg[, arg1[, arg2[, ...]]])

1
fun.bind(thisArg[, arg1[, arg2[, ...]]])
  • thisArg 当绑定函数被调用时,该参数会作为原函数运转时的 this 指向。当使用 new 操作符调用绑定函数时,该参数无效。
  • arg1, arg2, … (可选)当绑定函数被调用时,这一个参数加上绑定函数本人的参数会服从顺序作为原函数运维时的参数。

CSS面试题

1.简要说一下CSS的因素分类

  • 块级元素:div,p,h1,form,ul,li;
  • 行内成分 : span>,a,label,input,img,strong,em;

2.CSS隐敝成分的三种艺术(起码讲出二种)

  • Opacity:成分自身还是占领它协和的岗位并对网页的布局起效果。它也将响应客商交互;
  • Visibility:与 opacity 独一不相同的是它不会响应任何客户交互。其它,成分在读屏软件中也会被隐形;
  • Display:display 设为 none 任何对该因素间接打顾客交互操作都不容许奏效。其它,读屏软件也不会读到成分的剧情。这种方法发出的效率就疑似成分完全空中楼阁;
  • Position:不会潜移默化布局,能让要素保持能够操作;
  • Clip-path:clip-path 属性还向来不在 IE 只怕 艾德ge 下被全然帮衬。假若要在您的 clip-path 中应用外界的 SVG 文件,浏览器补助度还要低;

3.CSS消除浮动的三种艺术(最少二种)

  • 使用带clear属性的空成分
  • 使用CSS的overflow属性;
  • 使用CSS的:after伪元素;
  • 应用邻接成分管理;

4.CSS居中(满含水平居四之日垂直居中)

内联成分居中方案

水平居中安装:
1.行内成分

  • 设置 text-align:center;

2.Flex布局

  • 设置display:flex;justify-content:center;(灵活运用,协理Chroime,Firefox,IE9+)

笔直居中装置:
1.父元素中度鲜明的单行文本(内联元素)

  • 设置 height = line-height;

2.父元素中度明确的多行文本(内联元素)

  • a:插入 table (插入方法和水准居中千篇一律),然后设置 vertical-align:middle;
  • b:先设置 display:table-cell 再设置 vertical-align:middle;

    ### 块级元素居中方案

    水平居中安装:
    1.定宽块状成分

  • 设置 左右 margin 值为 auto;

2.不定宽块状成分

  • a:在要素外参与 table 标签(完整的,包蕴table、tbody、tr、td),该因素写在 td 内,然后设置 margin 的值为 auto;
  • b:给该因素设置 displa:inine 方法;
  • c:父成分设置 position:relative 和 left:八分之四,子成分设置 position:relative 和 left:二分之一;

垂直居中安装:

  • 使用position:absolute(fixed),设置left、top、margin-left、margin-top的属性;
  • 利用position:fixed(absolute)属性,margin:auto这一个必需毫无遗忘了;
  • 动用display:table-cell属性使内容垂直居中;
  • 使用css3的新属性transform:translate(x,y)属性;
  • 使用:before元素;

5.写出二种IE6 BUG的缓和方法

  • 双边距BUG float引起的 使用display
  • 3像素难点 使用float引起的 使用dislpay:inline -3px
  • 超链接hover 点击后失效 使用科学的书写顺序 link visited hover active
  • Ie z-index难点 给父级增多position:relative
  • Png 透明 使用js代码 改
  • Min-height 最小高度 !Important 化解’
  • select 在ie6下遮盖 使用iframe嵌套
  • 为什么没有章程定义1px左右的上升的幅度容器(IE6私下认可的行高变成的,使用over:hidden,zoom:0.08 line-height:1px)

6.对此SASS或是Less的领会程度?喜欢这么些?

  • 语法介绍

7.Bootstrap掌握程度

  • 特点,排版,插件的行使;

8.页面导入样式时,使用link和@import有怎么着界别?

  • link属于XHTML标签,除了加载CSS外,还是能用于定义讴歌ZDXSS, 定义rel连接属性等职能;而@import是CSS提供的,只可以用于加载CSS;
  • 页面被加载的时,link会同时被加载,而@import援引的CSS会等到页面被加载完再加载;
  • import是CSS2.1 建议的,只在IE5以上技巧被辨认,而link是XHTML标签,无包容难题;

9.介绍一下CSS的盒子模型?

  • 有二种, IE 盒子模型、规范 W3C 盒子模型;IE的content部分含有了 border 和 pading;
  • 盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border).

10.CSS 采用符有如何?哪些属性能够一而再?优先级算法如何总括? CSS3新添伪类有那三个?

  • id选择器( # myid)
  • 类接纳器(.myclassname)
  • 标签选取器(div, h1, p)
  • 紧邻采用器(h1 + p)
  • 子选用器(ul > li)
  • 后人选取器(li a)
  • 通配符接纳器( * )
  • 性情选拔器(a[rel = “external”])
  • 伪类选取器(a: hover, li: nth – child)
  • 可延续的体制: font-size font-family color, UL LI DL DD DT;
  • 不可两次三番的样式:border padding margin width height ;
  • 优先级就近原则,同权重景况下样式定义近来者为准;
  • 优先级为:

    JavaScript

    !important > id > class > tag important 比 内联优先级高

    1
    2
    !important >  id > class > tag
    important 比 内联优先级高

11.CSS3有啥样新特色?

  • CSS3贯彻圆角(border-radius:8px),阴影(box-shadow:10px),
    对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform)
  • transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋转,缩放,定位,倾斜
    扩张了更加多的CSS采用器 多背景 rgba

H5 Crash 原因初探

测验代码 仓库地址:

git clone ; cd demo;

1
2
git clone https://github.com/barretlee/h5crash.git;
cd demo;

注意: 代码须求在 Webview 容器中测量检验,PC 浏览器下不会出现至极。

H5 Crash 的来头不太精通,可是从经验上判别和探求,大概归类为以下三种:

1. 内部存款和储蓄器难题

  • 测验方法:使用闭包,不断加码内部存款和储蓄器量,看看扩大到哪个区间大小, webview 容器会出现至极
  • 测量检验地方:(微信、博客园只怕别的顾客端张开该页面包车型大巴客商,能够点进去测量试验下,采用100M 内存,不出意外,你的客商端会闪退。)

XHTML

<script> var Closure = function() { var _cache = []; var cache = 0; var add = function(size) { cache += size; size = size * 1024 * 1024; _cache.push(new Array(size).join('x')); refresh(); }; var refresh = function() { r.innerHTML = '内部存款和储蓄器消耗: ' + cache + 'M'; }; return { cache: cache + 'M', add: add, refresh: refresh } }; var closure = Closure(); </script> <button onclick="closure.add(1)">增加1M 内部存款和储蓄器消耗</button> <button onclick="closure.add(10)">增添10M 内部存款和储蓄器消耗</button> <button onclick="closure.add(20)">扩充20M 内部存款和储蓄器消耗</button> <button onclick="closure.add(50)">增加50M 内存消耗</button> <button onclick="closure.add(100)">扩张 100M 内部存款和储蓄器消耗</button> <div id="r">内部存款和储蓄器消耗:0 M</div>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<script>
var Closure = function() {
  var _cache = [];
  var cache = 0;
  var add = function(size) {
    cache += size;
    size = size * 1024 * 1024;
    _cache.push(new Array(size).join('x'));
    refresh();
  };
  var refresh = function() {
    r.innerHTML = '内存消耗: ' + cache + 'M';
  };
  return {
    cache: cache + 'M',
    add: add,
    refresh: refresh
  }
};
var closure = Closure();
</script>
 
<button onclick="closure.add(1)">增加 1M 内存消耗</button>
<button onclick="closure.add(10)">增加 10M 内存消耗</button>
<button onclick="closure.add(20)">增加 20M 内存消耗</button>
<button onclick="closure.add(50)">增加 50M 内存消耗</button>
<button onclick="closure.add(100)">增加 100M 内存消耗</button>
 
<div id="r">内存消耗:0 M</div>

存在的干扰:这种测量试验存在比相当多的烦懑,比方设备项目、系统项目(iOS/Android)、和设施内部存款和储蓄器运长势况等。

2. Layers 数问题

Layers 数的获得比较麻烦,Chrome Driver 未有提供该数额的接口,近日也远非比较好的主意得到那一个数额。

  • 测量试验方法:通过分化的艺术创造层,观望页面包车型客车 Crash 意况
  • 测量检验地点:

XHTML

<style>.transform { transform: translateZ(0); } .animation { width:100px; height:100px; background:red; position:relative; animation:move 5s infinite; } @keyframes move { from {left:0px;} to {left:200px;} } </style> <script> var Layer = function() { function getType() { return document.querySelector('input:checked').value; }; return { createOne: function(index) { var div = document.createElement('div'); div.appendChild(document.createTextNode(index)); switch(getType()) { case 'opacity': div.style.cssText = "opacity:" + (index / 1000); break; case 'transform': div.className = 'transform'; break; case 'animation': div.className = 'animation'; break; case 'zindex': div.style.cssText = "position:relative; z-index:" + index; break; } document.body.appendChild(div); }, create: function(num) { [].slice.call(document.querySelectorAll('div')).forEach(function(item) { item.parentNode && item.parentNode.removeChild(item); }); while(num--) { this.createOne(num); } } } }; var layer = Layer(); </script> <strong>层类型: </strong> <ul> <li><label><input type="radio" checked name="type" value="opacity"> <span>通过 opacity 成立层</span></label></li> <li><label><input type="radio" name="type" value="transform"> <span>通过 transforms 创立层</span></label></li> <li><label><input type="radio" name="type" value="animation"> <span>通过 animation 创造层</span></label></li> <li><label><input type="radio" name="type" value="zindex"> <span>通过相对定位分层</span></label></li> </ul> <button onclick="layer.create(1)">创造 1 个层</button> <button onclick="layer.create(10)">成立 13个层</button> <button onclick="layer.create(20)">创设 21个层</button> <button onclick="layer.create(50)">创建 50个层</button> <button onclick="layer.create(100)">创建 100 个层</button> <button onclick="layer.create(200)">创立 200 个层</button> <button onclick="layer.create(500)">成立 500 个层</button> <button onclick="layer.create(壹仟)">创造 一千个层</button> <button onclick="layer.create(3000)">成立 2000个层</button> <button onclick="layer.create(四千)">创立 5000个层</button> <button onclick="layer.create(一千0)">创立10000 个层</button>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<style>.transform {
  transform: translateZ(0);
}
.animation {
  width:100px;
  height:100px;
  background:red;
  position:relative;
  animation:move 5s infinite;
}
 
@keyframes move {
  from {left:0px;}
  to {left:200px;}
}
</style>
<script>
var Layer = function() {
  function getType() {
    return document.querySelector('input:checked').value;
  };
  return {
    createOne: function(index) {
      var div = document.createElement('div');
      div.appendChild(document.createTextNode(index));
      switch(getType()) {
        case 'opacity':
          div.style.cssText = "opacity:" + (index / 1000);
          break;
        case  'transform':
          div.className = 'transform';
          break;
        case  'animation':
          div.className = 'animation';
          break;
        case  'zindex':
          div.style.cssText = "position:relative; z-index:" + index;
          break;
      }
      document.body.appendChild(div);
    },
    create: function(num) {
      [].slice.call(document.querySelectorAll('div')).forEach(function(item) {
        item.parentNode && item.parentNode.removeChild(item);
      });
      while(num--) {
        this.createOne(num);
      }
    }
  }
};
var layer = Layer();
</script>
 
<strong>层类型: </strong>
<ul>
  <li><label><input type="radio" checked name="type" value="opacity"> <span>通过 opacity 创建层</span></label></li>
  <li><label><input type="radio" name="type" value="transform"> <span>通过 transforms 创建层</span></label></li>
  <li><label><input type="radio" name="type" value="animation"> <span>通过 animation 创建层</span></label></li>
  <li><label><input type="radio" name="type" value="zindex"> <span>通过绝对定位分层</span></label></li>
</ul>
 
<button onclick="layer.create(1)">创建 1 个层</button>
<button onclick="layer.create(10)">创建 10 个层</button>
<button onclick="layer.create(20)">创建 20 个层</button>
<button onclick="layer.create(50)">创建 50 个层</button>
<button onclick="layer.create(100)">创建 100 个层</button>
<button onclick="layer.create(200)">创建 200 个层</button>
<button onclick="layer.create(500)">创建 500 个层</button>
<button onclick="layer.create(1000)">创建 1000 个层</button>
<button onclick="layer.create(2000)">创建 2000 个层</button>
<button onclick="layer.create(5000)">创建 5000 个层</button>
<button onclick="layer.create(10000)">创建 10000 个层</button>
  • 其实,成立四个层,也是对内部存款和储蓄器的一代天骄消耗,页面 Crash 恐怕照旧因为内部存款和储蓄器消耗过大

3. 并发过多难点

  • 测验方法:尝试并发发出各样差别的伸手(Fetch央求、XH大切诺基诉求、Script/CSS 财富乞请),阅览页面 Crash 情形
  • 测量检验地点:

XHTML

<script> var Request = function() { function getType() { return document.querySelector('input:checked').value; }; function getResource() { var type = getType(); var resource = { fetch: '/', xhr: '/', script: '//g.alicdn.com/sd/data_sufei/1.5.1/aplus/index.js', css: '//g.alicdn.com/kg/global-util/1.0.3/index-min.css' }; return resource[type]; }; return { emitOne: function() { var url = getResource() + "?_t=" + (new Date * 1 + Math.random()); switch(getType()) { case 'fetch': return fetch('/'); case 'xhr': with(new XMLHttpRequest) { open('GET', url); send(); } return; case 'script': var s = document.createElement('script'); s.src = url; document.body.appendChild(s); return; case 'css': var s = document.createElement('link'); s.href = url; document.body.appendChild(s); } }, emit: function(num) { [].slice.call(document.querySelectorAll('script,link')).forEach(function(item) { item.parentNode && item.parentNode.removeChild(item); }); while(num--) { this.emitOne(); } } } }; var request = Request(); </script> <strong>央浼类型: </strong> <ul> <li><label><input type="radio" checked name="type" value="fetch"> <span>使用 Fetch 发送诉求</span></label></li> <li><label><input type="radio" name="type" value="xhr"> <span>使用 XH君越发送央求</span></label></li> <li><label><input type="radio" name="type" value="script"> <span>并发央浼脚本财富</span></label></li> <li><label><input type="radio" name="type" value="css"> <span>并发乞求样式能源</span></label></li> </ul> <button onclick="request.emit(1)">并发 1 个诉求</button> <button onclick="request.emit(10)">并发 10个央浼</button> <button onclick="request.emit(20)">并发 二十几个央浼</button> <button onclick="request.emit(50)">并发 肆19个伏乞</button> <button onclick="request.emit(100)">并发 100 个供给</button> <button onclick="request.emit(500)">并发 500 个央浼</button> <button onclick="request.emit(一千)">并发 一千 个乞请</button>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<script>
var Request = function() {
  function getType() {
    return document.querySelector('input:checked').value;
  };
  function getResource() {
    var type = getType();
    var resource = {
      fetch: '/',
      xhr: '/',
      script: '//g.alicdn.com/sd/data_sufei/1.5.1/aplus/index.js',
      css: '//g.alicdn.com/kg/global-util/1.0.3/index-min.css'
    };
    return resource[type];
  };
  return {
    emitOne: function() {
      var url = getResource() + "?_t=" + (new Date * 1 + Math.random());
      switch(getType()) {
        case 'fetch':
          return fetch('/');
        case 'xhr':
          with(new XMLHttpRequest) {
            open('GET', url);
            send();
          }
          return;
        case 'script':
          var s = document.createElement('script');
          s.src = url;
          document.body.appendChild(s);
          return;
        case 'css':
          var s = document.createElement('link');
          s.href = url;
          document.body.appendChild(s);
      }
    },
    emit: function(num) {
      [].slice.call(document.querySelectorAll('script,link')).forEach(function(item) {
        item.parentNode && item.parentNode.removeChild(item);
      });
      while(num--) {
        this.emitOne();
      }
    }
  }
};
var request = Request();
</script>
 
<strong>请求类型: </strong>
<ul>
  <li><label><input type="radio" checked name="type" value="fetch"> <span>使用 Fetch 发送请求</span></label></li>
  <li><label><input type="radio" name="type" value="xhr"> <span>使用 XHR 发送请求</span></label></li>
  <li><label><input type="radio" name="type" value="script"> <span>并发请求脚本资源</span></label></li>
  <li><label><input type="radio" name="type" value="css"> <span>并发请求样式资源</span></label></li>
</ul>
 
<button onclick="request.emit(1)">并发 1 个请求</button>
<button onclick="request.emit(10)">并发 10 个请求</button>
<button onclick="request.emit(20)">并发 20 个请求</button>
<button onclick="request.emit(50)">并发 50 个请求</button>
<button onclick="request.emit(100)">并发 100 个请求</button>
<button onclick="request.emit(500)">并发 500 个请求</button>
<button onclick="request.emit(1000)">并发 1000 个请求</button>
  • 存在的扰攘:设备的品类、设备的 CPU 使用状态和互连网境况等。

flex-direction属性

flex-direction属性用于安装伸缩项指标排列格局。

CSS

div{ display:flex; flex-direction:column; }

1
2
3
4
div{
    display:flex;
    flex-direction:column;
}

意义如下:

云顶娱乐每天送6元 6

结果正是容器内的保有品类依照从上到下排列的。

当你设置为row-reverse时,效果就是:

云顶娱乐每天送6元 7

本条是从浏览器的右边往左侧排列的。

此属性的属性值有:

  • row : 设置从左到右排列
  • row-reverse : 设置从右到左排列
  • column : 设置从上到下排列
  • column-reverse : 设置从下到上排列

世家不要紧都试一下,看看每贰个的功用怎么着。

configurable

脾气的其余特色是还是不是足以计划决定于configurable的值。即便属性configurable设置为false,则无法更换writable和enumerable的值。请看下边包车型大巴代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { configurable: false }); Object.defineProperty(cat, 'name', { enumerable: false });

1
2
3
4
5
6
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
Object.defineProperty(cat, 'name', { enumerable: false });

在那边,大家将name属性的configurable设置为false。之后,我们将enumerable设置为false。如前所述,一旦二个性格的configurable设置为false,那么你就无法更换另八个表征。

对于地点的代码,JavaScript会抛出一个TypeError相当,如下图所示。你会赢得不能再一次定义属性名称的一无可取:

云顶娱乐每天送6元 8

在应用configurable的时候,你要求牢记,改换configurable的值只好做三回。假如将品质的configurable设置为false,那么您就无法重新分配它;你无法撤废对configurable的改变。请看上面包车型地铁代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { configurable: false }); Object.defineProperty(cat, 'name', { configurable: true });

1
2
3
4
5
6
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
Object.defineProperty(cat, 'name', { configurable: true });

咱们在重新分配name属性的configurable,不过,JavaScript会对上述操作抛出多个TypeError,如下图所示。正如您所见到的,一旦configurable被设置为false,就无法裁撤那二个退换。

云顶娱乐每天送6元 9

另二个要害的事体是,即便configurable设置为false,writable也足以从true改变为false——但反之则不然。请看上边包车型大巴代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { configurable: false }); Object.defineProperty(cat, 'name', { writable: false }); cat.name = 'koo'; console.log(cat.name); // foo

1
2
3
4
5
6
7
8
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
Object.defineProperty(cat, 'name', { writable: false });
cat.name = 'koo';
console.log(cat.name); // foo

万一不是在从严格局下,上面包车型客车代码不会抛出别的非常。正如小编辈前边所争论的,尽管configurable为false,writable也得以从true变为false,反之则不然。另多个内需牢记的主要事项是,你无法删除configurable设置为false的属性。

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { configurable: false }); delete cat.name; // wont delete as configurable is false console.log(cat.name); // foo delete (cat.age); // will be deleted console.log(cat.age); // undefined

1
2
3
4
5
6
7
8
9
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
delete cat.name; // wont delete as configurable is false
console.log(cat.name); // foo
delete (cat.age); // will be deleted
console.log(cat.age); // undefined

在地点的代码中,你会意识JavaScript不会删除name属性,因为name属性的configurable设置为false。

参数

bind 的率先个参数会作为原函数运行时的 this 指向,很少说;而第一个初始的参数是可选的,当绑定函数被调用时,那几个参数加上绑定函数自个儿的参数会奉公守法顺序作为原函数运转时的参数。怎么精晓?

function fn(a, b, c) { return a + b + c; } var _fn = fn.bind(null, 10); var ans = _fn(20, 30); // 60

1
2
3
4
5
6
function fn(a, b, c) {
  return a + b + c;
}
 
var _fn = fn.bind(null, 10);
var ans = _fn(20, 30); // 60

fn 函数必要四个参数,_fn 函数将 10 作为暗中同意的第四个参数,所以只必要传入多个参数就可以,假设你一点都不小心传入了八个参数,放心,也只会取前八个。

function fn(a, b, c) { return a + b + c; } var _fn = fn.bind(null, 10); var ans = _fn(20, 30, 40); // 60

1
2
3
4
5
6
function fn(a, b, c) {
  return a + b + c;
}
 
var _fn = fn.bind(null, 10);
var ans = _fn(20, 30, 40); // 60

那有甚用吗?假设有个别函数,前多少个参数已经 “钦赐” 了,我们便得以用 bind 重临二个新的函数。约等于说,bind() 能使贰个函数具有预设的初步参数。这个参数(尽管有些话)作为 bind() 的第一个参数跟在 this 前面,之后它们会被插入到目的函数的参数列表的最早地方,传递给绑定函数的参数会跟在它们的背后。

function list() { return Array.prototype.slice.call(arguments); } var list1 = list(1, 2, 3); // [1, 2, 3] // Create a function with a preset leading argument var leadingThirtysevenList = list.bind(undefined, 37); var list2 = leadingThirtysevenList(); // [37] var list3 = leadingThirtysevenList(1, 2, 3); // [37, 1, 2, 3]

1
2
3
4
5
6
7
8
9
10
11
function list() {
  return Array.prototype.slice.call(arguments);
}
 
var list1 = list(1, 2, 3); // [1, 2, 3]
 
// Create a function with a preset leading argument
var leadingThirtysevenList = list.bind(undefined, 37);
 
var list2 = leadingThirtysevenList(); // [37]
var list3 = leadingThirtysevenList(1, 2, 3); // [37, 1, 2, 3]

本文由云顶娱乐棋牌发布于云顶娱乐棋牌,转载请注明出处:目的属性描述符,CSS3弹性伸缩布局

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。