玩耍开垦能源,你不可不知的

2019-10-29 22:29栏目:真实赌钱游戏网站
TAG:

您不可不知的 HTML 优化技巧

2016/09/12 · 基础手艺 · 2 评论 · HTML

正文小编: 伯乐在线 - 赐紫含桃城控件 。未经笔者许可,制止转发!
应接出席伯乐在线 专栏编辑者。

怎么升高Web页面包车型大巴性质,相当多开荒职员从多个方面来出手如JavaScript、图像优化、服务器配置,文件减弱或是调解CSS。

很了解HTML 已经落成了一个瓶颈,就算它是开垦Web 分界面必备的大旨语言。HTML页面包车型地铁载荷也是越来越重。大许多页面平均必要40K的半空中,像一些大型网址会蕴藏数以千计的HTML 成分,页面Size会更加大。

怎么样有效的减弱HTML 代码的复杂度和页面成分的多少,本文首要清除了那些标题,从三个地点介绍了哪些编写简练,清晰的HTML 代码,可以使得页面加载更为迅猛,且能在各样装置中运作非凡。

根源 Mozilla 的 HTML5 游戏开荒资源

2014/09/19 · HTML5 · HTML5

本文由 伯乐在线 - betty135 翻译。未经许可,禁绝转载!
乌克兰语出处:mozilla。迎接参预翻译组。

前天我们揭发了Firefox 31,它兼具部分可以帮助HTML5娱乐开荒者编写并调节和测验复杂游戏的新特点。何况Mozilla用博客记录了用asm.js做的首个款式商业娱乐,像Dungeon Defenders Eternity 和Cloud Raiders那七款游戏都以用Emscripten编写翻译器交叉编写翻译到JavaScript中的。像这样的游玩表示HTML5已然是叁个游玩平台了。

假诺您对Emscripten感兴趣你能够在Emscripten wiki叩问更加多详细新闻,也能够在github page上边获得代码。另外二个很好的财富是MDN上的 Emscripten tutorial。假使你想知道的asm.js品质,可以从那篇著作中获得更多细节asm.js performance improvements in the latest version of Firefox make games fly! 。

在这里篇文章中大家会介绍给您有的Mozilla开采者所创设的财富,利用这几个财富你能够编写并调解基于HTML5的嬉戏。那不是多个特别详尽的列表,大家招待大家提供在此方面任何有价值的反映,请在胡言乱语中报告大家。

闭包,是真的美

2018/04/11 · JavaScript · 闭包

原稿出处: 张建成   

接待探讨和star

写那篇小说时的心境是那些忐忑的,因为对于大家明日的主演:闭包,超多友人都写过有关它的小说,相信大家也读过不菲,那个小说到底有没有把JS中这一个看似传说的东西讲精晓,说实心里,真的有,但为数非常少。

写那篇随笔的初心:让具备见到那篇小说的友人都彻头彻尾的知情闭包 => 升高JS水平 => 能够写出更加高素质的JS代码。

开文之所以说心态是恐慌的,正是怕达不到本人写该文的初志,不过自身有信念而且自个儿也会极力的做到本人的指标。如写作中有丝毫误人子弟的陈述,招待大家指正,在此感恩图报。

大家开首吧:

深信广大JS的lovers都听别人说过那句话:闭包相当重大不过很难驾驭

自己伊始也是那般以为,然则当本身努力学习了JS的部分深层的原理未来自身倒以为闭包并非那么不佳掌握,反倒是让本身以为出大器晚成种极好看的感到。当作者到底领略闭包的那意气风发须臾,心中国汽油工程建筑公司然产生风流浪漫种特别兴奋认为,犹如**”酒酣尚醉,花未全开”**这种美景同样。

用Web Components创设单页面应用

2015/01/19 · JavaScript · Web Components

本文由 伯乐在线 - 周进林 翻译,Mxt 校稿。未经许可,防止转发!
俄文出处:www.polymer-project.org。招待参加翻译组。

您是何等行使Polymer营造二个单页应用的?那么些标题大家在Polymer团队里早就问过大多遍了。大家的答案(一直以来地)是“使用组件(component)!”。然则,使用新本领去解决现存的标题一再不会应声得到分明的效用。如何把一批模块化组件组合到三个特大型的实用的使用中去?

在本教程,小编将会给你来得怎么着去构建三个意义生龙活虎体化的单页应用:

真实赌钱游戏平台网站 1

  • 完全使用Polymer的着力成分构建
  • 选用响应式设计
  • 行使数据绑定天性过渡视图
  • 接收U兰德索罗德L路由和深层链接性子
  • 可访谈键盘
  • 按需动态载入内容(可选)

 打开演示

Base64 的法则、达成及接受

2016/04/06 · 基础本事 · 1 评论 · Base64

正文小编: 伯乐在线 - Natumsol 。未经小编许可,防止转发!
接待参与伯乐在线 专栏编辑者。

简介

Base64是生机勃勃种基于61个可打字与印刷字符来代表二进制数据的意味方法。由于2的6次方等于64,所以每6个比特为叁个单元,对应有个别可打字与印刷字符。多少个字节有二十二个比特,对应于4个Base64单元,即3个字节必要用4个可打字与印刷字符来代表。它可用来作为电子邮件的传导编码。在Base64中的可打字与印刷字符蕴涵字母A-Za-z、数字0-9,那样共有64个字符,此外的五个可打印符号在不一致的连串中而各异,平时为+/

在两全和开辟进程中须求遵守以下原则:

  • 布局分离:使用HTML 扩充结构,并不是样式内容;
  • 保持清洁:为办事流加多代码验证工具;使用工具或样式向导维护代码结构和格式
  • 读书新语言:获取成分结议和语义标识。
  • 保险可访谈: 使用ALacrosseIA 属性和Fallback 属性等
  • 测验: 使网址在三种装置中能够卓越运行,可利用emulators和属性工具。

真实赌钱游戏平台网站 2

从何方开首

当开辟八个基于HTML5的游乐时,你能够有很五种采撷。从采用哪一种编辑器,到娱乐中依照使用的渲染框架和游玩引擎决定的是不是会用到Canvas 2d、 WebGL、SVG 或许CSS。大许多这种调控都会依赖开辟者的经验照旧是15日游发表的阳台来调整。未有任何大器晚成篇小说可以应对这一个主题材料,可是大家想要把资料集合在联合,那样能够支持您立即运转。

对游戏开辟者来讲,MDN上最根本的财富之风流浪漫正是 Games Zone.MDN的那后生可畏有的富含游戏支付的篇章,演示,外界财富以致实例。它也囊括一些对此开辟者完结HMTL5内需领悟的API的详细描述,富含声音管理,互连网,存款和储蓄和图纸渲染。大家前日正值对那风流罗曼蒂克部分内容打开增添和增加补充。大家期望未来有超越十分之五常见场景,框架和工具链的剧情和实例。

还要这里也可能有点帖子和MDN下面的篇章能够支持游戏开采者举行工作。

挑动闭包神秘的面纱

我们先看二个闭包的例子:

function foo() { let a = 2; function bar() { console.log( a ); } return bar; } let baz = foo(); baz();

1
2
3
4
5
6
7
8
9
10
11
12
13
function foo() {
    let a = 2;
 
    function bar() {
        console.log( a );
    }
 
    return bar;
}
 
let baz = foo();
 
baz();

世家肯定都写过雷同的代码,相信广大友人也知道这段代码应用了闭包,but, Why does the closure be generated and Where is closure?

来,大家慢慢分析:

首先必得先精晓闭包是何等,技术分析出闭包为啥发生和闭包到底在哪?

当叁个函数能够记住并访谈到其所在的词法功用域及意义域链,极其重申是在其定义的效劳域外实行的拜候,那个时候该函数和其上层推行上下文协作整合闭包。

亟待显著的几点:

  1. 闭包一定是函数对象(wintercn大大的闭包考证)
  2. 闭包和词法成效域,效用域链,垃圾回笼机制相关
  3. 当函数一定是在其定义的功力域外举行的拜会时,才爆发闭包
  4. 闭包是由该函数和其上层试行上下文协作整合(那一点稍后我会注明)

玩耍开垦能源,你不可不知的。闭包是如何,咱们说知道了,上面大家看下闭包是哪些发生的。

接下去,作者暗中同意你早已读过自家前边的两篇作品 原来JavaScript内部是如此运维的 和 到底搞懂JavaScript作用域 , 提议先举办阅读掌握JS推行机制和成效域等相关文化,再驾驭闭包,不然大概会通晓的不透顶。

后日本身即使JS引擎履行到那行代码

let baz = foo();

那会儿,JS的功用域气泡是那样的:

真实赌钱游戏平台网站 3

本条时候foo函数已经推行完,JS的垃圾回笼机制应该会活动将其标识为”离开意况”,等待回笼机制下一次实行,将其内部存款和储蓄器实行释放(标志消亡)。

但是,咱俩精心看图中蓝紫的箭头,大家将bar的援用指向baz,正是这种援引赋值,阻止了废品回笼机制将foo进行回笼,进而致使bar的整条作用域链都被保留下去

接下来,baz()实施,bar步入推行栈,闭包(foo)产生,那个时候bar中仍旧能够访谈到其父成效域气泡中的变量a。

那样说也许不是很清晰,接下去我们依赖chrome的调解工具看下闭承包生产工夫生的长河。

当JS引擎实践到这行代码let baz = foo();时:

真实赌钱游戏平台网站 4

图中所示,let baz = foo();风流倜傥度实践完,将要进行baz();,那时候Call Stack中独有全局上下文。

接下来baz();执行:

真实赌钱游戏平台网站 5

大家得以看来,那时候bar步向Call Stack中,而且Closure(foo)形成。

本着地点我提到的几点进展下表明:

  1. 上述第二点(闭包和词法功能域,效用域链,垃圾回笼机制相关)大家应该都晓得了
  2. 真实赌钱游戏平台网站,上述第三点,当函数baz实践时,闭包才生成
  3. 上述第四点,闭包是foo,并非bar,超多书(《you dont know JavaScript》《JavaScript高档程序设计》)中,都强调保留下去的引用,即上例中的bar是闭包,而chrome以为被封存下去的查封空间foo是闭包,针对这一点笔者补助chrome的论断(仅为谐和的精晓,如有分裂观点,接待来钻探)

运用架构

统筹布局是开首二个品种的主要职分之黄金时代。作为主导致的原因素集结的一片段,Polymer通过多少个布局成分 来支撑应用程序的构架(<core-header-panel>, <core-drawer-panel>, <core-toolbar>)。这个组件本人就很好用,可是为了更加快地从头项目,大家准备重视于<core-scaffold>。有了它你能够透过创立多少个着力的要素就能够做出三个响应式的运动端布局。

<core-scaffold>的子成分能够是钦赐特定的因素或使用一定的标签(或双边联手利用)。比方,使用<nav>成分创设应用抽屉菜单。你能够在自由的因素里使用navigation属性(e.g <core-header-panel navigation>)。工具栏通过工具属性标记。它的兼具别的子成分都定义在显要内容区域里。

转移原理

Base64的直白数据源是二进制系列(Binary Sequence)。当然,你也足以将图片、文本和音录像转变到二进制体系,再然后转移为Base64编码。大家那边探究的是哪些将二进制转变为Base64编码,对于怎么样将图纸,文本和音摄像转变为二进制体系敬请期望。

在改动前,先定义一张索引表,那张表规定了何等改换。
真实赌钱游戏平台网站 6
退换的时候我们先将二进制系列分组,每6个比特为意气风发组。不过若是编码的字节数不可能被3整除,那么最后就能多出1个或多少个字节,能够应用上边包车型地铁情势开展管理:先使用0字节值在最后补足,使其能够被3整除,然后再拓宽base64的编码。在编码后的base64文本后增进三个或八个’=’号,代表补足的字节数。也便是说,当最后剩余三个三人字节(二个byte)时,最终一个6位的base64字节块有几人是0值,末了附加上五个等号;假设最终剩余多少个三个人字节(2个byte)时,最终四个6位的base字节块有两位是0值,最终附加三个等号。 参谋下表:
真实赌钱游戏平台网站 7

HTML、CSS 和JavaScript三者的涉及

HTML 是用来调度页面结交涉剧情的标志语言。HTML 不能够用于修饰样式内容,也无法在头标签中输入文本内容,使代码变得冗长和千头万绪,相反使用CSS 来修饰布局成分和外观比较确切。HTML成分私下认可的外观是由浏览器暗中同意的体裁表定义的,如在Chrome中h1标签成分会渲染成32px的Times 粗体。

三条通用设计准绳:

  1. 利用HTML 来协会页面结构,CSS修饰页面展现,JavaScript完毕页面效果。CSS ZenGarden 很好地呈现了作为分别。
  2. 大器晚成经能用CSS或JavaScript达成就少用HTML代码。
  3. 将CSS和JavaScript文件与HTML 分开贮存。那可有利于缓存和调节和测验。

工具

作为一名HTML5开荒者,你并不会贫乏可放肆动用的工具。在Mozilla社区中我们直接从事于增添Firefox开垦者工具。那一个总结一个功力完善的JavaScrip调节和测量试验器,样式编辑器,页面探测器,暂存器,解析器,网络监测和网页调节台。

20个试玩平台,除去那些,近来也引用和翻新了部分出名的工具,它们可感觉玩乐开采者提供很好的效应。

闭包的艺术性

自己深信这些世界上最美的事物往往就存在我们身边,平常它实际不是那么神秘,那么不可以看到,只是大家缺少了一双开采美的眼眸。

生存中,我们收取风流浪漫段时间放缓脚步,细细品味大家所过的每一分每大器晚成秒,会取获得生存给我们的另豆蔻年华层野趣。

闭包也同等,它不是很隐私,反而是在大家的前后相继中随处可遇,当大家静下心来,品味闭包的意味,发掘它散发出风流倜傥种办法的美,朴实、精巧又不失文雅。

真实赌钱游戏平台网站 8

细想,在我们功用域气泡模型中,成效域链让大家的内部bar气泡能够”见到”外面包车型客车世界,而闭包则让我们的外表成效域能够”关切到”内部的情景成为恐怕。可以见到,只要大家愿意,内心世界和外面世界是足以相近的

例子

XHTML

<body unresolved fullbleed> <core-scaffold id="scaffold"> <nav>Left drawer</nav> <core-toolbar tool>Application</core-toolbar> <div>Main content</div> </core-scaffold> </body>

1
2
3
4
5
6
7
<body unresolved fullbleed>
  <core-scaffold id="scaffold">
    <nav>Left drawer</nav>
    <core-toolbar tool>Application</core-toolbar>
    <div>Main content</div>
  </core-scaffold>
</body>

让大家联合来深入那个剧情的每一有些

用JavaScript实现Base64

规律了解了随后,达成起来就比较轻巧了。

JavaScript

define(function(require, exports, module) { var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""); //索引表 /** * @author natumsol@gmail.com * @description 将二进制类别调换为Base64编码 * @param {String} * @return {String} */ function binToBase64(bitString) { var result = ""; var tail = bitString.length % 6; var bitStringTemp1 = bitString.substr(0, bitString.length - tail); var bitStringTemp2 = bitString.substr(bitString.length - tail, tail); for (var i = 0; i < bitStringTemp1.length; i += 6) { var index = parseInt(bitStringTemp1.substr(i, 6), 2); result += code[index]; } bitStringTemp2 += new Array(7 - tail).join("0"); if (tail) { result += code[parseInt(bitStringTemp2, 2)]; result += new Array((6 - tail) / 2

  • 1).join("="); } return result; } /** * @author natumsol@gmail.com * @description 将base64编码转变为二进制种类 * @param {String} * @return {String} */ function base64ToBin(str) { var bitString = ""; var tail = 0; for (var i = 0; i < str.length; i++) { if (str[i] != "=") { var decode = code.indexOf(str[i]).toString(2); bitString += (new Array(7 - decode.length)).join("0") + decode; } else { tail++; } } return bitString.substr(0, bitString.length - tail * 2); } /** * @description 将字符转变为二进制体系 * @param {String} str * @return {String} */ function stringToBin(str) { var result = ""; for (var i = 0; i < str.length; i++) { var charCode = str.charCodeAt(i).toString(2); result += (new Array(9 - charCode.length).join("0") + charCode); } return result; } /** * @description 将二进制系列转换为字符串 * @param {String} Bin */ function BinToStr(Bin) { var result = ""; for (var i = 0; i < Bin.length; i += 8) { result += String.fromCharCode(parseInt(Bin.substr(i, 8), 2)); } return result; } exports.base64 = function(str) { return binToBase64(stringToBin(str)); } exports.decodeBase64 = function(str) { return BinToStr(base64ToBin(str)); } })
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
74
75
76
77
78
define(function(require, exports, module) {
 
    var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""); //索引表
 
    /**
     * @author natumsol@gmail.com
     * @description 将二进制序列转换为Base64编码
     * @param  {String}
     * @return {String}
     */
    function binToBase64(bitString) {
        var result = "";
        var tail = bitString.length % 6;
        var bitStringTemp1 = bitString.substr(0, bitString.length - tail);
        var bitStringTemp2 = bitString.substr(bitString.length - tail, tail);
        for (var i = 0; i &lt; bitStringTemp1.length; i += 6) {
            var index = parseInt(bitStringTemp1.substr(i, 6), 2);
            result += code[index];
        }
        bitStringTemp2 += new Array(7 - tail).join("0");
        if (tail) {
            result += code[parseInt(bitStringTemp2, 2)];
            result += new Array((6 - tail) / 2 + 1).join("=");
        }
        return result;
    }
 
    /**
     * @author natumsol@gmail.com
     * @description 将base64编码转换为二进制序列
     * @param  {String}
     * @return {String}
     */
    function base64ToBin(str) {
        var bitString = "";
        var tail = 0;
        for (var i = 0; i &lt; str.length; i++) {
            if (str[i] != "=") {
                var decode = code.indexOf(str[i]).toString(2);
                bitString += (new Array(7 - decode.length)).join("0") + decode;
            } else {
                tail++;
            }
        }
        return bitString.substr(0, bitString.length - tail * 2);
    }
 
    /**
     * @description 将字符转换为二进制序列
     * @param  {String} str
     * @return {String}    
     */
    function stringToBin(str) {
        var result = "";
        for (var i = 0; i &lt; str.length; i++) {
            var charCode = str.charCodeAt(i).toString(2);
            result += (new Array(9 - charCode.length).join("0") + charCode);
        }
        return result;
    }
    /**
     * @description 将二进制序列转换为字符串
     * @param {String} Bin
     */
    function BinToStr(Bin) {
        var result = "";
        for (var i = 0; i &lt; Bin.length; i += 8) {
            result += String.fromCharCode(parseInt(Bin.substr(i, 8), 2));
        }
        return result;
    }
    exports.base64 = function(str) {
        return binToBase64(stringToBin(str));
    }
    exports.decodeBase64 = function(str) {
        return BinToStr(base64ToBin(str));
    }
})

文书档案结构方面也足以做优化,如下:

  • 利用HTML5 文书档案类型,以下是空文件:

<!DOCTYPE html> <html> <head> <title>Recipes: pesto</title> </head> <body> <h1>Pesto</h1> <p>Pesto is good!</p> </body> </html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
 
<head>
<title>Recipes: pesto</title>
</head>
 
<body>
 
  <h1>Pesto</h1>
 
  <p>Pesto is good!</p>
 
</body>
</html>
  • 在文书档案起先地点援引CSS文件,如下:

<head> <title>My pesto recipe</title> <link rel="stylesheet" href="/css/global.css"> <link rel="stylesheet" href="css/local.css"> </head>

1
2
3
4
5
6
7
<head>
  <title>My pesto recipe</title>
 
  <link rel="stylesheet" href="/css/global.css">
  <link rel="stylesheet" href="css/local.css">
 
</head>

应用那二种办法,浏览器会在深入剖析HTML代码以前将CSS消息希图好。因而有利于进步页面加载品质。

在页面底部body甘休标签早先输入JavaScript代码,那样有协助提高页面加载的速度,因为浏览器在分析JavaScript代码此前将页面加载成功,使用JavaScript会对页面元素发生积极的震慑。

<body> ... <script src="/js/global.js"> <script src="js/local.js"> </body>

1
2
3
4
5
6
7
8
<body>
 
  ...
 
  <script src="/js/global.js">
  <script src="js/local.js">
 
</body>

行使Defer和async属性,脚本成分具备async 属性无法保险会按顺序实施。

可在JavaScript代码中增添Handlers。千万别加到HTML内联代码中,比方上边包车型客车代码则轻易变成错误且不易于爱戴:

index.html:

<head> ... <script src="js/local.js"> </head> <body onload="init()"> ... <button onclick="handleFoo()">Foo</button> ... </body>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<head>
  
  ...
 
  <script src="js/local.js">
 
</head>
 
<body onload="init()">
 
  ...
 
  <button onclick="handleFoo()">Foo</button>
 
  ...
 
</body>

上面包车型地铁写法相比较好:

index.html:

<head> ... </head> <body> ... <button id="foo">Foo</button> ... <script src="js/local.js"> </body>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<head>
 
  ...
 
</head>
 
<body>
 
  ...
 
  <button id="foo">Foo</button>
 
  ...
 
  <script src="js/local.js">
 
</body>

js/local.js:

init(); var fooButton = document.querySelector('#foo'); fooButton.onclick = handleFoo();

1
2
3
4
init();
var fooButton =
    document.querySelector('#foo');
fooButton.onclick = handleFoo();

调试器

在新型推出的Firefox中,大家为浏览器扩大了一个Canvas调节和测验器。真实赌钱游戏平台网站 9

这几个Canvas调节和测量试验器能够追踪全体用来生成框架的canvas指令,有些特别的通令都会用颜色表明出来比方画三个构件恐怕应用一定的着色程序。那么些Canvas调节和测量试验器不仅可以够用来开荒基于WebGL的17日游,同期也足以用来调治基于Canvas 2D的游戏。在上边包车型大巴游玩用你能够在动画中来看种种图像都被画到画布上。你能够点击自便豆蔻梢头行直接跳到调整那几个动作的JavaScript部分。真实赌钱游戏平台网站 10

Canvas调节和测验器最常报的几个谬误是 setInterval instead of requestAnimationFrame和inspecting canvas elements in an iFrame。

若果想要领会关于Canvas调节和测验器的越来越多的详细新闻,请阅读Introducing the Canvas Debugger in Firefox Developer Tools。

闭包的施用的注意事项

闭包,在JS中相对是一个圣洁的留存,它让很多不容许落成的代码成为大概,不过物虽好,也要合理使用,不然不但不可能到达大家想要的效果与利益,有时也许还或许会适得其反。

  • 内部存款和储蓄器泄漏(Memory Leak)JavaScript分配给Web浏览器的可用内部存款和储蓄器数量平日比分配给桌面应用程序的少,那样做重若是防卫JavaScript的网页耗尽全体种类内部存款和储蓄器而导致系统崩溃。因此,要想使页面具备越来越好的属性,就必须要保险页面占用起码的内部存款和储蓄器能源,也等于说,大家应有保障推行代码只保留有用的数目,生机勃勃旦数据不再有效,我们就应当让垃圾回笼机制对其举办回笼,释放内部存款和储蓄器。

    咱俩前些天都知晓了闭包阻止了废品回收机制对变量进行回笼,由此变量组织带头人久存在内部存储器中,尽管当变量不再被使用时,那样会促成内存泄漏,会严重影响页面包车型大巴属性。由此当变量对象不再适用时,大家要将其自由。

    我们拿地方代码比方:

function foo() { let a = 2; function bar() { console.log( a ); }
return bar; } let baz = foo(); baz();
//baz指向的对象会永远存在堆内存中 baz = null;
//如果baz不再使用,将其指向的对象释放

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f6bea87da5441991997-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6bea87da5441991997-2">
2
</div>
<div class="crayon-num" data-line="crayon-5b8f6bea87da5441991997-3">
3
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6bea87da5441991997-4">
4
</div>
<div class="crayon-num" data-line="crayon-5b8f6bea87da5441991997-5">
5
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6bea87da5441991997-6">
6
</div>
<div class="crayon-num" data-line="crayon-5b8f6bea87da5441991997-7">
7
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6bea87da5441991997-8">
8
</div>
<div class="crayon-num" data-line="crayon-5b8f6bea87da5441991997-9">
9
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6bea87da5441991997-10">
10
</div>
<div class="crayon-num" data-line="crayon-5b8f6bea87da5441991997-11">
11
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6bea87da5441991997-12">
12
</div>
<div class="crayon-num" data-line="crayon-5b8f6bea87da5441991997-13">
13
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6bea87da5441991997-14">
14
</div>
<div class="crayon-num" data-line="crayon-5b8f6bea87da5441991997-15">
15
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f6bea87da5441991997-1" class="crayon-line">
 function foo() {
</div>
<div id="crayon-5b8f6bea87da5441991997-2" class="crayon-line crayon-striped-line">
     let a = 2;
</div>
<div id="crayon-5b8f6bea87da5441991997-3" class="crayon-line">

</div>
<div id="crayon-5b8f6bea87da5441991997-4" class="crayon-line crayon-striped-line">
     function bar() {
</div>
<div id="crayon-5b8f6bea87da5441991997-5" class="crayon-line">
         console.log( a );
</div>
<div id="crayon-5b8f6bea87da5441991997-6" class="crayon-line crayon-striped-line">
     }
</div>
<div id="crayon-5b8f6bea87da5441991997-7" class="crayon-line">

</div>
<div id="crayon-5b8f6bea87da5441991997-8" class="crayon-line crayon-striped-line">
     return bar;
</div>
<div id="crayon-5b8f6bea87da5441991997-9" class="crayon-line">
 }
</div>
<div id="crayon-5b8f6bea87da5441991997-10" class="crayon-line crayon-striped-line">

</div>
<div id="crayon-5b8f6bea87da5441991997-11" class="crayon-line">
 let baz = foo();
</div>
<div id="crayon-5b8f6bea87da5441991997-12" class="crayon-line crayon-striped-line">

</div>
<div id="crayon-5b8f6bea87da5441991997-13" class="crayon-line">
 baz(); //baz指向的对象会永远存在堆内存中
</div>
<div id="crayon-5b8f6bea87da5441991997-14" class="crayon-line crayon-striped-line">

</div>
<div id="crayon-5b8f6bea87da5441991997-15" class="crayon-line">
 baz = null; //如果baz不再使用,将其指向的对象释放
</div>
</div></td>
</tr>
</tbody>
</table>

关于内存泄漏,推荐
[阮一峰老师博客](http://www.ruanyifeng.com/blog/2017/04/memory-leak.html)。

抽屉菜单

您放在导航成分里的标志都定义在滑走的接受抽屉菜单里。为了我们的指标,小编坚宁死不屈使用标题(<core-toolbar>)和导航链接 (<core-menu>):

XHTML

<nav> <core-toolbar><span>Single Page Polymer</span></core-toolbar> <core-menu selected="0"> <paper-item noink> <core-icon icon="label-outline"></core-icon> <a href="#one">Single</a> </paper-item> <paper-item noink> <core-icon icon="label-outline"></core-icon> <a href="#two">page</a> </paper-item> ... </core-menu> </nav>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<nav>
  <core-toolbar><span>Single Page Polymer</span></core-toolbar>
  <core-menu selected="0">
    <paper-item noink>
      <core-icon icon="label-outline"></core-icon>
      <a href="#one">Single</a>
    </paper-item>
    <paper-item noink>
      <core-icon icon="label-outline"></core-icon>
      <a href="#two">page</a>
    </paper-item>
    ...
  </core-menu>
</nav>

介意,今后<core-menu selected=”0″>被硬编码为筛选第二个条目款项。大家随后会把它改为动态的。

将图片数据进行Base64编码

将图纸数据调换为Base64,首先要赢获得图片的二进制数据。图片的二进制数据足以由此canvas接口获得。具体落到实处为:

JavaScript

function getCanvas(w, h) { var c = document.createElement('canvas'); c.width = w; c.height = h; return c; } function getPixels(img) { var c = getCanvas(img.width, img.height); var ctx = c.getContext('2d'); ctx.drawImage(img, 0, 0); return ctx.getImageData(0, 0, c.width, c.height); }

1
2
3
4
5
6
7
8
9
10
11
12
13
function getCanvas(w, h) {
var c = document.createElement('canvas');
c.width = w;
c.height = h;
return c;
}
 
function getPixels(img) {
var c = getCanvas(img.width, img.height);
var ctx = c.getContext('2d');
ctx.drawImage(img, 0, 0);
return ctx.getImageData(0, 0, c.width, c.height);
}

取到图片的二进制数据后,接下去将在开展编码了。因为图片不仅仅包涵像素音讯,还含有长度,宽度新闻。所以在编码像素音讯的还要也应将小幅和可观消息按某生机勃勃约定进行编码,我是那般管理的:

  1. 将图纸的像素数值数据调换为二进制类别;
  2. 将小幅度和可观音信组合成字符串$$width,height$$,转变为二进制连串;
  3. 将图片像素音讯的二进制连串和图表宽高度的二进制种类组合起来,然后再拓宽Base64的编码

现实贯彻为:

JavaScript

function img2Base64(img) { var imgData = getPixels(img).data; var imgWidth = getPixels(img).width; var imgHeight = getPixels(img).height; var bin = ""; for (var i = 0; i < imgData.length; i++) { bin += base.numToString(imgData[i]); } bin = bin + base.stringToBin("$$" + imgWidth + "," + imgHeight + "$$"); return base.binToBase64(bin); }

1
2
3
4
5
6
7
8
9
10
11
function img2Base64(img) {
var imgData = getPixels(img).data;
var imgWidth = getPixels(img).width;
var imgHeight = getPixels(img).height;
var bin = "";
for (var i = 0; i &lt; imgData.length; i++) {
bin += base.numToString(imgData[i]);
}
bin = bin + base.stringToBin("$$" + imgWidth + "," + imgHeight + "$$");
return base.binToBase64(bin);
}

版权声明:本文由20个试玩平台发布于真实赌钱游戏网站,转载请注明出处:玩耍开垦能源,你不可不知的