From 2fdc9effc2d9e63fc884bfa689dfe6764dd346a5 Mon Sep 17 00:00:00 2001 From: hustcc Date: Sat, 23 Jun 2018 11:32:46 +0800 Subject: [PATCH 01/28] module & area render --- .babelrc | 26 +++++++ .gitignore | 2 +- .jshintrc | 13 ---- .travis.yml | 3 - README-zh.md | 60 +++++++++++---- README.md | 79 ++++++++++++++------ dist/canvas-nest.js | 119 +----------------------------- dist/canvas-nest.min.js | 7 -- dist/canvas-nest.umd.js | 1 + gulpfile.js | 16 ---- index.html | 76 ++++++++++++++----- lib/CanvasNest.js | 159 ++++++++++++++++++++++++++++++++++++++++ lib/iife.js | 24 ++++++ lib/index.js | 18 +++++ lib/utils.js | 23 ++++++ package.json | 61 +++++++++++---- rollup.config.iife.js | 29 ++++++++ rollup.config.umd.js | 30 ++++++++ src/CanvasNest.js | 126 +++++++++++++++++++++++++++++++ src/canvas-nest.js | 118 ----------------------------- src/iife.js | 20 +++++ src/index.js | 8 ++ src/utils.js | 19 +++++ 23 files changed, 691 insertions(+), 346 deletions(-) create mode 100644 .babelrc delete mode 100644 .jshintrc delete mode 100644 .travis.yml delete mode 100644 dist/canvas-nest.min.js create mode 100644 dist/canvas-nest.umd.js delete mode 100644 gulpfile.js create mode 100644 lib/CanvasNest.js create mode 100644 lib/iife.js create mode 100644 lib/index.js create mode 100644 lib/utils.js create mode 100644 rollup.config.iife.js create mode 100644 rollup.config.umd.js create mode 100644 src/CanvasNest.js delete mode 100644 src/canvas-nest.js create mode 100644 src/iife.js create mode 100644 src/index.js create mode 100644 src/utils.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..9b21973 --- /dev/null +++ b/.babelrc @@ -0,0 +1,26 @@ +{ + "env": { + "rollup": { + "presets": [ + [ + "env", + { + "modules": false + } + ] + ], + "plugins": [ + "transform-class-properties", + "transform-object-rest-spread" + ] + }, + "babel": { + "presets": ["env"], + "plugins": [ + "transform-class-properties", + "add-module-exports", + "transform-object-rest-spread" + ] + } + } +} diff --git a/.gitignore b/.gitignore index 3f875d7..dd93304 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ .project .settings - +.idea node_modules/* diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index f2772a8..0000000 --- a/.jshintrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "quotmark": true, - "boss": true, - "eqnull": true, - "expr": true, - "funcscope": true, - "loopfunc": true, - "smarttabs": true, - "node": true, - "browser": true, - "undef": true, - "unused": true -} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index aacd2fb..0000000 --- a/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "4.4.4" \ No newline at end of file diff --git a/README-zh.md b/README-zh.md index ab83bc3..403c9a2 100644 --- a/README-zh.md +++ b/README-zh.md @@ -1,25 +1,27 @@ # canvas-nest.js -> 一个基于html5 canvas绘制的网页背景效果,非常赞!如果需要 `wordpress插件`,在插件库搜索 `canvas-nest` 或者看看项目 [canvas-nest-for-wp](https://github.com/aTool-org/canvas-nest-for-wp)。 +> 一个基于 html5 canvas 绘制的网页背景效果,非常赞!如果需要 `wordpress插件`,在插件库搜索 `canvas-nest` 或者看看项目 [canvas-nest-for-wp](https://github.com/aTool-org/canvas-nest-for-wp)。 -![travis-ci](https://travis-ci.org/hustcc/canvas-nest.js.svg?branch=master) ![npm](https://img.shields.io/npm/v/canvas-nest.js.svg?style=flat-square) ![npm](https://img.shields.io/npm/l/canvas-nest.js.svg?style=flat-square) +[![npm](https://img.shields.io/badge/demo-online-brightgreen.svg)](https://git.hust.cc/canvas.nest.js) +![npm](https://img.shields.io/npm/v/canvas-nest.js.svg) +![npm](https://img.shields.io/npm/dm/canvas-nest.js.svg) ## 特性 - - 不依赖任何框架或者类库,比如不依赖 jQuery,使用原生的 javascript。 - - 非常小,只有1.6 kb,如果开启 gzip,可以更小。 - - 非常容易实现,配置简单,即使你不是web开发者,也能简单搞定。 + - 不依赖 jQuery,使用原生的 javascript。 + - 非常小,只有 2 Kb。 + - 非常容易实现,配置简单,即使你不是 web 开发者,也能简单搞定。 ## 使用 -使用非常简单,感觉都没有必要写这一节内容。 + - 快捷使用 将下面的代码插入到 ` 和 之间`. ```html - + ``` 强烈建议在 ``标签上方. 例如下面的代码结构: @@ -32,15 +34,31 @@ ... ... - ... - + ``` -`请注意不要将代码置于 里面`. +然后就完成了,打开网页即可看到效果!`请注意不要将代码置于 里面`. + + + - 模块化区域绘制(定制开发) + +> npm i --save canvas-nest.js + +然后可以使用 script 方式引入 umd 包,当然也可使用模块化方式 import。并且只有一个 API,使用如下: + +``` +import CanvasNest from 'canvas-nest.js'; + +const config = { + color: '255,0,0', + count: 88, +}; -然后就完成了,打开网页即可看到效果! +// 在 element 地方使用 config 渲染效果 +new CanvasNest(element, config); +``` ## 配置和配置项 @@ -54,11 +72,22 @@ Example: ``` - + ``` 这些属性配置在引用js的script标签中,作为它的一个属性值。所有的配置项都有默认值,如果你不知道怎么设置,可以先不设置这些配置项,就使用默认值看看效果也可以的。 +或者模块化调用的时候,写成: + +```js +{ + color: '0,0,255', + opacity: 0.7, + zIndex: -2, + count: 99, +}; +``` + ## 示例 @@ -71,6 +100,9 @@ Example: ## 其他 -本项目的Javascript文件已经存储在CDN上,可以直接使用,地址为: [http://www.bootcdn.cn/canvas-nest.js/](http://www.bootcdn.cn/canvas-nest.js/),如果你不需要 CDN 或者有自己的 CDN,可以直接下载源码 dist 目录中的 `canvas-nest.min.js`,然后相应的修改使用地址即可。 +本项目的 Javascript 文件已经存储在 CDN 上,可以直接使用,地址为: [http://www.bootcdn.cn/canvas-nest.js/](http://www.bootcdn.cn/canvas-nest.js/),如果你不需要 CDN 或者有自己的 CDN,可以直接下载源码 dist 目录中的 `canvas-nest.js`,然后相应的修改使用地址即可。 + + +## License -有任何的bug或者建议,非常鼓励 issue 和 pr,来者不拒。 +MIT@[hustcc](https://github.com/hustcc). diff --git a/README.md b/README.md index 33486c7..f456cad 100644 --- a/README.md +++ b/README.md @@ -2,28 +2,29 @@ > A nest backgroud of website draw on canvas. [中文Readme帮助文档](https://github.com/hustcc/canvas-nest.js/blob/master/README-zh.md). For `wordpress plugin`, search `canvas-nest` or see [canvas-nest-for-wp](https://github.com/aTool-org/canvas-nest-for-wp). -![travis-ci](https://travis-ci.org/hustcc/canvas-nest.js.svg?branch=master) ![npm](https://img.shields.io/npm/v/canvas-nest.js.svg?style=flat-square) ![npm](https://img.shields.io/npm/l/canvas-nest.js.svg?style=flat-square) +[![npm](https://img.shields.io/badge/demo-online-brightgreen.svg)](https://git.hust.cc/canvas.nest.js) +![npm](https://img.shields.io/npm/v/canvas-nest.js.svg) +![npm](https://img.shields.io/npm/dm/canvas-nest.js.svg) +## Feature -## feature + - No need jQuery. + - Light, only 2 Kb. + - Easy to use, even you are not a web developer. - - do not depend on jQuery or other javascript framework. - - very light, only 1.6 kb. can be smaller after gzip. - - so easy to use, even you are not a web developer. +## Usage -## usage + - Script tag -so eazy that I do not want write the chapter. - -insert the code below `between and `. +Insert the code below `between and `. ```html - + ``` -suggest before the tag ``. like below: +Suggest before the tag ``, like below: ```html @@ -33,19 +34,36 @@ suggest before the tag ``. like below: ... ... - ... - + ``` +Then ok! `Please do not add the code in the `. + + + - Module usage (Area render) + +> npm i --save canvas-nest.js + +Or import the `umd` package use `script` tag. + +There is only one API, use it like: + +``` +import CanvasNest from 'canvas-nest.js'; -`please do not add the code in the `. +const config = { + color: '255,0,0', + count: 88, +}; -then ok! +// render nest on element with config. +new CanvasNest(element, config); +``` -## config +## Config - **`color`**: the canvas line color, default: `'0,0,0'` ; the color is (R,G,B) - **`opacity`**: the opacity of line (0~1), default: `0.5` @@ -55,23 +73,40 @@ then ok! Example: ```html - + +``` + +Or + +```js +{ + color: '0,0,255', + opacity: 0.7, + zIndex: -2, + count: 99, +}; ``` set the config on the script node `as a attribute`. all the config has the default value, you can choose to set any of them. -## preview +## Preview 1. [Online Tools: https://atool.vip/](https://atool.vip/) -if you has used this project, pls let me know, I can add your website on. + +If you has used this project, you can send pr and write it here. + ![screenshot](https://raw.githubusercontent.com/hustcc/canvas-nest.js/master/screenshot.png) -## other +## Other + +Library cdn url: [http://www.bootcdn.cn/canvas-nest.js/](http://www.bootcdn.cn/canvas-nest.js/). + + -Project library cdn url: [http://www.bootcdn.cn/canvas-nest.js/](http://www.bootcdn.cn/canvas-nest.js/). +## License -any bug or question, welcome to push request and issue. +MIT@[hustcc](https://github.com/hustcc). diff --git a/dist/canvas-nest.js b/dist/canvas-nest.js index e7bff1b..e1021cd 100644 --- a/dist/canvas-nest.js +++ b/dist/canvas-nest.js @@ -1,118 +1 @@ -/** - * Copyright (c) 2016 hustcc - * License: MIT - * Version: v1.0.1 - * GitHub: https://github.com/hustcc/canvas-nest.js -**/ -! function() { - //封装方法,压缩之后减少文件大小 - function get_attribute(node, attr, default_value) { - return node.getAttribute(attr) || default_value; - } - //封装方法,压缩之后减少文件大小 - function get_by_tagname(name) { - return document.getElementsByTagName(name); - } - //获取配置参数 - function get_config_option() { - var scripts = get_by_tagname("script"), - script_len = scripts.length, - script = scripts[script_len - 1]; //当前加载的script - return { - l: script_len, //长度,用于生成id用 - z: get_attribute(script, "zIndex", -1), //z-index - o: get_attribute(script, "opacity", 0.5), //opacity - c: get_attribute(script, "color", "0,0,0"), //color - n: get_attribute(script, "count", 99) //count - }; - } - //设置canvas的高宽 - function set_canvas_size() { - canvas_width = the_canvas.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, - canvas_height = the_canvas.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; - } - - //绘制过程 - function draw_canvas() { - context.clearRect(0, 0, canvas_width, canvas_height); - //随机的线条和当前位置联合数组 - var e, i, d, x_dist, y_dist, dist; //临时节点 - //遍历处理每一个点 - random_points.forEach(function(r, idx) { - r.x += r.xa, - r.y += r.ya, //移动 - r.xa *= r.x > canvas_width || r.x < 0 ? -1 : 1, - r.ya *= r.y > canvas_height || r.y < 0 ? -1 : 1, //碰到边界,反向反弹 - context.fillRect(r.x - 0.5, r.y - 0.5, 1, 1); //绘制一个宽高为1的点 - //从下一个点开始 - for (i = idx + 1; i < all_array.length; i++) { - e = all_array[i]; - // 当前点存在 - if (null !== e.x && null !== e.y) { - x_dist = r.x - e.x; //x轴距离 l - y_dist = r.y - e.y; //y轴距离 n - dist = x_dist * x_dist + y_dist * y_dist; //总距离, m - - dist < e.max && (e === current_point && dist >= e.max / 2 && (r.x -= 0.03 * x_dist, r.y -= 0.03 * y_dist), //靠近的时候加速 - d = (e.max - dist) / e.max, - context.beginPath(), - context.lineWidth = d / 2, - context.strokeStyle = "rgba(" + config.c + "," + (d + 0.2) + ")", - context.moveTo(r.x, r.y), - context.lineTo(e.x, e.y), - context.stroke()); - } - } - }), frame_func(draw_canvas); - } - //创建画布,并添加到body中 - var the_canvas = document.createElement("canvas"), //画布 - config = get_config_option(), //配置 - canvas_id = "c_n" + config.l, //canvas id - context = the_canvas.getContext("2d"), canvas_width, canvas_height, - frame_func = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(func) { - window.setTimeout(func, 1000 / 45); - }, random = Math.random, - current_point = { - x: null, //当前鼠标x - y: null, //当前鼠标y - max: 20000 // 圈半径的平方 - }, - all_array; - the_canvas.id = canvas_id; - the_canvas.style.cssText = "position:fixed;top:0;left:0;z-index:" + config.z + ";opacity:" + config.o; - get_by_tagname("body")[0].appendChild(the_canvas); - - //初始化画布大小 - set_canvas_size(); - window.onresize = set_canvas_size; - //当时鼠标位置存储,离开的时候,释放当前位置信息 - window.onmousemove = function(e) { - e = e || window.event; - current_point.x = e.clientX; - current_point.y = e.clientY; - }, window.onmouseout = function() { - current_point.x = null; - current_point.y = null; - }; - //随机生成config.n条线位置信息 - for (var random_points = [], i = 0; config.n > i; i++) { - var x = random() * canvas_width, //随机位置 - y = random() * canvas_height, - xa = 2 * random() - 1, //随机运动方向 - ya = 2 * random() - 1; - // 随机点 - random_points.push({ - x: x, - y: y, - xa: xa, - ya: ya, - max: 6000 //沾附距离 - }); - } - all_array = random_points.concat([current_point]); - //0.1秒后绘制 - setTimeout(function() { - draw_canvas(); - }, 100); -}(); +!function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var i=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var i=this,o=arguments.length,r=Array(o),s=0;sn||r.x<0?-1:1,r.ya*=r.y>i||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=v+1;u=a.max/2&&(r.x-=.03*c,r.y-=.03*d),l=(a.max-h)/a.max,t.beginPath(),t.lineWidth=l/2,t.strokeStyle="rgba("+e.c.color+","+(l+.2)+")",t.moveTo(r.x,r.y),t.lineTo(a.x,a.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}}]),e}())(document.body,(v=document.getElementsByTagName("script"),{zIndex:(f=v[v.length-1]).getAttribute("zIndex"),opacity:f.getAttribute("opacity"),color:f.getAttribute("color"),count:Number(f.getAttribute("count"))||99}))}(); diff --git a/dist/canvas-nest.min.js b/dist/canvas-nest.min.js deleted file mode 100644 index 006aada..0000000 --- a/dist/canvas-nest.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Copyright (c) 2016 hustcc - * License: MIT - * Version: v1.0.1 - * GitHub: https://github.com/hustcc/canvas-nest.js -**/ -!function(){function n(n,e,t){return n.getAttribute(e)||t}function e(n){return document.getElementsByTagName(n)}function t(){var t=e("script"),o=t.length,i=t[o-1];return{l:o,z:n(i,"zIndex",-1),o:n(i,"opacity",.5),c:n(i,"color","0,0,0"),n:n(i,"count",99)}}function o(){a=m.width=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,c=m.height=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight}function i(){r.clearRect(0,0,a,c);var n,e,t,o,m,l;s.forEach(function(i,x){for(i.x+=i.xa,i.y+=i.ya,i.xa*=i.x>a||i.x<0?-1:1,i.ya*=i.y>c||i.y<0?-1:1,r.fillRect(i.x-.5,i.y-.5,1,1),e=x+1;e=n.max/2&&(i.x-=.03*o,i.y-=.03*m),t=(n.max-l)/n.max,r.beginPath(),r.lineWidth=t/2,r.strokeStyle="rgba("+d.c+","+(t+.2)+")",r.moveTo(i.x,i.y),r.lineTo(n.x,n.y),r.stroke()))}),x(i)}var a,c,u,m=document.createElement("canvas"),d=t(),l="c_n"+d.l,r=m.getContext("2d"),x=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(n){window.setTimeout(n,1e3/45)},w=Math.random,y={x:null,y:null,max:2e4};m.id=l,m.style.cssText="position:fixed;top:0;left:0;z-index:"+d.z+";opacity:"+d.o,e("body")[0].appendChild(m),o(),window.onresize=o,window.onmousemove=function(n){n=n||window.event,y.x=n.clientX,y.y=n.clientY},window.onmouseout=function(){y.x=null,y.y=null};for(var s=[],f=0;d.n>f;f++){var h=w()*a,g=w()*c,v=2*w()-1,p=2*w()-1;s.push({x:h,y:g,xa:v,ya:p,max:6e3})}u=s.concat([y]),setTimeout(function(){i()},100)}(); \ No newline at end of file diff --git a/dist/canvas-nest.umd.js b/dist/canvas-nest.umd.js new file mode 100644 index 0000000..3a7f67f --- /dev/null +++ b/dist/canvas-nest.umd.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CanvasNest=t()}(this,function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var i=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var i=this,o=arguments.length,r=Array(o),s=0;sn||r.x<0?-1:1,r.ya*=r.y>i||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=h+1;u=a.max/2&&(r.x-=.03*c,r.y-=.03*d),l=(a.max-f)/a.max,t.beginPath(),t.lineWidth=l/2,t.strokeStyle="rgba("+e.c.color+","+(l+.2)+")",t.moveTo(r.x,r.y),t.lineTo(a.x,a.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}}]),e}()}); diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index f106eaa..0000000 --- a/gulpfile.js +++ /dev/null @@ -1,16 +0,0 @@ -const fs = require('fs'); -const gulp = require('gulp'); -const uglify = require('gulp-uglify'); -const rename = require("gulp-rename"); -const injectVersion = require('gulp-inject-version'); - -gulp.task('mini', () => ( - gulp.src('src/canvas-nest.js') - .pipe(injectVersion()) - .pipe(gulp.dest('dist/')) - .pipe(uglify({ - preserveComments: 'license' - })) //uglify - .pipe(rename("canvas-nest.min.js")) - .pipe(gulp.dest('dist/')) -)); \ No newline at end of file diff --git a/index.html b/index.html index ffab0eb..eae6a20 100644 --- a/index.html +++ b/index.html @@ -4,28 +4,68 @@ canvas-nest.js - + + -
+
+ +
- + + diff --git a/lib/CanvasNest.js b/lib/CanvasNest.js new file mode 100644 index 0000000..57dce83 --- /dev/null +++ b/lib/CanvasNest.js @@ -0,0 +1,159 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /** + * Created by hustcc on 18/6/23. + * Contract: i@hust.cc + */ + +var _sizeSensor = require('size-sensor'); + +var _utils = require('./utils'); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var CanvasNest = function () { + function CanvasNest(el, config) { + var _this = this; + + _classCallCheck(this, CanvasNest); + + this.randomPoints = function () { + return (0, _utils.range)(_this.c.count).map(function () { + return { + x: Math.random() * _this.canvas.width, + y: Math.random() * _this.canvas.height, + xa: 2 * Math.random() - 1, // 随机运动返现 + ya: 2 * Math.random() - 1, + max: 6000 //沾附距离 + }; + }); + }; + + this.el = el; + + this.c = _extends({ + zIndex: -1, // z-index + opacity: 0.5, // opacity + color: '0,0,0', // color + count: 99 }, config); + + this.canvas = this.newCanvas(); + this.context = this.canvas.getContext('2d'); + + this.points = this.randomPoints(); + this.current = { + x: null, // 当前鼠标x + y: null, // 当前鼠标y + max: 20000 // 圈半径的平方 + }; + this.all = this.points.concat([this.current]); + + this.bindEvent(); + + this.requestFrame(this.drawCanvas); + } + + _createClass(CanvasNest, [{ + key: 'bindEvent', + value: function bindEvent() { + var _this2 = this; + + (0, _sizeSensor.bind)(this.el, function () { + _this2.canvas.width = _this2.el.clientWidth; + _this2.canvas.height = _this2.el.clientHeight; + }); + + var onmousemove = window.onmousemove; + window.onmousemove = function (e) { + _this2.current.x = e.clientX; + _this2.current.y = e.clientY; + onmousemove && onmousemove(e); + }; + + var onmouseout = window.onmouseout; + window.onmouseout = function () { + _this2.current.x = null; + _this2.current.y = null; + onmouseout && onmouseout(); + }; + } + }, { + key: 'newCanvas', + value: function newCanvas() { + if (getComputedStyle(this.el).position === 'static') { + this.el.style.position = 'relative'; + } + var canvas = document.createElement('canvas'); // 画布 + canvas.style.cssText = (0, _utils.canvasStyle)(this.c); + + canvas.width = this.el.clientWidth; + canvas.height = this.el.clientHeight; + + this.el.appendChild(canvas); + return canvas; + } + }, { + key: 'requestFrame', + value: function requestFrame(func) { + var _this3 = this; + + return (0, _utils.requestAnimationFrame)(function () { + return func.call(_this3); + }); + } + }, { + key: 'drawCanvas', + value: function drawCanvas() { + var _this4 = this; + + var context = this.context; + var width = this.canvas.width; + var height = this.canvas.height; + var current = this.current; + var points = this.points; + var all = this.all; + + context.clearRect(0, 0, width, height); + // 随机的线条和当前位置联合数组 + var e = void 0, + i = void 0, + d = void 0, + x_dist = void 0, + y_dist = void 0, + dist = void 0; // 临时节点 + // 遍历处理每一个点 + points.forEach(function (r, idx) { + r.x += r.xa; + r.y += r.ya; // 移动 + r.xa *= r.x > width || r.x < 0 ? -1 : 1; + r.ya *= r.y > height || r.y < 0 ? -1 : 1; // 碰到边界,反向反弹 + context.fillRect(r.x - 0.5, r.y - 0.5, 1, 1); // 绘制一个宽高为1的点 + // 从下一个点开始 + for (i = idx + 1; i < all.length; i++) { + e = all[i]; + // 当前点存在 + if (null !== e.x && null !== e.y) { + x_dist = r.x - e.x; // x轴距离 l + y_dist = r.y - e.y; // y轴距离 n + dist = x_dist * x_dist + y_dist * y_dist; // 总距离, m + + dist < e.max && (e === current && dist >= e.max / 2 && (r.x -= 0.03 * x_dist, r.y -= 0.03 * y_dist), // 靠近的时候加速 + d = (e.max - dist) / e.max, context.beginPath(), context.lineWidth = d / 2, context.strokeStyle = 'rgba(' + _this4.c.color + ',' + (d + 0.2) + ')', context.moveTo(r.x, r.y), context.lineTo(e.x, e.y), context.stroke()); + } + } + }); + this.requestFrame(this.drawCanvas); + } + }]); + + return CanvasNest; +}(); + +exports.default = CanvasNest; +module.exports = exports['default']; \ No newline at end of file diff --git a/lib/iife.js b/lib/iife.js new file mode 100644 index 0000000..c2cc9a1 --- /dev/null +++ b/lib/iife.js @@ -0,0 +1,24 @@ +'use strict'; + +var _CanvasNest = require('./CanvasNest'); + +var _CanvasNest2 = _interopRequireDefault(_CanvasNest); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var getScriptConfig = function getScriptConfig() { + var scripts = document.getElementsByTagName('script'); + var len = scripts.length; + var script = scripts[len - 1]; // 当前加载的script + return { + zIndex: script.getAttribute('zIndex'), + opacity: script.getAttribute('opacity'), + color: script.getAttribute('color'), + count: Number(script.getAttribute('count')) || 99 + }; +}; /** + * Created by hustcc on 18/6/23. + * Contract: i@hust.cc + */ + +new _CanvasNest2.default(document.body, getScriptConfig()); \ No newline at end of file diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..fbcaf1b --- /dev/null +++ b/lib/index.js @@ -0,0 +1,18 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _CanvasNest = require('./CanvasNest'); + +var _CanvasNest2 = _interopRequireDefault(_CanvasNest); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = _CanvasNest2.default; /** + * Created by hustcc on 18/6/23. + * Contract: i@hust.cc + */ + +module.exports = exports['default']; \ No newline at end of file diff --git a/lib/utils.js b/lib/utils.js new file mode 100644 index 0000000..cc9afca --- /dev/null +++ b/lib/utils.js @@ -0,0 +1,23 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +/** + * Created by hustcc on 18/6/23. + * Contract: i@hust.cc + */ + +var requestAnimationFrame = exports.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (func) { + return window.setTimeout(func, 1000 / 60); +}; + +var range = exports.range = function range(n) { + return new Array(n).fill(0).map(function (e, idx) { + return idx; + }); +}; + +var canvasStyle = exports.canvasStyle = function canvasStyle(config) { + return "display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:" + config.zIndex + ";opacity:" + config.opacity; +}; \ No newline at end of file diff --git a/package.json b/package.json index 4849913..c297d8f 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,42 @@ { "name": "canvas-nest.js", "officialName": "canvas-nest.js", - "version": "1.0.1", + "version": "2.0.0", + "main": "lib/index.js", "summary": "A nest backgroud of website draw on canvas use javascript, do not depends on jQuery.", "description": "A nest backgroud of website draw on canvas use javascript, do not depends on jQuery.", + "scripts": { + "test": "npm run size", + "size": "size-limit", + "build:lib": "rimraf ./lib && cross-env NODE_ENV=babel babel src -d lib", + "build:umd": "cross-env NODE_ENV=rollup rollup -c rollup.config.umd.js", + "build:iife": "cross-env NODE_ENV=rollup rollup -c rollup.config.iife.js", + "build": "npm run build:umd && npm run build:iife && npm run build:lib && npm run test" + }, + "dependencies": { + "size-sensor": "^0.0.4" + }, + "size-limit": [ + { + "limit": "2.5 KB", + "path": "dist/canvas-nest.umd.js" + }, + { + "limit": "2.5 KB", + "path": "dist/canvas-nest.js" + } + ], "author": { "name": "hustcc", "url": "https://github.com/hustcc" }, - "homepage": "http://www.atool.org", + "homepage": "https://atool.vip", "license": "MIT", "keywords": [ "canvas", "html5", "nest" ], - "main": "dist/canvas-nest.min.js", "repository": { "type": "git", "url": "https://github.com/hustcc/canvas-nest.js" @@ -24,17 +45,25 @@ "url": "https://github.com/hustcc/canvas-nest.js/issues" }, "devDependencies": { - "gulp": "^3.9.0", - "gulp-uglify": "^1.5.3", - "jshint": "^2.9.2", - "gulp-rename": "^1.2.2", - "gulp-inject-version": "^1.0.1" - }, - "scripts": { - "lint": "jshint src/canvas-nest.js", - "test": "npm run lint", - "build": "gulp mini && npm run test" - }, - "dependencies": { + "babel-cli": "^6.26.0", + "babel-jest": "^22.4.1", + "babel-plugin-add-module-exports": "^0.2.1", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.26.0", + "babel-preset-env": "^1.6.1", + "coveralls": "^3.0.0", + "cross-env": "^5.1.3", + "jest": "^22.4.2", + "jest-date-mock": "^1.0.0", + "jest-expect": "^0.0.1", + "jsdom": "^11.5.1", + "mitt": "^1.1.3", + "rimraf": "^2.6.2", + "rollup": "^0.58.1", + "rollup-plugin-babel": "^3.0.4", + "rollup-plugin-commonjs": "^9.1.3", + "rollup-plugin-node-resolve": "^3.3.0", + "rollup-plugin-uglify": "^3.0.0", + "size-limit": "^0.18.0" } -} \ No newline at end of file +} diff --git a/rollup.config.iife.js b/rollup.config.iife.js new file mode 100644 index 0000000..699fce1 --- /dev/null +++ b/rollup.config.iife.js @@ -0,0 +1,29 @@ +/** + * Created by hustcc on 18/6/23. + * Contract: i@hust.cc + */ + +import uglify from 'rollup-plugin-uglify'; +import babel from 'rollup-plugin-babel'; +import resolve from 'rollup-plugin-node-resolve'; +import commonjs from 'rollup-plugin-commonjs'; + +export default { + input: 'src/iife.js', + output: { + file: 'dist/canvas-nest.js', + format: 'iife', + }, + plugins: [ + resolve(), + babel({ + exclude: 'node_modules/**', + }), + commonjs(), + uglify({ + output: { comments: false }, + compress: { warnings: false } + }), + ], + external: [], +}; diff --git a/rollup.config.umd.js b/rollup.config.umd.js new file mode 100644 index 0000000..ad79cfe --- /dev/null +++ b/rollup.config.umd.js @@ -0,0 +1,30 @@ +/** + * Created by hustcc on 18/6/23. + * Contract: i@hust.cc + */ + +import uglify from 'rollup-plugin-uglify'; +import babel from 'rollup-plugin-babel'; +import resolve from 'rollup-plugin-node-resolve'; +import commonjs from 'rollup-plugin-commonjs'; + +export default { + input: 'src/index.js', + output: { + file: 'dist/canvas-nest.umd.js', + name: 'CanvasNest', + format: 'umd', + }, + plugins: [ + resolve(), + babel({ + exclude: 'node_modules/**', + }), + commonjs(), + uglify({ + output: { comments: false }, + compress: { warnings: false } + }), + ], + external: [], +}; diff --git a/src/CanvasNest.js b/src/CanvasNest.js new file mode 100644 index 0000000..2490785 --- /dev/null +++ b/src/CanvasNest.js @@ -0,0 +1,126 @@ +/** + * Created by hustcc on 18/6/23. + * Contract: i@hust.cc + */ + +import { bind } from 'size-sensor'; +import { requestAnimationFrame, range, canvasStyle } from './utils'; + +export default class CanvasNest { + constructor(el, config) { + this.el = el; + + this.c = { + zIndex: -1, // z-index + opacity: 0.5, // opacity + color: '0,0,0', // color + count: 99, // count + ...config, + }; + + this.canvas = this.newCanvas(); + this.context = this.canvas.getContext('2d'); + + this.points = this.randomPoints(); + this.current = { + x: null, // 当前鼠标x + y: null, // 当前鼠标y + max: 20000 // 圈半径的平方 + }; + this.all = this.points.concat([this.current]); + + this.bindEvent(); + + this.requestFrame(this.drawCanvas); + } + + bindEvent() { + bind(this.el, () => { + this.canvas.width = this.el.clientWidth; + this.canvas.height = this.el.clientHeight; + }); + + const onmousemove = window.onmousemove; + window.onmousemove = e => { + this.current.x = e.clientX; + this.current.y = e.clientY; + onmousemove && onmousemove(e); + }; + + const onmouseout = window.onmouseout; + window.onmouseout = () => { + this.current.x = null; + this.current.y = null; + onmouseout && onmouseout(); + }; + } + + randomPoints = () => { + return range(this.c.count).map(() => ({ + x: Math.random() * this.canvas.width, + y: Math.random() * this.canvas.height, + xa: 2 * Math.random() - 1, // 随机运动返现 + ya: 2 * Math.random() - 1, + max: 6000 //沾附距离 + })); + }; + + newCanvas() { + if (getComputedStyle(this.el).position === 'static') { + this.el.style.position = 'relative' + } + const canvas = document.createElement('canvas'); // 画布 + canvas.style.cssText = canvasStyle(this.c); + + canvas.width = this.el.clientWidth; + canvas.height = this.el.clientHeight; + + this.el.appendChild(canvas); + return canvas; + } + + requestFrame(func) { + return requestAnimationFrame(() => func.call(this)); + } + + drawCanvas() { + const context = this.context; + const width = this.canvas.width; + const height = this.canvas.height; + const current = this.current; + const points = this.points; + const all = this.all; + + context.clearRect(0, 0, width, height); + // 随机的线条和当前位置联合数组 + let e, i, d, x_dist, y_dist, dist; // 临时节点 + // 遍历处理每一个点 + points.forEach((r, idx) => { + r.x += r.xa; + r.y += r.ya; // 移动 + r.xa *= r.x > width || r.x < 0 ? -1 : 1; + r.ya *= r.y > height || r.y < 0 ? -1 : 1; // 碰到边界,反向反弹 + context.fillRect(r.x - 0.5, r.y - 0.5, 1, 1); // 绘制一个宽高为1的点 + // 从下一个点开始 + for (i = idx + 1; i < all.length; i ++) { + e = all[i]; + // 当前点存在 + if (null !== e.x && null !== e.y) { + x_dist = r.x - e.x; // x轴距离 l + y_dist = r.y - e.y; // y轴距离 n + dist = x_dist * x_dist + y_dist * y_dist; // 总距离, m + + dist < e.max && (e === current && dist >= e.max / 2 && (r.x -= 0.03 * x_dist, r.y -= 0.03 * y_dist), // 靠近的时候加速 + d = (e.max - dist) / e.max, + context.beginPath(), + context.lineWidth = d / 2, + context.strokeStyle = `rgba(${this.c.color},${d + 0.2})`, + context.moveTo(r.x, r.y), + context.lineTo(e.x, e.y), + context.stroke()); + } + } + }); + this.requestFrame(this.drawCanvas); + } +} diff --git a/src/canvas-nest.js b/src/canvas-nest.js deleted file mode 100644 index 88f859a..0000000 --- a/src/canvas-nest.js +++ /dev/null @@ -1,118 +0,0 @@ -/** - * Copyright (c) 2016 hustcc - * License: MIT - * Version: %%GULP_INJECT_VERSION%% - * GitHub: https://github.com/hustcc/canvas-nest.js -**/ -! function() { - //封装方法,压缩之后减少文件大小 - function get_attribute(node, attr, default_value) { - return node.getAttribute(attr) || default_value; - } - //封装方法,压缩之后减少文件大小 - function get_by_tagname(name) { - return document.getElementsByTagName(name); - } - //获取配置参数 - function get_config_option() { - var scripts = get_by_tagname("script"), - script_len = scripts.length, - script = scripts[script_len - 1]; //当前加载的script - return { - l: script_len, //长度,用于生成id用 - z: get_attribute(script, "zIndex", -1), //z-index - o: get_attribute(script, "opacity", 0.5), //opacity - c: get_attribute(script, "color", "0,0,0"), //color - n: get_attribute(script, "count", 99) //count - }; - } - //设置canvas的高宽 - function set_canvas_size() { - canvas_width = the_canvas.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, - canvas_height = the_canvas.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; - } - - //绘制过程 - function draw_canvas() { - context.clearRect(0, 0, canvas_width, canvas_height); - //随机的线条和当前位置联合数组 - var e, i, d, x_dist, y_dist, dist; //临时节点 - //遍历处理每一个点 - random_points.forEach(function(r, idx) { - r.x += r.xa, - r.y += r.ya, //移动 - r.xa *= r.x > canvas_width || r.x < 0 ? -1 : 1, - r.ya *= r.y > canvas_height || r.y < 0 ? -1 : 1, //碰到边界,反向反弹 - context.fillRect(r.x - 0.5, r.y - 0.5, 1, 1); //绘制一个宽高为1的点 - //从下一个点开始 - for (i = idx + 1; i < all_array.length; i++) { - e = all_array[i]; - // 当前点存在 - if (null !== e.x && null !== e.y) { - x_dist = r.x - e.x; //x轴距离 l - y_dist = r.y - e.y; //y轴距离 n - dist = x_dist * x_dist + y_dist * y_dist; //总距离, m - - dist < e.max && (e === current_point && dist >= e.max / 2 && (r.x -= 0.03 * x_dist, r.y -= 0.03 * y_dist), //靠近的时候加速 - d = (e.max - dist) / e.max, - context.beginPath(), - context.lineWidth = d / 2, - context.strokeStyle = "rgba(" + config.c + "," + (d + 0.2) + ")", - context.moveTo(r.x, r.y), - context.lineTo(e.x, e.y), - context.stroke()); - } - } - }), frame_func(draw_canvas); - } - //创建画布,并添加到body中 - var the_canvas = document.createElement("canvas"), //画布 - config = get_config_option(), //配置 - canvas_id = "c_n" + config.l, //canvas id - context = the_canvas.getContext("2d"), canvas_width, canvas_height, - frame_func = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(func) { - window.setTimeout(func, 1000 / 60); - }, random = Math.random, - current_point = { - x: null, //当前鼠标x - y: null, //当前鼠标y - max: 20000 // 圈半径的平方 - }, - all_array; - the_canvas.id = canvas_id; - the_canvas.style.cssText = "position:fixed;top:0;left:0;z-index:" + config.z + ";opacity:" + config.o; - get_by_tagname("body")[0].appendChild(the_canvas); - - //初始化画布大小 - set_canvas_size(); - window.onresize = set_canvas_size; - //当时鼠标位置存储,离开的时候,释放当前位置信息 - window.onmousemove = function(e) { - e = e || window.event; - current_point.x = e.clientX; - current_point.y = e.clientY; - }, window.onmouseout = function() { - current_point.x = null; - current_point.y = null; - }; - //随机生成config.n条线位置信息 - for (var random_points = [], i = 0; config.n > i; i++) { - var x = random() * canvas_width, //随机位置 - y = random() * canvas_height, - xa = 2 * random() - 1, //随机运动方向 - ya = 2 * random() - 1; - // 随机点 - random_points.push({ - x: x, - y: y, - xa: xa, - ya: ya, - max: 6000 //沾附距离 - }); - } - all_array = random_points.concat([current_point]); - //0.1秒后绘制 - setTimeout(function() { - frame_func(draw_canvas); - }, 100); -}(); diff --git a/src/iife.js b/src/iife.js new file mode 100644 index 0000000..5e5cf86 --- /dev/null +++ b/src/iife.js @@ -0,0 +1,20 @@ +/** + * Created by hustcc on 18/6/23. + * Contract: i@hust.cc + */ + +import CanvasNest from './CanvasNest'; + +const getScriptConfig = () => { + const scripts = document.getElementsByTagName('script'); + const len = scripts.length; + const script = scripts[len - 1]; // 当前加载的script + return { + zIndex: script.getAttribute('zIndex'), + opacity: script.getAttribute('opacity'), + color: script.getAttribute('color'), + count: Number(script.getAttribute('count')) || 99, + }; +}; + +new CanvasNest(document.body, getScriptConfig()); diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..c604ed1 --- /dev/null +++ b/src/index.js @@ -0,0 +1,8 @@ +/** + * Created by hustcc on 18/6/23. + * Contract: i@hust.cc + */ + +import CanvasNest from './CanvasNest'; + +export default CanvasNest; diff --git a/src/utils.js b/src/utils.js new file mode 100644 index 0000000..ff77c22 --- /dev/null +++ b/src/utils.js @@ -0,0 +1,19 @@ +/** + * Created by hustcc on 18/6/23. + * Contract: i@hust.cc + */ + +export const requestAnimationFrame = window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + window.msRequestAnimationFrame || + function(func) { + return window.setTimeout(func, 1000 / 60); + }; + +export const range = n => + new Array(n).fill(0).map((e, idx) => idx); + +export const canvasStyle = config => + `display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:${config.zIndex};opacity:${config.opacity}`; From 8111e912c3d8e31d1169a804aac1de9ec560d60b Mon Sep 17 00:00:00 2001 From: hustcc Date: Sat, 23 Jun 2018 11:34:23 +0800 Subject: [PATCH 02/28] update demo site --- README-zh.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README-zh.md b/README-zh.md index 403c9a2..76c62d5 100644 --- a/README-zh.md +++ b/README-zh.md @@ -2,7 +2,7 @@ > 一个基于 html5 canvas 绘制的网页背景效果,非常赞!如果需要 `wordpress插件`,在插件库搜索 `canvas-nest` 或者看看项目 [canvas-nest-for-wp](https://github.com/aTool-org/canvas-nest-for-wp)。 -[![npm](https://img.shields.io/badge/demo-online-brightgreen.svg)](https://git.hust.cc/canvas.nest.js) +[![npm](https://img.shields.io/badge/demo-online-brightgreen.svg)](https://git.hust.cc/canvas-nest.js) ![npm](https://img.shields.io/npm/v/canvas-nest.js.svg) ![npm](https://img.shields.io/npm/dm/canvas-nest.js.svg) diff --git a/README.md b/README.md index f456cad..187e5f1 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ > A nest backgroud of website draw on canvas. [中文Readme帮助文档](https://github.com/hustcc/canvas-nest.js/blob/master/README-zh.md). For `wordpress plugin`, search `canvas-nest` or see [canvas-nest-for-wp](https://github.com/aTool-org/canvas-nest-for-wp). -[![npm](https://img.shields.io/badge/demo-online-brightgreen.svg)](https://git.hust.cc/canvas.nest.js) +[![npm](https://img.shields.io/badge/demo-online-brightgreen.svg)](https://git.hust.cc/canvas-nest.js) ![npm](https://img.shields.io/npm/v/canvas-nest.js.svg) ![npm](https://img.shields.io/npm/dm/canvas-nest.js.svg) From 5d9ed6bb4ba2683cfbb6dc486c0f0d54c05f85e8 Mon Sep 17 00:00:00 2001 From: hustcc Date: Sat, 23 Jun 2018 11:36:30 +0800 Subject: [PATCH 03/28] update README --- README-zh.md | 3 +++ README.md | 3 +++ 2 files changed, 6 insertions(+) diff --git a/README-zh.md b/README-zh.md index 76c62d5..cef8201 100644 --- a/README-zh.md +++ b/README-zh.md @@ -6,12 +6,15 @@ ![npm](https://img.shields.io/npm/v/canvas-nest.js.svg) ![npm](https://img.shields.io/npm/dm/canvas-nest.js.svg) +> npm i --save canvas-nest.js + ## 特性 - 不依赖 jQuery,使用原生的 javascript。 - 非常小,只有 2 Kb。 - 非常容易实现,配置简单,即使你不是 web 开发者,也能简单搞定。 + - 模块化 & 区域徐然。 ## 使用 diff --git a/README.md b/README.md index 187e5f1..abd517f 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,15 @@ ![npm](https://img.shields.io/npm/v/canvas-nest.js.svg) ![npm](https://img.shields.io/npm/dm/canvas-nest.js.svg) +> npm i --save canvas-nest.js + ## Feature - No need jQuery. - Light, only 2 Kb. - Easy to use, even you are not a web developer. + - Modular & area render. ## Usage From fc5403074b3cea7c60dbb404ec7dbac227490ca3 Mon Sep 17 00:00:00 2001 From: hustcc Date: Sat, 23 Jun 2018 12:19:53 +0800 Subject: [PATCH 04/28] add destroy --- README-zh.md | 5 ++++- README.md | 5 ++++- dist/canvas-nest.js | 2 +- dist/canvas-nest.umd.js | 2 +- index.html | 14 ++++++-------- lib/CanvasNest.js | 30 +++++++++++++++++++++++------- lib/utils.js | 4 +++- package.json | 2 +- src/CanvasNest.js | 33 ++++++++++++++++++++++++--------- src/utils.js | 9 ++++++++- 10 files changed, 75 insertions(+), 31 deletions(-) diff --git a/README-zh.md b/README-zh.md index cef8201..4d63d20 100644 --- a/README-zh.md +++ b/README-zh.md @@ -60,7 +60,10 @@ const config = { }; // 在 element 地方使用 config 渲染效果 -new CanvasNest(element, config); +const cn = new CanvasNest(element, config); + +// destroy +cn.destroy(); ``` diff --git a/README.md b/README.md index abd517f..52c3d1d 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,10 @@ const config = { }; // render nest on element with config. -new CanvasNest(element, config); +const cn = new CanvasNest(element, config); + +// destroy +cn.destroy(); ``` diff --git a/dist/canvas-nest.js b/dist/canvas-nest.js index e1021cd..be476f2 100644 --- a/dist/canvas-nest.js +++ b/dist/canvas-nest.js @@ -1 +1 @@ -!function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var i=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var i=this,o=arguments.length,r=Array(o),s=0;sn||r.x<0?-1:1,r.ya*=r.y>i||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=v+1;u=a.max/2&&(r.x-=.03*c,r.y-=.03*d),l=(a.max-h)/a.max,t.beginPath(),t.lineWidth=l/2,t.strokeStyle="rgba("+e.c.color+","+(l+.2)+")",t.moveTo(r.x,r.y),t.lineTo(a.x,a.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}}]),e}())(document.body,(v=document.getElementsByTagName("script"),{zIndex:(f=v[v.length-1]).getAttribute("zIndex"),opacity:f.getAttribute("opacity"),color:f.getAttribute("color"),count:Number(f.getAttribute("count"))||99}))}(); +!function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),s=0;sn||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=m+1;u=a.max/2&&(r.x-=.03*c,r.y-=.03*d),l=(a.max-h)/a.max,t.beginPath(),t.lineWidth=l/2,t.strokeStyle="rgba("+e.c.color+","+(l+.2)+")",t.moveTo(r.x,r.y),t.lineTo(a.x,a.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){u(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,d(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}())(document.body,(f=document.getElementsByTagName("script"),{zIndex:(y=f[f.length-1]).getAttribute("zIndex"),opacity:y.getAttribute("opacity"),color:y.getAttribute("color"),count:Number(y.getAttribute("count"))||99}))}(); diff --git a/dist/canvas-nest.umd.js b/dist/canvas-nest.umd.js index 3a7f67f..6f66dcc 100644 --- a/dist/canvas-nest.umd.js +++ b/dist/canvas-nest.umd.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CanvasNest=t()}(this,function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var i=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var i=this,o=arguments.length,r=Array(o),s=0;sn||r.x<0?-1:1,r.ya*=r.y>i||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=h+1;u=a.max/2&&(r.x-=.03*c,r.y-=.03*d),l=(a.max-f)/a.max,t.beginPath(),t.lineWidth=l/2,t.strokeStyle="rgba("+e.c.color+","+(l+.2)+")",t.moveTo(r.x,r.y),t.lineTo(a.x,a.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}}]),e}()}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CanvasNest=t()}(this,function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),s=0;sn||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=h+1;u=a.max/2&&(r.x-=.03*c,r.y-=.03*d),l=(a.max-f)/a.max,t.beginPath(),t.lineWidth=l/2,t.strokeStyle="rgba("+e.c.color+","+(l+.2)+")",t.moveTo(r.x,r.y),t.lineTo(a.x,a.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){u(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,d(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}()}); diff --git a/index.html b/index.html index eae6a20..1dcf2cc 100644 --- a/index.html +++ b/index.html @@ -17,7 +17,7 @@ #github-iframe { position: fixed; - right: 32px; + left: 32px; top: 32px; } @@ -25,7 +25,7 @@ position: fixed; width: 320px; height: 160px; - left: 4px; + right: 4px; bottom: 4px; border: dashed 1px #ccc; } @@ -39,12 +39,10 @@ ``` diff --git a/README.md b/README.md index 52c3d1d..442cd7f 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Or import the `umd` package use `script` tag. There is only one API, use it like: -``` +```js import CanvasNest from 'canvas-nest.js'; const config = { From ba188c4af032661e4b1986e9663e4674fdd98db5 Mon Sep 17 00:00:00 2001 From: hustcc Date: Sat, 23 Jun 2018 12:59:06 +0800 Subject: [PATCH 06/28] remove unused --- package.json | 7 ------- 1 file changed, 7 deletions(-) diff --git a/package.json b/package.json index 4bc12d0..d8ffdbe 100644 --- a/package.json +++ b/package.json @@ -46,18 +46,11 @@ }, "devDependencies": { "babel-cli": "^6.26.0", - "babel-jest": "^22.4.1", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-preset-env": "^1.6.1", - "coveralls": "^3.0.0", "cross-env": "^5.1.3", - "jest": "^22.4.2", - "jest-date-mock": "^1.0.0", - "jest-expect": "^0.0.1", - "jsdom": "^11.5.1", - "mitt": "^1.1.3", "rimraf": "^2.6.2", "rollup": "^0.58.1", "rollup-plugin-babel": "^3.0.4", From 85711da09ea0bf6ed118dc8ab81432f3bb553f0b Mon Sep 17 00:00:00 2001 From: ZYSzys <17367077526@163.com> Date: Sat, 23 Jun 2018 13:31:40 +0800 Subject: [PATCH 07/28] add example with Vue in README --- README-zh.md | 34 +++++++++++++++++++++++++++++++++- README.md | 30 ++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/README-zh.md b/README-zh.md index cde63f4..b7b95c1 100644 --- a/README-zh.md +++ b/README-zh.md @@ -49,7 +49,9 @@ > npm i --save canvas-nest.js -然后可以使用 script 方式引入 umd 包,当然也可使用模块化方式 import。并且只有一个 API,使用如下: +然后可以使用 script 方式引入 umd 包,当然也可使用模块化方式 import。 + +并且只有一个 API,使用如下: ```js import CanvasNest from 'canvas-nest.js'; @@ -66,6 +68,36 @@ const cn = new CanvasNest(element, config); cn.destroy(); ``` +示例(在Vue上使用): + +```html + + +``` ## 配置和配置项 diff --git a/README.md b/README.md index 442cd7f..a7c9bba 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,36 @@ const cn = new CanvasNest(element, config); cn.destroy(); ``` +For example(with Vue): + +```html + + +``` ## Config From 56ad055dbbeb6eefd0037ce209120830a35c5da9 Mon Sep 17 00:00:00 2001 From: ZYSzys <17367077526@163.com> Date: Sat, 23 Jun 2018 13:42:45 +0800 Subject: [PATCH 08/28] rename --- README-zh.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README-zh.md b/README-zh.md index b7b95c1..6ab685d 100644 --- a/README-zh.md +++ b/README-zh.md @@ -91,7 +91,7 @@ export default { }; // 获取要渲染的元素 - const cnEl = document.querySelector('#canvas-element') + const element = document.querySelector('#canvas-element') // 在 element 地方使用 config 渲染效果 const cn = new CanvasNest(element, config); } diff --git a/README.md b/README.md index a7c9bba..8ed673d 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ export default { }; // get the element you want to render - const cnEl = document.querySelector('#canvas-element') + const element = document.querySelector('#canvas-element') // render nest on element with config. const cn = new CanvasNest(element, config); } From ec13b90157ad0ddc58437000c8a669d7b6026b7e Mon Sep 17 00:00:00 2001 From: ZYSzys <17367077526@163.com> Date: Sat, 23 Jun 2018 17:42:17 +0800 Subject: [PATCH 09/28] change to vue component --- README-zh.md | 31 ++----------------------------- README.md | 32 +++----------------------------- 2 files changed, 5 insertions(+), 58 deletions(-) diff --git a/README-zh.md b/README-zh.md index 6ab685d..287742f 100644 --- a/README-zh.md +++ b/README-zh.md @@ -68,36 +68,9 @@ const cn = new CanvasNest(element, config); cn.destroy(); ``` -示例(在Vue上使用): +作为Vue组件使用: +- [vue-canvas-nest](https://github.com/ZYSzys/vue-canvas-nest) -```html - - -``` ## 配置和配置项 diff --git a/README.md b/README.md index 8ed673d..a48f9ed 100644 --- a/README.md +++ b/README.md @@ -68,36 +68,10 @@ const cn = new CanvasNest(element, config); cn.destroy(); ``` -For example(with Vue): +Use as Vue component: +- [vue-canvas-nest](https://github.com/ZYSzys/vue-canvas-nest) + -```html - - -``` ## Config From 7c96a046e92b9eba6af676a176e519156161730a Mon Sep 17 00:00:00 2001 From: hustcc Date: Sat, 23 Jun 2018 22:15:44 +0800 Subject: [PATCH 10/28] update README --- README-zh.md | 38 ++++++++++++++++---------------------- README.md | 43 ++++++++++++++++--------------------------- 2 files changed, 32 insertions(+), 49 deletions(-) diff --git a/README-zh.md b/README-zh.md index 287742f..c3c3b46 100644 --- a/README-zh.md +++ b/README-zh.md @@ -1,12 +1,12 @@ # canvas-nest.js -> 一个基于 html5 canvas 绘制的网页背景效果,非常赞!如果需要 `wordpress插件`,在插件库搜索 `canvas-nest` 或者看看项目 [canvas-nest-for-wp](https://github.com/aTool-org/canvas-nest-for-wp)。 +> 一个基于 html5 canvas 绘制的网页背景效果,非常赞! [![npm](https://img.shields.io/badge/demo-online-brightgreen.svg)](https://git.hust.cc/canvas-nest.js) -![npm](https://img.shields.io/npm/v/canvas-nest.js.svg) -![npm](https://img.shields.io/npm/dm/canvas-nest.js.svg) +[![npm](https://img.shields.io/npm/v/canvas-nest.js.svg)](https://www.npmjs.com/package/canvas-nest.js) +[![npm](https://img.shields.io/npm/dm/canvas-nest.js.svg)](https://www.npmjs.com/package/canvas-nest.js) -> npm i --save canvas-nest.js +> **npm i --save canvas-nest.js** ## 特性 @@ -14,7 +14,7 @@ - 不依赖 jQuery,使用原生的 javascript。 - 非常小,只有 2 Kb。 - 非常容易实现,配置简单,即使你不是 web 开发者,也能简单搞定。 - - 模块化 & 区域徐然。 + - 模块化 & 区域渲染。 ## 使用 @@ -24,7 +24,7 @@ 将下面的代码插入到 ` 和 之间`. ```html - + ``` 强烈建议在 ``标签上方. 例如下面的代码结构: @@ -37,7 +37,7 @@ ... ... - + ``` @@ -49,7 +49,7 @@ > npm i --save canvas-nest.js -然后可以使用 script 方式引入 umd 包,当然也可使用模块化方式 import。 +然后可以使用 script 方式引入 umd 包,当然也可使用模块化方式 import。 并且只有一个 API,使用如下: @@ -68,9 +68,6 @@ const cn = new CanvasNest(element, config); cn.destroy(); ``` -作为Vue组件使用: -- [vue-canvas-nest](https://github.com/ZYSzys/vue-canvas-nest) - ## 配置和配置项 @@ -83,12 +80,12 @@ cn.destroy(); Example: ```html - + ``` -这些属性配置在引用js的script标签中,作为它的一个属性值。所有的配置项都有默认值,如果你不知道怎么设置,可以先不设置这些配置项,就使用默认值看看效果也可以的。 +这些属性配置在引用 js 的 script 标签中,作为它的一个属性值。所有的配置项都有默认值,如果你不知道怎么设置,可以先不设置这些配置项,就使用默认值看看效果也可以的。 -或者模块化调用的时候,写成: +或者模块化调用的时候,config 参数写成: ```js { @@ -100,18 +97,15 @@ Example: ``` -## 示例 - -1. [在线工具: https://atool.vip/](https://atool.vip/) - -如果你使用的了本项目,也可以修改此处文件,并 pr,我会接受的。 +## 相关项目 -![screenshot](https://raw.githubusercontent.com/hustcc/canvas-nest.js/master/screenshot.png) + - [canvas-nest-for-wp](https://github.com/aTool-org/canvas-nest-for-wp): WP 插件,在插件市场搜索 `canvas-nest` 即可安装。 + - [vue-canvas-nest](https://github.com/ZYSzys/vue-canvas-nest): VUE 组件包装。 -## 其他 +## 使用项目 -本项目的 Javascript 文件已经存储在 CDN 上,可以直接使用,地址为: [http://www.bootcdn.cn/canvas-nest.js/](http://www.bootcdn.cn/canvas-nest.js/),如果你不需要 CDN 或者有自己的 CDN,可以直接下载源码 dist 目录中的 `canvas-nest.js`,然后相应的修改使用地址即可。 + - [A Tool](https://atools.vip/): 一个好用的工具集合. ## License diff --git a/README.md b/README.md index a48f9ed..65bc49d 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ # canvas-nest.js -> A nest backgroud of website draw on canvas. [中文Readme帮助文档](https://github.com/hustcc/canvas-nest.js/blob/master/README-zh.md). For `wordpress plugin`, search `canvas-nest` or see [canvas-nest-for-wp](https://github.com/aTool-org/canvas-nest-for-wp). +> A nest backgroud of website draw on canvas. [中文 Readme 帮助文档](README-zh.md). [![npm](https://img.shields.io/badge/demo-online-brightgreen.svg)](https://git.hust.cc/canvas-nest.js) -![npm](https://img.shields.io/npm/v/canvas-nest.js.svg) -![npm](https://img.shields.io/npm/dm/canvas-nest.js.svg) +[![npm](https://img.shields.io/npm/v/canvas-nest.js.svg)](https://www.npmjs.com/package/canvas-nest.js) +[![npm](https://img.shields.io/npm/dm/canvas-nest.js.svg)](https://www.npmjs.com/package/canvas-nest.js) -> npm i --save canvas-nest.js +> **npm i --save canvas-nest.js** ## Feature @@ -24,7 +24,7 @@ Insert the code below `between and `. ```html - + ``` Suggest before the tag ``, like below: @@ -37,7 +37,7 @@ Suggest before the tag ``, like below: ... ... - + ``` @@ -68,22 +68,18 @@ const cn = new CanvasNest(element, config); cn.destroy(); ``` -Use as Vue component: -- [vue-canvas-nest](https://github.com/ZYSzys/vue-canvas-nest) - - ## Config - - **`color`**: the canvas line color, default: `'0,0,0'` ; the color is (R,G,B) - - **`opacity`**: the opacity of line (0~1), default: `0.5` - - **`count`**: the number of lines, default: `150` - - **`zIndex`**: the index of z space, default: `-1` + - **`color`**: the canvas line color, default: `'0,0,0'`; the color is (R,G,B). + - **`opacity`**: the opacity of line (0~1), default: `0.5`. + - **`count`**: the number of lines, default: `99`. + - **`zIndex`**: the index of z space, default: `-1`. Example: ```html - + ``` Or @@ -97,23 +93,16 @@ Or }; ``` -set the config on the script node `as a attribute`. all the config has the default value, you can choose to set any of them. - - -## Preview - -1. [Online Tools: https://atool.vip/](https://atool.vip/) - - -If you has used this project, you can send pr and write it here. +## Related projects -![screenshot](https://raw.githubusercontent.com/hustcc/canvas-nest.js/master/screenshot.png) + - [canvas-nest-for-wp](https://github.com/aTool-org/canvas-nest-for-wp): a wordpress plugin, search `canvas-nest` in wordpress store. + - [vue-canvas-nest](https://github.com/ZYSzys/vue-canvas-nest): vue component wrapper. -## Other +## Used by -Library cdn url: [http://www.bootcdn.cn/canvas-nest.js/](http://www.bootcdn.cn/canvas-nest.js/). + - [A Tool](https://atools.vip/): Tools for human. From b54db2451bd5e8afb043157ac32f0143de4cf4e8 Mon Sep 17 00:00:00 2001 From: hustcc Date: Sat, 23 Jun 2018 22:18:16 +0800 Subject: [PATCH 11/28] add gzip size --- README-zh.md | 1 + README.md | 1 + 2 files changed, 2 insertions(+) diff --git a/README-zh.md b/README-zh.md index c3c3b46..273c3f7 100644 --- a/README-zh.md +++ b/README-zh.md @@ -5,6 +5,7 @@ [![npm](https://img.shields.io/badge/demo-online-brightgreen.svg)](https://git.hust.cc/canvas-nest.js) [![npm](https://img.shields.io/npm/v/canvas-nest.js.svg)](https://www.npmjs.com/package/canvas-nest.js) [![npm](https://img.shields.io/npm/dm/canvas-nest.js.svg)](https://www.npmjs.com/package/canvas-nest.js) +[![gzip](http://img.badgesize.io/https://unpkg.com/canvas-nest.js/dist/canvas-nest.js?compression=gzip)](https://unpkg.com/canvas-nest.js/dist/canvas-nest.js) > **npm i --save canvas-nest.js** diff --git a/README.md b/README.md index 65bc49d..18a18b1 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ [![npm](https://img.shields.io/badge/demo-online-brightgreen.svg)](https://git.hust.cc/canvas-nest.js) [![npm](https://img.shields.io/npm/v/canvas-nest.js.svg)](https://www.npmjs.com/package/canvas-nest.js) [![npm](https://img.shields.io/npm/dm/canvas-nest.js.svg)](https://www.npmjs.com/package/canvas-nest.js) +[![gzip](http://img.badgesize.io/https://unpkg.com/canvas-nest.js/dist/canvas-nest.js?compression=gzip)](https://unpkg.com/canvas-nest.js/dist/canvas-nest.js) > **npm i --save canvas-nest.js** From 322e1fa5f4ba8fe73ed720cb9da16fe2167f8076 Mon Sep 17 00:00:00 2001 From: hustcc Date: Wed, 27 Jun 2018 14:12:53 +0800 Subject: [PATCH 12/28] upgrade size-sensor --- dist/canvas-nest.js | 2 +- dist/canvas-nest.umd.js | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/canvas-nest.js b/dist/canvas-nest.js index be476f2..b82ac7d 100644 --- a/dist/canvas-nest.js +++ b/dist/canvas-nest.js @@ -1 +1 @@ -!function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),s=0;sn||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=m+1;u=a.max/2&&(r.x-=.03*c,r.y-=.03*d),l=(a.max-h)/a.max,t.beginPath(),t.lineWidth=l/2,t.strokeStyle="rgba("+e.c.color+","+(l+.2)+")",t.moveTo(r.x,r.y),t.lineTo(a.x,a.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){u(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,d(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}())(document.body,(f=document.getElementsByTagName("script"),{zIndex:(y=f[f.length-1]).getAttribute("zIndex"),opacity:y.getAttribute("opacity"),color:y.getAttribute("color"),count:Number(y.getAttribute("count"))||99}))}(); +!function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=m+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-v)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){u(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,d(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}())(document.body,(f=document.getElementsByTagName("script"),{zIndex:(y=f[f.length-1]).getAttribute("zIndex"),opacity:y.getAttribute("opacity"),color:y.getAttribute("color"),count:Number(y.getAttribute("count"))||99}))}(); diff --git a/dist/canvas-nest.umd.js b/dist/canvas-nest.umd.js index 6f66dcc..790e2d6 100644 --- a/dist/canvas-nest.umd.js +++ b/dist/canvas-nest.umd.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CanvasNest=t()}(this,function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),s=0;sn||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=h+1;u=a.max/2&&(r.x-=.03*c,r.y-=.03*d),l=(a.max-f)/a.max,t.beginPath(),t.lineWidth=l/2,t.strokeStyle="rgba("+e.c.color+","+(l+.2)+")",t.moveTo(r.x,r.y),t.lineTo(a.x,a.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){u(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,d(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}()}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CanvasNest=t()}(this,function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=v+1;u=s.max/2&&(r.x-=.03*c,r.y-=.03*d),l=(s.max-f)/s.max,t.beginPath(),t.lineWidth=l/2,t.strokeStyle="rgba("+e.c.color+","+(l+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){u(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,d(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}()}); diff --git a/package.json b/package.json index d8ffdbe..b829468 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "build": "npm run build:umd && npm run build:iife && npm run build:lib && npm run test" }, "dependencies": { - "size-sensor": "^0.0.4" + "size-sensor": "^0.1.0" }, "size-limit": [ { From 645e88457c7131db466b7dd2502d59160451d9ed Mon Sep 17 00:00:00 2001 From: hustcc Date: Mon, 9 Jul 2018 20:14:33 +0800 Subject: [PATCH 13/28] update size-sensor for perf --- dist/canvas-nest.js | 2 +- dist/canvas-nest.umd.js | 2 +- package.json | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/canvas-nest.js b/dist/canvas-nest.js index b82ac7d..c05b079 100644 --- a/dist/canvas-nest.js +++ b/dist/canvas-nest.js @@ -1 +1 @@ -!function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=m+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-v)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){u(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,d(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}())(document.body,(f=document.getElementsByTagName("script"),{zIndex:(y=f[f.length-1]).getAttribute("zIndex"),opacity:y.getAttribute("opacity"),color:y.getAttribute("color"),count:Number(y.getAttribute("count"))||99}))}(); +!function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=f+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-v)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){l(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,f(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}())(document.body,(p=document.getElementsByTagName("script"),{zIndex:(w=p[p.length-1]).getAttribute("zIndex"),opacity:w.getAttribute("opacity"),color:w.getAttribute("color"),count:Number(w.getAttribute("count"))||99}))}(); diff --git a/dist/canvas-nest.umd.js b/dist/canvas-nest.umd.js index 790e2d6..ddda0b1 100644 --- a/dist/canvas-nest.umd.js +++ b/dist/canvas-nest.umd.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CanvasNest=t()}(this,function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=v+1;u=s.max/2&&(r.x-=.03*c,r.y-=.03*d),l=(s.max-f)/s.max,t.beginPath(),t.lineWidth=l/2,t.strokeStyle="rgba("+e.c.color+","+(l+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){u(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,d(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}()}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CanvasNest=t()}(this,function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=v+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-f)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){l(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,v(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}()}); diff --git a/package.json b/package.json index b829468..cd6cc7e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "canvas-nest.js", "officialName": "canvas-nest.js", - "version": "2.0.1", + "version": "2.0.2", "main": "lib/index.js", "summary": "A nest backgroud of website draw on canvas use javascript, do not depends on jQuery.", "description": "A nest backgroud of website draw on canvas use javascript, do not depends on jQuery.", @@ -14,7 +14,7 @@ "build": "npm run build:umd && npm run build:iife && npm run build:lib && npm run test" }, "dependencies": { - "size-sensor": "^0.1.0" + "size-sensor": "^0.2.0" }, "size-limit": [ { From a49285ae2ae502ea758dd74cc81802f92a760f21 Mon Sep 17 00:00:00 2001 From: ZYSzys <17367077526@163.com> Date: Sat, 25 Aug 2018 10:52:16 +0800 Subject: [PATCH 14/28] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=BB=9A=E5=8A=A8?= =?UTF-8?q?=E6=9D=A1=E4=BA=A7=E7=94=9F=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/canvas-nest.js | 2 +- dist/canvas-nest.umd.js | 2 +- lib/CanvasNest.js | 4 ++-- src/CanvasNest.js | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dist/canvas-nest.js b/dist/canvas-nest.js index c05b079..f7a4008 100644 --- a/dist/canvas-nest.js +++ b/dist/canvas-nest.js @@ -1 +1 @@ -!function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=f+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-v)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){l(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,f(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}())(document.body,(p=document.getElementsByTagName("script"),{zIndex:(w=p[p.length-1]).getAttribute("zIndex"),opacity:w.getAttribute("opacity"),color:w.getAttribute("color"),count:Number(w.getAttribute("count"))||99}))}(); +!function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=f+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-v)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){l(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,f(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}())(document.body,(p=document.getElementsByTagName("script"),{zIndex:(w=p[p.length-1]).getAttribute("zIndex"),opacity:w.getAttribute("opacity"),color:w.getAttribute("color"),count:Number(w.getAttribute("count"))||99}))}(); diff --git a/dist/canvas-nest.umd.js b/dist/canvas-nest.umd.js index ddda0b1..22e0684 100644 --- a/dist/canvas-nest.umd.js +++ b/dist/canvas-nest.umd.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CanvasNest=t()}(this,function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=v+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-f)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){l(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,v(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}()}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CanvasNest=t()}(this,function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=v+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-f)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){l(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,v(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}()}); diff --git a/lib/CanvasNest.js b/lib/CanvasNest.js index f64b811..4d94890 100644 --- a/lib/CanvasNest.js +++ b/lib/CanvasNest.js @@ -71,8 +71,8 @@ var CanvasNest = function () { this.onmousemove = window.onmousemove; window.onmousemove = function (e) { - _this2.current.x = e.clientX - _this2.el.offsetLeft; - _this2.current.y = e.clientY - _this2.el.offsetTop; + _this2.current.x = e.clientX - _this2.el.offsetLeft + document.scrollingElement.scrollLeft; // 当存在横向滚动条时,x坐标再往右移动滚动条拉动的距离 + _this2.current.y = e.clientY - _this2.el.offsetTop + document.scrollingElement.scrollTop; // 当存在纵向滚动条时,y坐标再往下移动滚动条拉动的距离 _this2.onmousemove && _this2.onmousemove(e); }; diff --git a/src/CanvasNest.js b/src/CanvasNest.js index b501630..4e905fb 100644 --- a/src/CanvasNest.js +++ b/src/CanvasNest.js @@ -42,8 +42,8 @@ export default class CanvasNest { this.onmousemove = window.onmousemove; window.onmousemove = e => { - this.current.x = e.clientX - this.el.offsetLeft; - this.current.y = e.clientY - this.el.offsetTop; + this.current.x = e.clientX - this.el.offsetLeft + document.scrollingElement.scrollLeft; // 当存在横向滚动条时,x坐标再往右移动滚动条拉动的距离 + this.current.y = e.clientY - this.el.offsetTop + document.scrollingElement.scrollTop; // 当存在纵向滚动条时,y坐标再往下移动滚动条拉动的距离 this.onmousemove && this.onmousemove(e); }; From aa4104c27b677ce67c6c3e5c5c02f70c617a48e5 Mon Sep 17 00:00:00 2001 From: hustcc Date: Sat, 25 Aug 2018 12:19:57 +0800 Subject: [PATCH 15/28] v2.0.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cd6cc7e..0aad906 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "canvas-nest.js", "officialName": "canvas-nest.js", - "version": "2.0.2", + "version": "2.0.3", "main": "lib/index.js", "summary": "A nest backgroud of website draw on canvas use javascript, do not depends on jQuery.", "description": "A nest backgroud of website draw on canvas use javascript, do not depends on jQuery.", From eee6196790e636481dd7c92aba9f88dc3523af1f Mon Sep 17 00:00:00 2001 From: c376W <40804244+c376W@users.noreply.github.com> Date: Mon, 27 Aug 2018 00:41:30 -0700 Subject: [PATCH 16/28] Revisions in README.md English version (#38) --- README.md | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 18a18b1..3060489 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # canvas-nest.js -> A nest backgroud of website draw on canvas. [中文 Readme 帮助文档](README-zh.md). +> This background effect for web pages is drawn using tools based on html5 canvas. The final result is pretty awesome! [中文 Readme 帮助文档](README-zh.md). [![npm](https://img.shields.io/badge/demo-online-brightgreen.svg)](https://git.hust.cc/canvas-nest.js) [![npm](https://img.shields.io/npm/v/canvas-nest.js.svg)](https://www.npmjs.com/package/canvas-nest.js) @@ -12,10 +12,11 @@ ## Feature - - No need jQuery. - - Light, only 2 Kb. - - Easy to use, even you are not a web developer. - - Modular & area render. + - It does not depend on jQuery and original javascrpit is used. + - Small size, only 2 Kb. + - Easy to implement, simple configuration. + - You do not have to be a web developer to use it. + - Modularized with area rendering. ## Usage @@ -28,7 +29,7 @@ Insert the code below `between and `. ``` -Suggest before the tag ``, like below: +Strongly suggest to insert before the tag ``, as the following: ```html @@ -46,13 +47,13 @@ Suggest before the tag ``, like below: Then ok! `Please do not add the code in the `. - - Module usage (Area render) + - Modular usage (Area render) > npm i --save canvas-nest.js -Or import the `umd` package use `script` tag. +You could import `umd` packages with `script` tag or with modules. -There is only one API, use it like: +There is only one API, use it as below: ```js import CanvasNest from 'canvas-nest.js'; @@ -62,7 +63,7 @@ const config = { count: 88, }; -// render nest on element with config. +// Using config rendering effect at 'element'. const cn = new CanvasNest(element, config); // destroy @@ -70,12 +71,12 @@ cn.destroy(); ``` -## Config +## Configurations and settings - - **`color`**: the canvas line color, default: `'0,0,0'`; the color is (R,G,B). + - **`color`**: color of lines, default: `'0,0,0'`; RGB values: (R,G,B).(note: use ',' to separate.) - **`opacity`**: the opacity of line (0~1), default: `0.5`. - **`count`**: the number of lines, default: `99`. - - **`zIndex`**: the index of z space, default: `-1`. + - **`zIndex`**: z-index property of the background, default: `-1`. Example: @@ -83,7 +84,9 @@ Example: ``` -Or +These property configuration settings are in the js script tag as its property values. If these settings are not customized, default values are available as well. + +With modules,use config values as below: ```js { @@ -103,7 +106,7 @@ Or ## Used by - - [A Tool](https://atools.vip/): Tools for human. + - [A Tool](https://atools.vip/): a convenient tool box. From 533841a5536e05fcc8e9fd48272f41d6801f66c5 Mon Sep 17 00:00:00 2001 From: ZYSzys Date: Mon, 27 Aug 2018 20:46:29 +0800 Subject: [PATCH 17/28] chore: tweak docs (#44) * chore: tweak docs * screenshot * fix links --- README-zh.md | 28 ++++++++++++++++++---------- README.md | 31 ++++++++++++++++++++----------- screenshot.png | Bin 36402 -> 132275 bytes 3 files changed, 38 insertions(+), 21 deletions(-) diff --git a/README-zh.md b/README-zh.md index 273c3f7..fa5b721 100644 --- a/README-zh.md +++ b/README-zh.md @@ -1,14 +1,22 @@ # canvas-nest.js -> 一个基于 html5 canvas 绘制的网页背景效果,非常赞! +> 一个基于 html5 canvas 绘制的网页背景效果。 [![npm](https://img.shields.io/badge/demo-online-brightgreen.svg)](https://git.hust.cc/canvas-nest.js) [![npm](https://img.shields.io/npm/v/canvas-nest.js.svg)](https://www.npmjs.com/package/canvas-nest.js) [![npm](https://img.shields.io/npm/dm/canvas-nest.js.svg)](https://www.npmjs.com/package/canvas-nest.js) [![gzip](http://img.badgesize.io/https://unpkg.com/canvas-nest.js/dist/canvas-nest.js?compression=gzip)](https://unpkg.com/canvas-nest.js/dist/canvas-nest.js) -> **npm i --save canvas-nest.js** +![screenshot](/screenshot.png) +## 安装 +```sh +# 使用 npm +npm install --save canvas-nest.js + +# 或者使用 yarn +yarn add canvas-nest.js +``` ## 特性 @@ -48,9 +56,7 @@ - 模块化区域绘制(定制开发) -> npm i --save canvas-nest.js - -然后可以使用 script 方式引入 umd 包,当然也可使用模块化方式 import。 +完成安装好,可以使用模块化方式 import。 并且只有一个 API,使用如下: @@ -70,7 +76,7 @@ cn.destroy(); ``` -## 配置和配置项 +## 配置 - **`color`**: 线条颜色, 默认: `'0,0,0'` ;三个数字分别为(R,G,B),注意用,分割 - **`opacity`**: 线条透明度(0~1), 默认: `0.5` @@ -80,13 +86,13 @@ cn.destroy(); Example: + - 快捷使用 + ```html ``` -这些属性配置在引用 js 的 script 标签中,作为它的一个属性值。所有的配置项都有默认值,如果你不知道怎么设置,可以先不设置这些配置项,就使用默认值看看效果也可以的。 - -或者模块化调用的时候,config 参数写成: + - 模块化区域绘制(定制开发) ```js { @@ -97,6 +103,8 @@ Example: }; ``` +**注意: 所有的配置项都有默认值,如果你不知道怎么设置,可以先不设置这些配置项,就使用默认值看看效果也可以的。** + ## 相关项目 @@ -106,7 +114,7 @@ Example: ## 使用项目 - - [A Tool](https://atools.vip/): 一个好用的工具集合. + - [A Tool](https://atool.vip): 一个好用的工具集合. ## License diff --git a/README.md b/README.md index 3060489..34045e2 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,13 @@ # canvas-nest.js -> This background effect for web pages is drawn using tools based on html5 canvas. The final result is pretty awesome! [中文 Readme 帮助文档](README-zh.md). +> A nest backgroud of website draw on canvas. [中文 Readme 帮助文档](README-zh.md). [![npm](https://img.shields.io/badge/demo-online-brightgreen.svg)](https://git.hust.cc/canvas-nest.js) [![npm](https://img.shields.io/npm/v/canvas-nest.js.svg)](https://www.npmjs.com/package/canvas-nest.js) [![npm](https://img.shields.io/npm/dm/canvas-nest.js.svg)](https://www.npmjs.com/package/canvas-nest.js) [![gzip](http://img.badgesize.io/https://unpkg.com/canvas-nest.js/dist/canvas-nest.js?compression=gzip)](https://unpkg.com/canvas-nest.js/dist/canvas-nest.js) -> **npm i --save canvas-nest.js** - +![screenshot](/screenshot.png) ## Feature @@ -19,6 +18,16 @@ - Modularized with area rendering. +## Install +```sh +# use npm +npm install --save canvas-nest.js + +# or use yarn +yarn add canvas-nest.js +``` + + ## Usage - Script tag @@ -49,9 +58,7 @@ Then ok! `Please do not add the code in the `. - Modular usage (Area render) -> npm i --save canvas-nest.js - -You could import `umd` packages with `script` tag or with modules. +After installation, you can import this as module. There is only one API, use it as below: @@ -71,7 +78,7 @@ cn.destroy(); ``` -## Configurations and settings +## Configuration - **`color`**: color of lines, default: `'0,0,0'`; RGB values: (R,G,B).(note: use ',' to separate.) - **`opacity`**: the opacity of line (0~1), default: `0.5`. @@ -80,13 +87,13 @@ cn.destroy(); Example: + - Script tag + ```html ``` -These property configuration settings are in the js script tag as its property values. If these settings are not customized, default values are available as well. - -With modules,use config values as below: + - Modular usage (Area render) ```js { @@ -97,6 +104,8 @@ With modules,use config values as below: }; ``` +**Note: If the Configuration isn't customized, default values are available as well.** + ## Related projects @@ -106,7 +115,7 @@ With modules,use config values as below: ## Used by - - [A Tool](https://atools.vip/): a convenient tool box. + - [A Tool](https://atool.vip): a convenient tool box. diff --git a/screenshot.png b/screenshot.png index f2263a9d65105a63e49348443dd8229c2258ed60..e558f6184798fa5b440416be60689cb645b8dff4 100644 GIT binary patch literal 132275 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 literal 36402 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 Date: Thu, 11 Oct 2018 12:26:52 +0800 Subject: [PATCH 18/28] add react in README --- README-zh.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README-zh.md b/README-zh.md index fa5b721..51867a9 100644 --- a/README-zh.md +++ b/README-zh.md @@ -110,7 +110,7 @@ Example: - [canvas-nest-for-wp](https://github.com/aTool-org/canvas-nest-for-wp): WP 插件,在插件市场搜索 `canvas-nest` 即可安装。 - [vue-canvas-nest](https://github.com/ZYSzys/vue-canvas-nest): VUE 组件包装。 - + - [react-canvas-nest](https://github.com/flyerH/react-canvas-nest): React 组件包装。 ## 使用项目 diff --git a/README.md b/README.md index 34045e2..82beb0d 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ Example: - [canvas-nest-for-wp](https://github.com/aTool-org/canvas-nest-for-wp): a wordpress plugin, search `canvas-nest` in wordpress store. - [vue-canvas-nest](https://github.com/ZYSzys/vue-canvas-nest): vue component wrapper. - + - [react-canvas-nest](https://github.com/flyerH/react-canvas-nest): react component wrapper. ## Used by From 5903412b978c5079eda2e48ad9e428743dc3cbdd Mon Sep 17 00:00:00 2001 From: manasxx <916817706@qq.com> Date: Mon, 15 Oct 2018 08:57:38 +0800 Subject: [PATCH 19/28] update readme, for vscode plugin --- README-zh.md | 1 + README.md | 1 + 2 files changed, 2 insertions(+) diff --git a/README-zh.md b/README-zh.md index 51867a9..8b0a7f0 100644 --- a/README-zh.md +++ b/README-zh.md @@ -111,6 +111,7 @@ Example: - [canvas-nest-for-wp](https://github.com/aTool-org/canvas-nest-for-wp): WP 插件,在插件市场搜索 `canvas-nest` 即可安装。 - [vue-canvas-nest](https://github.com/ZYSzys/vue-canvas-nest): VUE 组件包装。 - [react-canvas-nest](https://github.com/flyerH/react-canvas-nest): React 组件包装。 + - [canvas-nest-for-vscode](https://github.com/AShujiao/vscode-nest): vscode 扩展, 在vscode扩展市场中搜索`nest` 即可安装。 ## 使用项目 diff --git a/README.md b/README.md index 82beb0d..3cc6cd5 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,7 @@ Example: - [canvas-nest-for-wp](https://github.com/aTool-org/canvas-nest-for-wp): a wordpress plugin, search `canvas-nest` in wordpress store. - [vue-canvas-nest](https://github.com/ZYSzys/vue-canvas-nest): vue component wrapper. - [react-canvas-nest](https://github.com/flyerH/react-canvas-nest): react component wrapper. + - [canvas-nest-for-vscode](https://github.com/AShujiao/vscode-nest): a vscode extensions, search `nest` in vscode extensions. ## Used by From 93924c7e71a32bacbeaa8f381ba172aea5c4e4be Mon Sep 17 00:00:00 2001 From: hustcc Date: Sat, 17 Nov 2018 22:07:14 +0800 Subject: [PATCH 20/28] add babel-plugin-version --- .babelrc | 6 ++++-- dist/canvas-nest.js | 2 +- dist/canvas-nest.umd.js | 2 +- lib/CanvasNest.js | 1 + package.json | 1 + src/CanvasNest.js | 3 +++ 6 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.babelrc b/.babelrc index 9b21973..974597e 100644 --- a/.babelrc +++ b/.babelrc @@ -11,7 +11,8 @@ ], "plugins": [ "transform-class-properties", - "transform-object-rest-spread" + "transform-object-rest-spread", + "version" ] }, "babel": { @@ -19,7 +20,8 @@ "plugins": [ "transform-class-properties", "add-module-exports", - "transform-object-rest-spread" + "transform-object-rest-spread", + "version" ] } } diff --git a/dist/canvas-nest.js b/dist/canvas-nest.js index f7a4008..2cdd8e7 100644 --- a/dist/canvas-nest.js +++ b/dist/canvas-nest.js @@ -1 +1 @@ -!function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=f+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-v)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){l(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,f(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}())(document.body,(p=document.getElementsByTagName("script"),{zIndex:(w=p[p.length-1]).getAttribute("zIndex"),opacity:w.getAttribute("opacity"),color:w.getAttribute("color"),count:Number(w.getAttribute("count"))||99}))}(); +!function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=f+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-v)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){l(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,f(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}();p.version="2.0.3";var w,b;new p(document.body,(w=document.getElementsByTagName("script"),{zIndex:(b=w[w.length-1]).getAttribute("zIndex"),opacity:b.getAttribute("opacity"),color:b.getAttribute("color"),count:Number(b.getAttribute("count"))||99}))}(); diff --git a/dist/canvas-nest.umd.js b/dist/canvas-nest.umd.js index 22e0684..603cc62 100644 --- a/dist/canvas-nest.umd.js +++ b/dist/canvas-nest.umd.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CanvasNest=t()}(this,function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=v+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-f)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){l(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,v(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}()}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CanvasNest=t()}(this,function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=v+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-f)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){l(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,v(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}();return y.version="2.0.3",y}); diff --git a/lib/CanvasNest.js b/lib/CanvasNest.js index 4d94890..0f0a00e 100644 --- a/lib/CanvasNest.js +++ b/lib/CanvasNest.js @@ -171,5 +171,6 @@ var CanvasNest = function () { return CanvasNest; }(); +CanvasNest.version = '2.0.3'; exports.default = CanvasNest; module.exports = exports['default']; \ No newline at end of file diff --git a/package.json b/package.json index 0aad906..fdb1443 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-object-rest-spread": "^6.26.0", + "babel-plugin-version": "^0.2.1", "babel-preset-env": "^1.6.1", "cross-env": "^5.1.3", "rimraf": "^2.6.2", diff --git a/src/CanvasNest.js b/src/CanvasNest.js index 4e905fb..81044f4 100644 --- a/src/CanvasNest.js +++ b/src/CanvasNest.js @@ -7,6 +7,9 @@ import { bind, clear } from 'size-sensor'; import { requestAnimationFrame, cancelAnimationFrame, range, canvasStyle } from './utils'; export default class CanvasNest { + + static version = __VERSION__; + constructor(el, config) { this.el = el; From 5138eb7113c8588d9f93debda9472c08601a91bc Mon Sep 17 00:00:00 2001 From: fjc0k Date: Sun, 2 Dec 2018 06:13:27 +0800 Subject: [PATCH 21/28] add pointColor option --- README-zh.md | 1 + README.md | 1 + dist/canvas-nest.js | 2 +- dist/canvas-nest.umd.js | 2 +- index.html | 2 +- lib/CanvasNest.js | 10 +- lib/iife.js | 1 + src/CanvasNest.js | 12 +- src/iife.js | 1 + yarn.lock | 4838 +++++++++++++++++++++++++++++++++++++++ 10 files changed, 4858 insertions(+), 12 deletions(-) create mode 100644 yarn.lock diff --git a/README-zh.md b/README-zh.md index 8b0a7f0..b0ff203 100644 --- a/README-zh.md +++ b/README-zh.md @@ -79,6 +79,7 @@ cn.destroy(); ## 配置 - **`color`**: 线条颜色, 默认: `'0,0,0'` ;三个数字分别为(R,G,B),注意用,分割 + - **`pointColor`**: 交点颜色, 默认: `'0,0,0'` ;三个数字分别为(R,G,B),注意用,分割 - **`opacity`**: 线条透明度(0~1), 默认: `0.5` - **`count`**: 线条的总数量, 默认: `150` - **`zIndex`**: 背景的z-index属性,css属性用于控制所在层的位置, 默认: `-1` diff --git a/README.md b/README.md index 3cc6cd5..c8daf4d 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,7 @@ cn.destroy(); ## Configuration - **`color`**: color of lines, default: `'0,0,0'`; RGB values: (R,G,B).(note: use ',' to separate.) + - **`pointColor`**: color of points, default: `'0,0,0'`; RGB values: (R,G,B).(note: use ',' to separate.) - **`opacity`**: the opacity of line (0~1), default: `0.5`. - **`count`**: the number of lines, default: `99`. - **`zIndex`**: z-index property of the background, default: `-1`. diff --git a/dist/canvas-nest.js b/dist/canvas-nest.js index 2cdd8e7..e136cf6 100644 --- a/dist/canvas-nest.js +++ b/dist/canvas-nest.js @@ -1 +1 @@ -!function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=f+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-v)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){l(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,f(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}();p.version="2.0.3";var w,b;new p(document.body,(w=document.getElementsByTagName("script"),{zIndex:(b=w[w.length-1]).getAttribute("zIndex"),opacity:b.getAttribute("opacity"),color:b.getAttribute("color"),count:Number(b.getAttribute("count"))||99}))}(); +!function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillStyle="rgba("+e.c.pointColor+")",t.fillRect(r.x-.5,r.y-.5,1,1),u=f+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-v)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){l(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,f(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}();y.version="2.0.3";var w,b;new y(document.body,(w=document.getElementsByTagName("script"),{zIndex:(b=w[w.length-1]).getAttribute("zIndex"),opacity:b.getAttribute("opacity"),color:b.getAttribute("color"),pointColor:b.getAttribute("pointColor"),count:Number(b.getAttribute("count"))||99}))}(); diff --git a/dist/canvas-nest.umd.js b/dist/canvas-nest.umd.js index 603cc62..3ddb1e8 100644 --- a/dist/canvas-nest.umd.js +++ b/dist/canvas-nest.umd.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CanvasNest=t()}(this,function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillRect(r.x-.5,r.y-.5,1,1),u=v+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-f)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){l(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,v(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}();return y.version="2.0.3",y}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CanvasNest=t()}(this,function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=1;t.default=function(){return""+n++},e.exports=t.default});e(n);var o=t(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:30,n=null;return function(){for(var o=this,i=arguments.length,r=Array(i),a=0;an||r.x<0?-1:1,r.ya*=r.y>o||r.y<0?-1:1,t.fillStyle="rgba("+e.c.pointColor+")",t.fillRect(r.x-.5,r.y-.5,1,1),u=v+1;u=s.max/2&&(r.x-=.03*l,r.y-=.03*d),c=(s.max-f)/s.max,t.beginPath(),t.lineWidth=c/2,t.strokeStyle="rgba("+e.c.color+","+(c+.2)+")",t.moveTo(r.x,r.y),t.lineTo(s.x,s.y),t.stroke()))}),this.requestFrame(this.drawCanvas)}},{key:"destroy",value:function(){l(this.el),window.onmousemove=this.onmousemove,window.onmouseout=this.onmouseout,v(this.tid),this.canvas.parentNode.removeChild(this.canvas)}}]),e}();return y.version="2.0.3",y}); diff --git a/index.html b/index.html index 1dcf2cc..348c560 100644 --- a/index.html +++ b/index.html @@ -36,7 +36,7 @@
- +