├── circular-dependency ├── esmodule │ ├── README.md │ ├── demo1 │ │ ├── a.mjs │ │ └── b.mjs │ └── demo2 │ │ ├── a.mjs │ │ └── b.mjs ├── commonjs │ ├── README.md │ ├── main.js │ ├── a.js │ └── b.js ├── requirejs │ ├── app.js │ ├── index.html │ ├── a.js │ ├── b.js │ ├── package.json │ └── package-lock.json └── seajs │ ├── index.html │ ├── app.js │ ├── a.js │ ├── b.js │ ├── package.json │ ├── package-lock.json │ └── sea.js ├── swipe ├── README.md └── index.html ├── .gitignore ├── let-const ├── index.js ├── dist.js ├── build.js └── package.json ├── css-skills ├── images │ └── captain.jpeg ├── font-size-0.html ├── first-child.html ├── color.html ├── callout.html ├── ellipsis.html ├── scale.html ├── object-fit.html ├── pointer-events.html └── margin-merge.html ├── image-handler ├── images │ ├── error.jpg │ ├── loading.gif │ ├── success.jpg │ └── success_2.jpg ├── tpl.html ├── jquery.html ├── vue.1.html └── vue.2.html ├── webpack-cjs-esm ├── index.html ├── cjs │ ├── a.js │ └── app.js ├── esm │ ├── a.js │ └── app.js ├── webpack.config.js ├── package.json ├── bundle.cjs.js └── bundle.esm.js ├── tail-calls ├── error │ ├── normal.js │ └── tail-calls.js ├── call-stack │ ├── normal.js │ └── tail-calls.js ├── get-stack-depth.js ├── fibonacci │ ├── recursion.js │ └── tail-calls.js ├── factorial │ ├── recursion.js │ ├── trampoline.js │ └── tail-calls.js └── index.html ├── exports-cjs-esm ├── esm │ ├── demo1 │ │ ├── a.mjs │ │ └── b.mjs │ └── demo2 │ │ ├── b.mjs │ │ └── a.mjs └── cjs │ ├── a.js │ └── b.js ├── reverse-polish-notation ├── float.js └── index.js ├── svn-batch-operation └── svn-deploy.sh ├── css-triangle ├── border.html └── box.html ├── momentum-scrolling ├── list.html └── index.html ├── pull-damping ├── test.js └── index.html ├── README.md └── css-stacking-context └── index.html /circular-dependency/esmodule/README.md: -------------------------------------------------------------------------------- 1 | node@^8 -------------------------------------------------------------------------------- /swipe/README.md: -------------------------------------------------------------------------------- 1 | ### TODOLIST 2 | 3 | 1. 支持页码及点击页码展示子项; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/node_modules 2 | **/.DS_Store 3 | **/package-lock.json -------------------------------------------------------------------------------- /let-const/index.js: -------------------------------------------------------------------------------- 1 | for (let i = 0; i < 5; i++) { 2 | var c = function() { console.log(i)}; 3 | } -------------------------------------------------------------------------------- /circular-dependency/commonjs/README.md: -------------------------------------------------------------------------------- 1 | Source code from https://nodejs.org/api/modules.html#modules_cycles -------------------------------------------------------------------------------- /css-skills/images/captain.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaredCen/blog/HEAD/css-skills/images/captain.jpeg -------------------------------------------------------------------------------- /image-handler/images/error.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaredCen/blog/HEAD/image-handler/images/error.jpg -------------------------------------------------------------------------------- /image-handler/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaredCen/blog/HEAD/image-handler/images/loading.gif -------------------------------------------------------------------------------- /image-handler/images/success.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaredCen/blog/HEAD/image-handler/images/success.jpg -------------------------------------------------------------------------------- /image-handler/images/success_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaredCen/blog/HEAD/image-handler/images/success_2.jpg -------------------------------------------------------------------------------- /webpack-cjs-esm/index.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | -------------------------------------------------------------------------------- /tail-calls/error/normal.js: -------------------------------------------------------------------------------- 1 | function fa() { 2 | throw new Error(); 3 | } 4 | 5 | function fb() { 6 | return fa(); 7 | } 8 | 9 | fb(); -------------------------------------------------------------------------------- /circular-dependency/requirejs/app.js: -------------------------------------------------------------------------------- 1 | define(['./a', './b'], function(a, b) { 2 | console.log('app starting'); 3 | console.log('in app', a, b); 4 | }); -------------------------------------------------------------------------------- /circular-dependency/requirejs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /exports-cjs-esm/esm/demo1/a.mjs: -------------------------------------------------------------------------------- 1 | import b from './b.mjs'; 2 | 3 | console.log(b.count); 4 | b.add(); 5 | console.log(b.count); 6 | console.log(b.get()); -------------------------------------------------------------------------------- /exports-cjs-esm/cjs/a.js: -------------------------------------------------------------------------------- 1 | const { count, add, get } = require('./b'); 2 | 3 | console.log(count); 4 | add(); 5 | console.log(count); 6 | console.log(get()); -------------------------------------------------------------------------------- /exports-cjs-esm/esm/demo2/b.mjs: -------------------------------------------------------------------------------- 1 | export let count = 1; 2 | export function add() { 3 | count++; 4 | } 5 | export function get() { 6 | return count; 7 | } -------------------------------------------------------------------------------- /exports-cjs-esm/esm/demo2/a.mjs: -------------------------------------------------------------------------------- 1 | import { count, add, get } from './b.mjs'; 2 | 3 | console.log(count); 4 | add(); 5 | console.log(count); 6 | console.log(get()); -------------------------------------------------------------------------------- /tail-calls/error/tail-calls.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | function fa() { 4 | throw new Error(); 5 | } 6 | 7 | function fb() { 8 | return fa(); 9 | } 10 | 11 | fb(); -------------------------------------------------------------------------------- /exports-cjs-esm/cjs/b.js: -------------------------------------------------------------------------------- 1 | let count = 1; 2 | 3 | module.exports = { 4 | count, 5 | add() { 6 | count++; 7 | }, 8 | get() { 9 | return count; 10 | } 11 | }; -------------------------------------------------------------------------------- /exports-cjs-esm/esm/demo1/b.mjs: -------------------------------------------------------------------------------- 1 | let count = 1; 2 | export default { 3 | count, 4 | add() { 5 | count++; 6 | }, 7 | get() { 8 | return count; 9 | } 10 | } -------------------------------------------------------------------------------- /tail-calls/call-stack/normal.js: -------------------------------------------------------------------------------- 1 | function fa(x) { 2 | return x; 3 | } 4 | 5 | function fb(x) { 6 | const b = 1; 7 | return fa(x) + b; 8 | } 9 | 10 | console.log(fb(5)); -------------------------------------------------------------------------------- /webpack-cjs-esm/cjs/a.js: -------------------------------------------------------------------------------- 1 | console.log('a starting'); 2 | const app = require('./app'); 3 | console.log('in a, app.done =', app.done); 4 | exports.done = true; 5 | console.log('a done'); -------------------------------------------------------------------------------- /webpack-cjs-esm/cjs/app.js: -------------------------------------------------------------------------------- 1 | console.log('app starting'); 2 | const a = require('./a'); 3 | console.log('in app, a.done =', a.done); 4 | exports.done = true; 5 | console.log('app done'); 6 | -------------------------------------------------------------------------------- /circular-dependency/seajs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /tail-calls/call-stack/tail-calls.js: -------------------------------------------------------------------------------- 1 | function fa(x, y) { 2 | return x + y; 3 | } 4 | 5 | function fb(x) { 6 | const b = 1; 7 | return fa(x, b); 8 | } 9 | 10 | console.log(fb(5)); -------------------------------------------------------------------------------- /circular-dependency/seajs/app.js: -------------------------------------------------------------------------------- 1 | define(function(require) { 2 | console.log('app starting'); 3 | var a = require('./a'); 4 | var b = require('./b'); 5 | console.log('in app', a, b); 6 | }); -------------------------------------------------------------------------------- /reverse-polish-notation/float.js: -------------------------------------------------------------------------------- 1 | console.log('0.1 + 0.2 =', 0.1 + 0.2); 2 | console.log('1 - 0.9 =', 1 - 0.9); 3 | console.log('19.9 * 100 =', 19.9 * 100); 4 | console.log('0.3 / 0.1 =', 0.3 / 0.1); -------------------------------------------------------------------------------- /tail-calls/get-stack-depth.js: -------------------------------------------------------------------------------- 1 | function getDeep() { 2 | try { 3 | return 1 + getDeep(); 4 | } catch(e) { 5 | return 1; 6 | } 7 | } 8 | 9 | // 12500 10 | console.log(getDeep()); -------------------------------------------------------------------------------- /webpack-cjs-esm/esm/a.js: -------------------------------------------------------------------------------- 1 | console.log('a starting'); 2 | export default { 3 | done: true, 4 | } 5 | import app from './app'; 6 | console.log('in a, app.done =', app.done); 7 | console.log('a done'); -------------------------------------------------------------------------------- /webpack-cjs-esm/esm/app.js: -------------------------------------------------------------------------------- 1 | console.log('app starting'); 2 | export default { 3 | done: true, 4 | } 5 | import a from './a'; 6 | console.log('in app, a.done =', a.done); 7 | console.log('app done'); -------------------------------------------------------------------------------- /circular-dependency/commonjs/main.js: -------------------------------------------------------------------------------- 1 | console.log('main starting'); 2 | const a = require('./a.js'); 3 | const b = require('./b.js'); 4 | console.log('in main, a.done = %j, b.done = %j', a.done, b.done); -------------------------------------------------------------------------------- /circular-dependency/esmodule/demo1/a.mjs: -------------------------------------------------------------------------------- 1 | console.log('a starting'); 2 | export default { 3 | done: true, 4 | } 5 | import b from './b.mjs'; 6 | console.log('in a, b.done = %j', b.done); 7 | console.log('a done'); -------------------------------------------------------------------------------- /circular-dependency/esmodule/demo1/b.mjs: -------------------------------------------------------------------------------- 1 | console.log('b starting'); 2 | export default { 3 | done: true, 4 | } 5 | import a from './a.mjs'; 6 | console.log('in b, a.done = %j', a.done); 7 | console.log('b done'); -------------------------------------------------------------------------------- /circular-dependency/esmodule/demo2/a.mjs: -------------------------------------------------------------------------------- 1 | import b from './b.mjs'; 2 | console.log('a starting'); 3 | console.log(b()); 4 | export default function () { 5 | return 'run func A'; 6 | } 7 | console.log('a done'); -------------------------------------------------------------------------------- /circular-dependency/esmodule/demo2/b.mjs: -------------------------------------------------------------------------------- 1 | import a from './a.mjs'; 2 | console.log('b starting'); 3 | console.log(a()); 4 | export default function () { 5 | return 'run func B'; 6 | } 7 | console.log('b done'); -------------------------------------------------------------------------------- /circular-dependency/commonjs/a.js: -------------------------------------------------------------------------------- 1 | console.log('a starting'); 2 | exports.done = false; 3 | const b = require('./b.js'); 4 | console.log('in a, b.done = %j', b.done); 5 | exports.done = true; 6 | console.log('a done'); -------------------------------------------------------------------------------- /circular-dependency/commonjs/b.js: -------------------------------------------------------------------------------- 1 | console.log('b starting'); 2 | exports.done = false; 3 | const a = require('./a.js'); 4 | console.log('in b, a.done = %j', a.done); 5 | exports.done = true; 6 | console.log('b done'); -------------------------------------------------------------------------------- /let-const/dist.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var _loop = function _loop(i) { 4 | c = function c() { 5 | console.log(i); 6 | }; 7 | }; 8 | 9 | for (var i = 0; i < 5; i++) { 10 | var c; 11 | 12 | _loop(i); 13 | } -------------------------------------------------------------------------------- /circular-dependency/requirejs/a.js: -------------------------------------------------------------------------------- 1 | define(['./b', 'exports'], function(b, exports) { 2 | console.log('a starting'); 3 | exports.done = false; 4 | console.log('in a, b.done =', b.done); 5 | console.log('a done'); 6 | exports.done = true; 7 | }); -------------------------------------------------------------------------------- /circular-dependency/requirejs/b.js: -------------------------------------------------------------------------------- 1 | define(['./a', 'exports'], function(a, exports) { 2 | console.log('b starting'); 3 | exports.done = false; 4 | console.log('in b, a.done =', a.done); 5 | console.log('b done'); 6 | exports.done = true; 7 | }); -------------------------------------------------------------------------------- /circular-dependency/seajs/a.js: -------------------------------------------------------------------------------- 1 | define(function(require, exports) { 2 | console.log('a starting'); 3 | exports.done = false; 4 | var b = require('./b'); 5 | console.log('in a, b.done =', b.done); 6 | console.log('a done'); 7 | exports.done = true; 8 | }); -------------------------------------------------------------------------------- /circular-dependency/seajs/b.js: -------------------------------------------------------------------------------- 1 | define(function(require, exports) { 2 | console.log('b starting'); 3 | exports.done = false; 4 | var a = require('./a'); 5 | console.log('in b, a.done =', a.done); 6 | console.log('b done'); 7 | exports.done = true; 8 | }); -------------------------------------------------------------------------------- /tail-calls/fibonacci/recursion.js: -------------------------------------------------------------------------------- 1 | let count = 0; 2 | function fib(n) { 3 | count++; 4 | return n <= 1 ? 1 : fib(n - 1) + fib(n - 2); 5 | } 6 | const n = 40; 7 | try { 8 | fib(n); 9 | console.log(`[success], n = ${n}, num = ${count}`); 10 | } catch(e) { 11 | console.log(`[stack overflow], num = ${count}`); 12 | } -------------------------------------------------------------------------------- /let-const/build.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | const babel = require('@babel/core'); 4 | 5 | babel.transformFile(path.resolve(__dirname, './index.js'), {}, (err, result) => { 6 | if (!err) fs.writeFile('dist.js', result.code, (err) => { 7 | if (!err) console.log(`编译完成:dist.js`); 8 | }); 9 | }); -------------------------------------------------------------------------------- /tail-calls/factorial/recursion.js: -------------------------------------------------------------------------------- 1 | let count = 0; 2 | function factorial(n) { 3 | count++; 4 | return n === 1 ? 1 : n * factorial(n - 1); 5 | } 6 | const n = 100000; 7 | try { 8 | factorial(n); 9 | console.log(`[success], n = ${n}, num = ${count}`); 10 | } catch(e) { 11 | console.log(`[stack overflow], num = ${count}`); 12 | } -------------------------------------------------------------------------------- /css-skills/font-size-0.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 |
12 |
13 | 这里没有做任何处理
17 |这里设置了 border,但不指定 border-color
18 |这里设置了 outline,但不指定 outline-color
19 |这里设置了 text-decoration,但不指定 text-decoration-color
20 |这里设置了 box-shadow,但不指定颜色
21 |这里设置了 text-shadow,但不指定颜色
22 |这里没有做任何处理
16 | 17 |这里设置了 -webkit-user-select: none;
18 |这里设置了 user-select: none;
19 | 24 |这里拦截了 touchstart 事件
25 | 35 | 36 | -------------------------------------------------------------------------------- /image-handler/tpl.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 28 | 29 | 30 | 31 | 32 | 41 | 42 | -------------------------------------------------------------------------------- /pull-damping/test.js: -------------------------------------------------------------------------------- 1 | function linear(x, max) { 2 | const breakPoints = [ 3 | 0, 4 | max, 5 | max * 2, 6 | max * 3, 7 | max * 5, 8 | max * 12, 9 | ]; 10 | const factors = [ 11 | 0.18, 12 | 0.14, 13 | 0.1, 14 | 0.05, 15 | 0.025, 16 | 0.005, 17 | ]; 18 | 19 | let y = Math.abs(x); 20 | for (let i = breakPoints.length; i > 0; i--) { 21 | if (y > breakPoints[i - 1]) { 22 | y = (y - breakPoints[i - 1]) * factors[i - 1]; 23 | for (let j = i - 1; j > 0; j--) { 24 | y += (breakPoints[j] - breakPoints[j - 1]) * factors[j - 1]; 25 | } 26 | break; 27 | } 28 | } 29 | return Math.round(x < 0 ? -y : y); 30 | } 31 | 32 | function pow(x, max) { 33 | let y = Math.abs(x); 34 | y = 0.12 * max * Math.pow(y, 1/5); 35 | return Math.round(x < 0 ? -y : y); 36 | } 37 | 38 | function log(x, max) { 39 | let y = Math.abs(x); 40 | y = 0.08 * max * Math.log(y + 1); 41 | return Math.round(x < 0 ? -y : y); 42 | } 43 | 44 | function curve(x, max) { 45 | let y = Math.abs(x); 46 | y = 0.82231 * max / (1 + 4338.47 / Math.pow(y, 1.14791)); 47 | return Math.round(x < 0 ? -y : y); 48 | } 49 | 50 | console.time('linear'); 51 | linear(6000, 500); 52 | console.timeEnd('linear'); 53 | console.time('pow'); 54 | pow(6000, 500); 55 | console.timeEnd('pow'); 56 | console.time('log'); 57 | log(6000, 500); 58 | console.timeEnd('log'); 59 | console.time('curve'); 60 | curve(6000, 500); 61 | console.timeEnd('curve'); -------------------------------------------------------------------------------- /image-handler/jquery.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | 19 |单行文本字数超出时显示省略号,单行文本字数超出时显示省略号
42 |line-clamp 设置多行文本字数超出时最后一行显示省略号,line-clamp 设置多行文本字数超出时最后一行显示省略号
43 |JS 和 CSS 设置多行文本字数超出时最后一行显示省略号,JS 和 CSS 设置多行文本字数超出时最后一行显示省略号
44 | 53 | 54 | -------------------------------------------------------------------------------- /image-handler/vue.1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | 19 | 20 | 21 | 22 | 27 | 28 | 29 | 30 | 75 | 76 | -------------------------------------------------------------------------------- /css-skills/scale.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 65 | 66 | 67 |使用背景图
27 |使用 img 标签
48 |
51 |
55 |
59 |
63 |
67 |
71 |