2018-11-15 11:39:55来自分类 前端
### 1. 用 Canvas 生成图片 ```javascript const getQrCode = () => { const drp = 2 const width = 290.5 * drp const height = (width * 462) / 290.5 const c = document.getElementById('myCanvas') const ctx = c.getContext('2d') ctx.fillStyle = '#fff' ctx.fillRect(0, 0, width, height) return c.toDataURL('image/jpeg') } ``` ### 2. 将 dataURL 转成 Blob ```javascript const dataURItoBlob = dataURI => { var byteString if (dataURI.split(',')[0].indexOf('base64') >= 0) byteStrin...
2018-09-28 11:49:05来自分类 前端
目录 1. [React 相关](#react) 2. [Vue 相关](#vue) - [Vue 组件库](#vue-components) - [Vue 表单](#vue-form) - [Vue 操作](#vue-handle) - [Vue 图片](#vue-image) - [Vue 通知](#vue-notice) - [Vue 其他](#vue-other) 3. [小程序相关](#weapp) 4. [前端 UI 框架](#ui) 5. [CSS 相关](#css) 6. [单页](#spa) 7. [表单相关](#form) 8. [弹出相关](#dialog) 9. [开发工具](#devtools) 10. [移动端相关](#mobile) 11. [鼠标相关](#mouse) 12. [数据处理](#data) 13. [图片相关](#image) 14. [动画相关](#animation) 15. [项目资料](#information) 16. [其他相关](#other) # react React 相关 ===实例=== https://...
2018-09-14 00:01:26来自分类 前端
`Optional Chaining`是个好东西, 可惜现在还处于`Stage 1`阶段, 虽然 babel 已经实现了该功能, 但是编辑器, eslint 之类还是不支持, 想用还是遥遥无期 `Optional Chaining`的作用, 主要是让开发者告别一堆的`&&`: ```javascript const obj = { abc: { def: { ghi: '123' } } } ``` 上面的对象, 如果想取最后的`123`, 在不确定前面 abc, def 是否为 null, undefined 的情况下, 我们就得这么写: ```javascript const str = obj && obj.abc && obj.abc.def && obj.abc.def.ghi ``` 天长地久的一串, 但是有`Optional Chaining`之后, 你只需要这么写: ```javascript const str = obj?.abc?.def?.ghi ``` 是不是简单了很多... 既...
2017-12-18 15:07:55来自分类 前端
### nvm 使用淘宝镜像 ```bash export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node export NVM_IOJS_ORG_MIRROR=https://npm.taobao.org/mirrors/iojs ``` ### npm 使用淘宝镜像安装包 相关文件: ~/.npmrc ```bash npm config set registry https://registry.npm.taobao.org npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/ npm config set electron_mirror https://npm.taobao.org/mirrors/electron/ npm config set phantomjs_cdnurl https://npm.taobao.org/mirrors/phantomjs/ ``` ### yarn 使用淘宝镜像安装包 相关...
2017-04-08 17:29:12来自分类 前端
用了很久的 atom 了, 对于在 .vue 里不能用 emmet 一直感到很郁闷, 今天在看 emmet-atom 的 issue 时, 无意中发现了解决方法: https://github.com/emmetio/emmet-atom/issues/364 点击`文件 - 用户键盘映射`打开配置文件 在配置文件的最后添加 ``` 'atom-text-editor[data-grammar~="vue"]:not([mini])': 'tab': 'emmet:expand-abbreviation-with-tab' ``` 注意: 如果配置文件中已经有`'atom-text-editor[data-grammar~="vue"]:not([mini])':`的其他配置, 那么要在其他配置的下面直接添加`'tab': 'emmet:expand-abbreviation-with-tab'`, 而不能直接添加上面的两行, 不然会报错 重启编辑器 这样就可以愉快的玩耍了......
2016-12-07 22:12:00来自分类 前端
[Async 文档](http://blog.fens.me/nodejs-async/) [Bootstrap 中文文档](http://www.bootcss.com/) [CSS参考手册](http://css.doyoe.com/) [cooking 中文文档](http://cookingjs.github.io/zh-cn/index.html) [DevDocs API文档](http://devdocs.io/) [Emmet 文档](http://docs.emmet.io/cheat-sheet/) [ESLint 中文文档](http://eslint.cn/docs/rules/) [Flex 布局教程](http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html) [iScroll 5 API 中文版](https://iiunknown.gitbooks.io/iscroll-5-api-cn/content/index.html) [JavaScript 中文文档](https://d...
2016-12-07 22:12:00来自分类 前端
#### 一、校验数字的表达式 * 数字:`^[0-9]*$` * n位的数字:`^\d{n}$` * 至少n位的数字:`^\d{n,}$` * m-n位的数字:`^\d{m,n}$` * 零和非零开头的数字:`^(0|[1-9][0-9]*)$` * 非零开头的最多带两位小数的数字:`^([1-9][0-9]*)+(.[0-9]{1,2})?$` * 带1-2位小数的正数或负数:`^(-)?\d+(.\d{1,2})?$` * 正数、负数、和小数:`^(-|+)?\d+(.\d+)?$` * 有两位小数的正实数:`^[0-9]+(.[0-9]{2})?$` * 有1~3位小数的正实数:`^[0-9]+(.[0-9]{1,3})?$` * 非零的正整数:`^[1-9]\d$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]*$` * 非零的负整数:`^-[1-9][0-9]*$ 或 ^-[1-9]\d$`` * 非负整数:`^\d+$ 或 ^[1-9]\d*|0$` * 非正整数:`^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$`` * 非负...
2016-12-07 22:12:00来自分类 前端
在 html 页面的 head 区域加入以下代码: ```html <meta http-equiv="Content-Security-Policy" content="script-src 'self' data: 'unsafe-eval' 'unsafe-inline'; frame-src 'self'" /> ``` 其实也就是定义csp的头, 一般来说, 我们只要限制 script 和 iframe 就好了...加入上面的代码后, 网站内被加入非本站域名下的 js 文件, 就不被执行, 如果你有用 cdn, 那么可以把 cdn 的域名加入上面的白名单, 如: ```html <meta http-equiv="Content-Security-Policy" content="script-src 'self' data: 'unsafe-eval' 'unsafe-inline' http://*.baidu.com; frame-src 'self'" /> ```...
2016-12-07 22:12:00来自分类 前端
之前的编辑器一直用的是simditor, 但是问题也不少, 之后觉得换成markdown编辑器, 首选当然就是editor.md, 主要原因就是界面美观, 功能全面... 但是editor.md问题也有, 比如图片上传, 不知道为什么作者会用那么蛋疼的表单上传, 难道只是为了兼容IE8? 看了github上的维护时间, 最后一次维护差不多半年了, 想让作者来改, 可能性是不大了, 那么就只能自己来了... editor.md的图片上传是以插件的形式存在的, 文件在`./plugins/image-dialog/image-dialog.js`, 我们就拿这个文件开刀. ```javascript exports.fn.imageDialog = function () { var cm = this.cm var lang = this.lang var editor = this.editor var settings = this.settings var cursor = cm.getCursor() var selectio...
2016-12-07 22:12:00来自分类 前端
# Atom-beautify * 格式化代码,更统一的代码风格。 https://atom.io/packages/atom-beautify # Atom-ternjs * js,nodejs,es6补全 https://atom.io/packages/atom-ternjs # Autocomplete-paths * Adds path autocompletion to autocomplete+ https://atom.io/packages/autocomplete-paths # Autoprefixer * Prefix CSS and SCSS https://atom.io/packages/autoprefixer # Dash Dash documentation integration with Atom https://atom.io/packages/dash # DocBlockr * A helper package for writing documentation https://atom.io/packages/docblockr...