云顶娱乐-云顶娱乐游戏平台官网
做最好的网站
当前位置: 云顶娱乐 > 云顶娱乐 > 正文

制作高大上的Canvas粒子动画,eval深入分析JSON字符

时间:2019-10-07 03:42来源:云顶娱乐
创立高大上的Canvas粒子动画 2016/08/22 · HTML5 · 5评论 ·Canvas 初稿出处:腾讯ISUX    率先来看下大家筹划要做的粒子动画效果是怎么着的~ 是这样: 大概是那样: 以至是如此: 很酷炫!

创立高大上的Canvas粒子动画

2016/08/22 · HTML5 · 5 评论 · Canvas

初稿出处: 腾讯ISUX   

率先来看下大家筹划要做的粒子动画效果是怎么着的~

是这样:

云顶赌场 1

大概是那样:

云顶赌场 2

以至是如此:

云顶赌场 3

很酷炫!

那什么去贯彻类似上边的粒子动画以致依据自身的喜好去做越多其余轨迹的卡通片呢~请看下边详细的上书。

eval深入分析JSON字符串的三个小题目

2016/02/24 · JavaScript · JSON

初稿出处: 韩子迟   

前边写过一篇 有关 JSON 的介绍小说,里面提及了 JSON 的深入分析。我们都精通,高档浏览器能够用  JSON.parse() API 将二个 JSON 字符串分析成 JSON 数据,稍微欠妥点的做法,我们能够用 eval() 函数。

JavaScript

var str = '{"name": "hanzichi", "age": 10}'; var obj = eval('(' + str + ')'); console.log(obj); // Object {name: "hanzichi", age: 10}

1
2
3
var str = '{"name": "hanzichi", "age": 10}';
var obj = eval('(' + str + ')');
console.log(obj); // Object {name: "hanzichi", age: 10}

 

是或不是注意到,向 eval() 传参时,str 变量外裹了一层小括号?为何要如此做?

大家先来拜谒 eval 函数的概念以及利用。

eval() 的参数是三个字符串。如果字符串表示了二个表明式,eval() 会对表达式求值。要是参数表示了三个或多少个 JavaScript 表明, 那么 eval() 会实行注明。不要调用 eval() 来为算数表明式求值; JavaScript 会自动为算数表明式求值。

归纳地说,eval 函数的参数是贰个字符串,假设把字符串 “noString” 化管理,那么得到的将是健康的能够运营的 JavaScript 语句。

怎么说?举个栗子,如下代码:

JavaScript

var str = "alert('hello world')"; eval(str);

1
2
var str = "alert('hello world')";
eval(str);

实践后弹出 “hello world”。大家把 str 变量 “noString” 化,粗暴点的做法正是去掉外面包车型地铁引号,内部调度(转义等),然后就改成了:

云顶娱乐城云顶赌场,JavaScript

alert('hello world')

1
alert('hello world')

very good!那是例行的能够运作的 JavaScript 语句!运营之!

再再次回到开头的标题,为何 JSON 字符串要裹上小括号。固然不加,是以此样子的:

JavaScript

var str = '{"name": "hanzichi", "age": 10}'; var obj = eval(str); // Uncaught SyntaxError: Unexpected token :

1
2
var str = '{"name": "hanzichi", "age": 10}';
var obj = eval(str);  // Uncaught SyntaxError: Unexpected token :

恩,报错了。为啥会报错?试试把 str “noString” 化,实行一下:

JavaScript

{"name": "hanzichi", "age": 10}; // Uncaught SyntaxError: Unexpected token :

1
{"name": "hanzichi", "age": 10};  // Uncaught SyntaxError: Unexpected token :

一定,四个 JSON 对象恐怕说是一个对象根本就不是能实施的 JavaScript 语句!等等,试试以下代码:

JavaScript

var str = '{name: "hanzichi"}'; var obj = eval(str); console.log(obj); // hanzichi

1
2
3
var str = '{name: "hanzichi"}';
var obj = eval(str);
console.log(obj); // hanzichi

那又是什么样鬼?但是给 name 加上 “” 又报错?

JavaScript

var str = '{"name": "hanzichi"}'; var obj = eval(str); // Uncaught SyntaxError: Unexpected token : console.log(obj);

1
2
3
var str = '{"name": "hanzichi"}';
var obj = eval(str);  // Uncaught SyntaxError: Unexpected token :
console.log(obj);

好吧,快晕了,其实仍旧足以将 str “nostring” 化,看看是或不是能准确施行的 JavaScript 语句。前者的结果是:

JavaScript

{name: "hanzichi"}

1
{name: "hanzichi"}

那着实是一条官方的 JavaScript 语句。{} 我们不光能在 if、for 语句等景况使用,以至足以在其他时候,因为 ES6 此前 JavaScript 唯有块级效率域,所以对于功效域什么的并不会有怎么着争执。去掉 {} 后 name: "hanzichi"也是法定的语句,二个 label 语句,label 语句在跳出嵌套的巡回中那么些好用,具体能够参照他事他说加以考察 label,而作为 label 语句的暗号,name 是无法带引号的,标志能放在 JavaScript 代码的其余岗位,用不到也没涉及。

设若三个对象有了七个 key,举例 {name: "hanzichi", age: 10} ,ok,五个 label 语句?将 “hanzhichi” 以及 10 分别作为是讲话,不过 言语之间只可以用封号连接!(表达式之间本事用逗号)。所以改成上面那样也是未曾难点的:

JavaScript

var str = '{name: "hanzichi"; age: 10}'; var obj = eval(str); console.log(obj); // 10

1
2
3
var str = '{name: "hanzichi"; age: 10}';
var obj = eval(str);  
console.log(obj); // 10

越扯越远,小说初步代码的荒谬的来由是找到了,为啥套个括号就能够缓和呢?轻易的话,() 会把语句调换到表明式,称为语句表明式。括号里的代码都会被撤换为表明式求值并且再次来到,指标字面量必需作为表达式而留存

本文并不会大谈表明式,关于表明式,可以参照文末链接。值得铭记的一点是,表明式长久有七个重回值。超过二分之一表明式会卷入在() 内,小括号内不可能为空,假诺有多个表达式,用逗号隔绝,也正是所谓的逗号表达式,会回去最终贰个的值。

谈起表明式,不得不提函数表明式,以前翻译过一篇有关立刻推行函数表明式的篇章,能够参照下,文末。

Read More:

  • [译]JavaScript中:表明式和说话的区分
  • (译)详解javascript即刻实行函数表明式(IIFE)
  • 长远斟酌javascript的 {} 语句块

    1 赞 1 收藏 评论

云顶赌场 4

用500行纯前端代码在浏览器中营造贰个Tableau

2018/05/16 · 基础本事 · BI, Tableau, 数据可视化

初稿出处: naughty   

在Gartner最新的对商务智能软件的正儿八经分析报告中,Tableau持续领跑。Microsoft因为PowerBI表现杰出也高居领导者象限。而以往的管理者像SAP,SAS,IBM,MicroStrategy等渐渐被拉开了出入。

云顶赌场 5

Tableau因为其心灵手巧,优秀的数据表现已经成为BI领域里确实的领头羊。而其数据驱动的可视化和核心情想是根源于Leland Wilkinson的The Grammar Of Graphics ,同一非常受该考虑熏陶的还也可以有奥迪Q3的图形库ggplot。

云顶赌场 6

云顶国际官方网站,在数据可视化开源领域里,大家对百度耗费的echarts可谓耳濡目染,echarts经过日久天长的迈入,其职能实在不行壮大,可用优秀来描写。可是蚂蚁金服开源的依靠The Grammar Of Graphics的语法驱动的可视化库G2,让人面目一新。那大家就看看哪些利用G2和500行左右的纯前端代码来贯彻一个的类似Tableau的数量分析效益。

  • 演示参见 
  • 代码参见 https://gist.github.com/gangtao/e053cf9722b64ef8544afa371c2daaee 

 

10款最佳JavaScript 和 HTML5演示(幻灯片)框架

2014/12/26 · HTML5, JavaScript · HTML5, Javascript, 幻灯片

本文由 伯乐在线 - cucr 翻译,黄利民 校稿。未经许可,幸免转发!
克罗地亚语出处:devzum.com。接待参与翻译组。

JavaScript 和 HTML5 框架在现世浏览器中为开创示范文稿扮演着首要的角色。他们在web页面中放到特性,提供了一种有效的章程来体现音讯。经常的话,手动编写须要大批量的流年和生机。何况手动真的很复杂,初学者若无运用使得的才具不能够得到丰裕的硕果。另一方面,演示框架具备在不爆发别的难点和头昏眼花就生出很好的干活战果的表征。他们以最大的速度和准确性交付最佳的web开辟成果。

HTML5在现世设计员和web开采职员中变得相当受应接。其丰盛的功能和无滞后的呈未来很大程度上抓牢三个网址的作用和成效。你能够很轻易地通过挑选一款可以的框架来修改你的网址的分界面外观,。没有什么可争辨的,那是微软power point和keynote的一个完善的web代替品。

就此,看看那些一流JavaScript和HTML5演示框架,并选拔最佳的一款,通过那几个幻灯片演示框架的扶助来显示你的天职。

二〇一五年5个最流行前端框架相比

2015/01/08 · CSS, HTML5 · bootstrap, Foundation, Pure, Semantic UI, 制作高大上的Canvas粒子动画,eval深入分析JSON字符串的二个小标题。UIkit, 前端框架

本文由 伯乐在线 - kinolee 翻译,JustinWu 校稿。未经许可,禁绝转发!
拉脱维亚语出处:www.sitepoint.com。应接到场翻译组。

今昔一代众多CSS的前端框架纷涌而至,但实在的优良的却硕果仅存。

在那篇小说中大家将对自身觉着最棒的多少个框架举办比较,每一种框架都有友好优短处和一定的应用领域,那允许你遵照特定类型的供给选用适宜的框架。比如,假如您的品类比较轻巧,你就无需复杂的框架,另外,好多挑选是模块化的,那允许你仅使用你需求的组件,恐怕夹杂使用区别框架的零部件。

咱俩要斟酌的框架都以基于其在github上的名气体现的,首先说最流行的,当然是:Bootstrap。

(注意:上面包车型地铁一对音信在现在的几周和几月后就过时了,如:GitHub 上的评分(Stars)和版本数,因而只要您是在那篇小说公布相当久未来阅读的话,你需求小心这或多或少。其余,还要小心框架大小是还是不是将须求的CSS和JS文件最小化。)

数据加载

率先步是加载数据:

云顶赌场 7

数据加载首要运用了多个库:

  • axios  基于Promise的HTTP客户端
  • alasql 基于JS的开源SQL数据库
  • jquery datatable JQuery的数量表格插件

数据通过自个儿寄放在GitHub中的csv格式的文本,以REST乞请的艺术来加载。上面包车型客车代码把Axios的Promise产生async/wait情势。

// Ajax async request const request = { get: url => { return new Promise((resolve, reject) => { axios .get(url) .then(response => { resolve({ data: response.data }); }) .catch(error => { resolve({ data: error }); }); }); } };

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Ajax async request
const request = {
  get: url => {
    return new Promise((resolve, reject) => {
      axios
        .get(url)
        .then(response => {
          resolve({ data: response.data });
        })
        .catch(error => {
          resolve({ data: error });
        });
    });
  }
};

打包好后,大家就足以用request.get()方法发送REST请求,获取csv文件。

let csv = await request.get(url);

1
let csv = await request.get(url);

这一步可能会遭受跨域央求的难点,github上的文件扶助跨域。

把数量存款和储蓄在二个SQL数据库中,这样做的实惠是为了下一步做多少策动的时候,能够一本万利的利用SQL来扩充询问和剖判。

JavaScript

class SqlTable { constructor(data) { this.data = data; } async query(sql) { // following line of code does not run in full page view due to security concern. // const query_str = sql.replace(/(?<=FROMs+)w+/, "CSV(?)"); const query_str = sql.replace("table", "CSV(?)"); return await alasql.promise(query_str, [this.data]); } }

1
2
3
4
5
6
7
8
9
10
11
12
class SqlTable {
  constructor(data) {
    this.data = data;
  }
 
  async query(sql) {
    // following line of code does not run in full page view due to security concern.
    // const query_str = sql.replace(/(?<=FROMs+)w+/, "CSV(?)");
    const query_str = sql.replace("table", "CSV(?)");
    return await alasql.promise(query_str, [this.data]);
  }
}

SqlTable是二个对数据表的包装,把csv数据存在SQL数据库表中,提供一个query()方法。这里要做的是把SQL查询个从 “SELECT * FROM table” 变成 “SELECT * FROM CSV(?)” 表示查询参数是CSV数据。因为codepen的安全性限制,运维前向搜索的replace语句(这里的regex表示把前边是“FROM ”词的交替为CSV(?)的)在full page view下是不能实施的,所以作者用了二个更简短的固然,客户的表名正是table,那样做有非常多主题材料,大家只要在codepen之外的处境,可以用注释掉的代码。

然后把”SELECT * FROM table”的查询结果(JSON Array)用datatable来显示。

function sanitizeData(jsonArray) { let newKey; jsonArray.forEach(function(item) { for (key in item) { newKey = key.replace(/s/g, "").replace(/./g, ""); if (key != newKey) { item[newKey] = item[key]; delete item[key]; } } }); return jsonArray; } function displayData(tableId, data) { // tricky to clone array let display_data = JSON.parse(JSON.stringify(data)); display_data = sanitizeData(display_data); let columns = []; for (let item in display_data[0]) { columns.push({ data: item, title: item }); } $("#" + tableId).DataTable({ data: display_data, columns: columns, destroy: true }); }

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
function sanitizeData(jsonArray) {
  let newKey;
  jsonArray.forEach(function(item) {
    for (key in item) {
      newKey = key.replace(/s/g, "").replace(/./g, "");
      if (key != newKey) {
        item[newKey] = item[key];
        delete item[key];
      }
    }
  });
  return jsonArray;
}
 
function displayData(tableId, data) {
  // tricky to clone array
  let display_data = JSON.parse(JSON.stringify(data));
  display_data = sanitizeData(display_data);
  let columns = [];
  for (let item in display_data[0]) {
    columns.push({ data: item, title: item });
  }
  $("#" + tableId).DataTable({
    data: display_data,
    columns: columns,
    destroy: true
  });
}

这一步有两点要介意:

  1. 多少中,假如列的名字中有隐含点,空格等字符,举个例子Iris数据汇总的Sepal.Length,datatable是爱莫能助平常显示的,这里要调用sanitizeData()方法把列名,也正是JsonArray中Json对象的品质名中的点和空格去掉。
  2. sanitizeData()方法会退换输入对象,所以在流传在此之前做了贰个深度拷贝,这里运用JSON的stringfy和parse方法能够对JSON宽容的对象有效的正片。

这里要注意,Iris数据汇总在datatable中的列名都不展现点,但实在数据并从未改变。

 

1) HTML5 Slides

云顶赌场 8

Slides是一款得力的web开荒示范框架。由Google提供,那款框架提供了几个链接,通过它能够大幅轻易和舒适地获取模板。咱们供给做的正是复制样本幻灯片的代码,并为他们填上新的内容。

1. Bootstrap

Bootstrap 在现行业作风行的各类框架中是确实的特别。鉴于其天天仍在加强的高大人气,能够一定,这几个特出的工具绝对不会令你失望,它也不会在您成功创建网址前就离开到别处。

云顶赌场 9

  • 创建者: Mark Otto and Jacob Thornton.
  • 发布: 2011
  • 此时此刻版本: 3.3.1
  • 人气: 在Github上有75,000+ stars
  • 描述: “Bootstrap是最盛行的的 HTML, CSS和 JavaScript 响应式开垦框架 ,web上支出的第一个移动项目.”
  • 中央概念/原则: RWD 和运动优先
  • 框架大小: 145 KB
  • 预管理器: Less 和 Sass
  • 响应式: Yes
  • 模块化: Yes
  • 起来模板/布局: Yes
  • 图标设置: Glyphicons Halflings set
  • 附加/插件: 未有捆绑插件,但众多第三方插件可用.
  • 特别的组件: Jumbotron
  • 文档: 良好
  • 定制: 基本的GUI定制器。不幸的是,你必要手动输入的水彩值,因为从没可用的颜料选取器。
  • 浏览器扶助: Firefox, Chrome, Safari, IE8+ (你需要 Respond.js for IE8)
  • 许可证: MIT

Notes on Bootstrap

  •  Bootstrap 的要紧优点是它不行流行。从本领上讲,它并不一定比此番列出来的任何框架好,但它提供的财富(文章和学科、第三方插件和扩展、主题开垦者等等)比别的四个框架的总额还要多。简单来讲,Bootstrap无处不在。那是大家继续选取它的机要缘由。
  • (注意:“独特的机件”的趣味是,相比较这里涉及的别样框架是不二法门的。)

技能选取

因为粒子数量过多,何况关乎到图像像素管理,所以那边运用Canvas是不二取舍。

 

只顾,以下演示的代码只是关键代码,注重在于解决思路。

多少图谋

多少加载完结,大家赶到第二步的数据策动阶段。数据筹划是数额正确项目最花时间的一步,常常必要对数据开展大气的冲洗,变形,收取等工作,使得数据变得可用。

在这一步大家做了两件事:

一是显得数据的三个摘要,让大家最初精通多少的大约,为更为的多少变形和管理做好筹划。

以此是Iris数据集的摘要:

云顶赌场 10

function isString(o) { return typeof o == "string" || (typeof o == "object" && o.constructor === String); } function summaryData(data) { let summary = {}; summary.count = data.length; summary.fields = []; for (let p in data[0]) { let field = {}; field.name = p; if ( isString(data[0][p]) ) { field.type = "string"; } else { field.type = "number"; } summary.fields.push(field); } for (let f of summary.fields) { if ( f.type == "number" ) { f.max = d3.max(data, x => x[f.name]); f.min = d3.min(data, x => x[f.name]); f.mean = d3.mean(data, x => x[f.name]); f.median = d3.median(data, x => x[f.name]); f.deviation = d3.deviation(data, x => x[f.name]); } else { f.values = Array.from(new Set(data.map(x => x[f.name]))); } } return summary; }

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
function isString(o) {
    return typeof o == "string" || (typeof o == "object" && o.constructor === String);
}
 
function summaryData(data) {
  let summary = {};
  summary.count = data.length;
  summary.fields = [];
  for (let p in data[0]) {
    let field = {};
    field.name = p;
    if ( isString(data[0][p]) ) {
      field.type = "string";
    } else {
      field.type = "number";
    }
    summary.fields.push(field);
  }
  
  for (let f of summary.fields) {
      if ( f.type == "number" ) {
        f.max = d3.max(data, x => x[f.name]);
        f.min = d3.min(data, x => x[f.name]);
        f.mean = d3.mean(data, x => x[f.name]);
        f.median = d3.median(data, x => x[f.name]);
        f.deviation = d3.deviation(data, x => x[f.name]);
      } else {
        f.values = Array.from(new Set(data.map(x => x[f.name])));
      }
  }
  return summary;
}

那边大家采用数据的档案的次序判定出每一个字段是数值型依旧字符型。对于字符型的字段,大家应用JS6的Set来猎取全部的Unique数据。对于数值型,大家利用d3的max,min,mean,median,deviation方法计算出相应的最大值,最小值,平均数,中位数和错误。

另叁个就是使用SQL查询来对数码进行越来越加工。

云顶赌场 11

上海教室的例证中我们使用限制标准获得贰个Iris数据的子集。

其它G2还提供了Dataset的功能:

  • 源数据的剖析,将csv, dsv,geojson 转成规范的JSON,查看Connector
  • 加工数据,满含 filter,map,fold(补多少) 等操作,查看 Transform
  • 总计函数,汇总总结、百分比、封箱 等计算函数,查看 Transform
  • 极度数据管理,包罗 地理数据、矩形树图、桑基图、文字云 的数量管理,查看 Transform

数码处理是贰个非常大的话题,大家的目的是行使尽大概少的代码完毕二个数据分析的工具,所以这一步仅仅是使用alasql提供的SQL查询来处理多少。

 

2) Reveal.js

云顶赌场 12

Reveal.js是一款闻明的web开荒框架。它创建很棒的幻灯片,可以水平和垂直定位。通过使用它,你能够很轻便地为您的亲自过问加多各个作用的总总林林结合和3 d幻灯片过渡。多量的web开荒人士正在选择那款有效何况可信赖的框架。

2. Foundation by ZURB

Foundation是那多少个框架中第二大的,在像ZURB一样实力雄厚的商场协理下,那个框架确实很庞大,是的,就是foundation。终归, Foundation已经在无数大型网址上投入使用,饱含 照片墙(TWT本田UR-V.US), Mozilla, Ebay, Yahoo!和国度地理等等。

云顶赌场 13

  • 创建者: ZURB
  • 发布: 2011
  • 方今版本:5.4.7
  • 人气: 在Github上有18,000+ stars
  • 描述: “世界上最了不起的响应式前端框架”
  • 骨干概念/原则: RWD 、手提式有线电话机优先、语义的
  • 框架大小: 326KB
  • 预管理器: Sass
  • 响应式: Yes
  • 模块化: Yes
  • 开班模板/布局: Yes
  • Logo设置: Foundation Icon Fonts
  • 附加/插件: yes
  • 十分的零部件: Icon Bar, Clearing Lightbox, Flex Video, Keystrokes, Joyride, Pricing Tables
  • 文档: 特出,还会有不菲外加的财富是可用的。
  • 定制: 未有GUI编辑器,只好手工业定制。
  • 浏览器帮忙: Chrome, Firefox, Safari, IE9+; iOS, Android, Windows Phone 7+
  • 许可证: MIT

一、绘制粒子概况图

先是要在canvas画布上绘制贰个由粒子构成的概况图,记录下每二个粒子的坐标,那样本事有继续的卡通。

数据显示

数码管理好后正是大家的宗旨内容,数据显示了。

云顶赌场 14

这一步关键是接纳select2提供的抉择控件创设图形语法来驱动数据展现。如上图所示,对应的G2代码图形语法为:

g2chart.facet('rect', { fields: [ 'Admit', 'Dept' ], eachView(view) { view.interval().position('Gender*Freq').color('Gender').label('Freq'); } });

1
2
3
4
5
6
g2chart.facet('rect', {
  fields: [ 'Admit', 'Dept' ],
  eachView(view) {
    view.interval().position('Gender*Freq').color('Gender').label('Freq');
  }
});

图片语法首要含有以下多少个基本点的成分:

 

3) Impress.js

云顶赌场 15

另一款得力的框架是Impress.js。那是一款美妙的框架,幻灯片排列在3 d空间,同一时候定义在“div”成分中,并由此丰裕的数码属性调控x,y,z的职位和旋转。通过使用它,您能够很轻便地安排有个别马到功成的,惊人的,新颖的幻灯片。

Notes on Foundation

Foundation 是二个提供业务支撑、培训和咨询真正标准的框架。它还提供了重重能源扶持您越来越快和更便于学习和利用框架。

编辑:云顶娱乐 本文来源:制作高大上的Canvas粒子动画,eval深入分析JSON字符

关键词: