BizCharts
简单说下特性:
- 基于 G2 封装的 React 图表库,具有 G2、React 的全部优点,可以让用户以组件的形式组合出无数种图表
- 集成了大量的统计工具,支持多种坐标系绘制,交互定制,动画定制以及图形定制等
- 性能稳定且具有强大的扩展能力和高度自定义能力
简单说下特性:
用echarts展示图表的时候,有时候需要点击当前图表,进行一些其他”effect side”操作,这个时候就需要得到当前这个点的横纵坐标的数据信息了。
查看官网API文档 http://www.echartsjs.com/api.html#echarts, 支持鼠标click事件,拿到基础的 line bar 图例上试验。
发现click触发条件是:
官网给出的API方法不尽如人意,去github上查找issue,发现有不少提出这问题。
解决方法:给出一个透明的bar坐标系重叠到图表上,透明bar的数据都是当前最大值,这样在图表对应的x轴都能实现触发点击,类似于tooltip那样方便。
https://github.com/apache/incubator-echarts/issues/6106
但是,这个方法也有缺点:
用公司前端架构组给的tools工具时,在test环境下容易出现模块加载错误的问题。
观察发现,index.html, main.[hash].js 等资源文件缓存304, 各个路由页面引用的还是之前的hash资源,导致Jenkins新构建的资源没有被使用,而原来的资源已经被替换,找不到文件,所以出错。
将index.html 不缓存,每次 200 请求最新的,从而刷新各个资源文件。
现象同样是加载失败。
区别1: 只有部分页面加载失败
区别2: 手动刷新,有时候页面又是好的,但另一个页面出问题。
环境: win
用npm install npm -g
升级npm后, npm失效,任意指令报错 ERR: cannot find module 'xxx'
, 但 node指令和cnpm都正常。
重新安装node,仍然有问题。
解决方法:
删除 AppData/Roaming/
文件夹下的 npm 和 npm-cache文件夹后解决问题,
npm npm-cache 是 全局npm包的安装,所以需要重新安装全局的npm包,如 cnpm, gulp, webpack等
当前有两种离线缓存方式,一种是H5离线缓存,基于manifest,一种是基于 Service Worker。
其实manifest是一个简单的文本文件,它的扩展名是任意的,定义需要缓存的文件、资源,mime-type 为 text/cache-manifest 。
如: <html lang="en" manifest="index.manifest">
优点:
manifest 文件可分为三个部分:
关键字段 Cache-Control: max-age, expires, ETag, Last-Modified
Cache-Control
: 强缓存,no-cache
是不缓存, max-age
设置缓存生效时间,单位为秒(s)Expires
: 缓存过期时间,单位是具体时间的 DateETag
: 资源内容的 hash 值, 如果资源没变化, If-None-Match
为false, 返回 304Last-Modified
: 资源的最后修改日期,单位为秒(s), If-Modified-Since
包含上一次的时间,如果一致,返回304ETag是对Last-Modefied的功能补充,优先级更高。
Last-Modefied
单位是秒, 对于 1s 内的多次改变无法感知。Last-Modefied
时间会改变,而内容不变的话,ETag 也不变,ETag对于缓存更有利。###grunt
与 gulp
其实是很像的。
区别:
.src->.pipe->.dest
,任务流程很清晰, 而grunt是基于配置,然后创建任务,配置与任务分离,如果配置较多时,可读性就不如gulp task了为什么gulp会比grunt更受欢迎?
.src
.dest
.pipe
.task
.watch
, 再配合官网的指南,上手难度低,而且任务可读性会更好两者一对比, gulp 的学习成本低、易上手的优势就更大了。
定义过滤器,返回一个filter function,在指令模板下可以进行一些筛选操作。1
2
3
4
5
6
7
8
9
10angular.module('filterModule')
.filter('fileSize', function () {
return function (value) {
var bytes = parseInt(value, 10);
var byteLabel = bytes > 1 ? 'Bytes' : 'Byte';
var sizes = [byteLabel, 'KB', 'MB', 'GB', 'TB'];
var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
};
});
factory service 都可以提供 xhr 服务,功用类似。
区别在于factory是返回一个实例对象, 而service是将服务绑定在this上的。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15angular.module('httpModule')
.factory('api', function($http, $q){
var api = {};
api.func1 = function(){}
api.func2 = function(){}
return api;
})
angular.module('httpModule')
.service('api', function($http, $q){
var self = this;
self.func1 = function(){}
self.func2 = function(){}
})
Canvas 2D API 的接口 Path2D 用来声明路径,此路径稍后会被CanvasRenderingContext2D 对象使用。CanvasRenderingContext2D 接口的 路径方法 也存在于 Path2D 这个接口中,允许你在 canvas 中根据需要创建可以保留并重用的路径。
当前IE safari 还不支持
一句话, 缓存图形path
clearRect
清空canvas后,需要回显刚才的图形isPointInPath
判断事件path区域1 | function bezier(startPoint, endPoint){ |