├── README.md ├── html&css ├── css3 │ ├── me.jpg │ ├── transform.md │ ├── transition.md │ ├── animation.md │ └── example.html ├── images │ ├── koala.gif │ └── browser.png ├── css3画笑脸.md ├── test │ ├── styles │ │ ├── useLess.css │ │ └── useLess.less │ └── index.html ├── README.md ├── 临时笔记(ps:很有用).md ├── css实现footer在底部.md ├── canvas │ └── canvas.html ├── LESS最简单使用讲解.md ├── 雅虎性能优化的14条规则.md ├── snail │ ├── snail.html │ ├── example.html │ └── css3slide.html ├── CSS:响应式导航菜单.md └── HTML&CSS规范.md ├── javascript栗子 ├── image_3.png ├── 图片切换 │ ├── images │ │ ├── big10.jpg │ │ ├── big11.jpg │ │ ├── big12.jpg │ │ ├── big15.jpg │ │ ├── big16.jpg │ │ ├── big17.jpg │ │ ├── big18.jpg │ │ ├── big19.jpg │ │ ├── big7.jpg │ │ ├── big8.jpg │ │ ├── big9.jpg │ │ ├── loading.gif │ │ ├── small10.jpg │ │ ├── small11.jpg │ │ ├── small12.jpg │ │ ├── small15.jpg │ │ ├── small16.jpg │ │ ├── small17.jpg │ │ ├── small18.jpg │ │ ├── small19.jpg │ │ ├── small7.jpg │ │ ├── small8.jpg │ │ └── small9.jpg │ └── imgToggle.html ├── 网页换肤 │ ├── css │ │ ├── blue.css │ │ ├── green.css │ │ └── pink.css │ └── skin.html ├── Carousel │ ├── images │ │ ├── dot.png │ │ ├── ad_ctr.png │ │ ├── img1.jpg │ │ ├── img2.jpg │ │ └── img3.jpg │ ├── Carousel.html │ └── jquery.js ├── README.md ├── 函数接收参数并弹出 │ └── value.html ├── 循环3个div变颜色 │ └── color.html ├── 译文:确保不在javascript中增加全局作用域.md ├── 立即调用函数.js ├── 简易js日历 │ └── calendar.html └── 闭包 ├── reactNativeError01.png ├── reactNativeError02.jpeg ├── 获取URL的参数.md ├── 为什么用$location的replace方法.md ├── javascript falsy bouncer.md ├── jQuery的delegate()和bind()写法.md ├── 笛卡尔集.md ├── shenjs感受.md ├── gruntfile记录.md ├── 项目经验不足的总结.md ├── HTTP.md ├── 在移动使用ajax只知道为何返回fail,这个很管用.md ├── 点头猪分享用户体验笔记.md ├── es6笔记.md ├── 项目经验总结2.md ├── this变量.md ├── 事件代理.md ├── 循环(迭代)过程.md ├── javascript单例模式.md ├── 项目中不懂的基础知识(8月份).md ├── assign().md ├── 搭建reactNative&遇到的问题.md ├── fontSize_rem_Note.md ├── 自己整理的resetCss.md ├── 如何搭建react native环境.md ├── 自适应导航条.md ├── 创建对象.md ├── javascript 4种设计模式.md └── 对象.md /README.md: -------------------------------------------------------------------------------- 1 | Note 2 | ==== 3 | 4 | 平时笔记总结 5 | 6 | 柚子 -------------------------------------------------------------------------------- /html&css/css3/me.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/html&css/css3/me.jpg -------------------------------------------------------------------------------- /javascript栗子/image_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/image_3.png -------------------------------------------------------------------------------- /reactNativeError01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/reactNativeError01.png -------------------------------------------------------------------------------- /reactNativeError02.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/reactNativeError02.jpeg -------------------------------------------------------------------------------- /html&css/images/koala.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/html&css/images/koala.gif -------------------------------------------------------------------------------- /html&css/images/browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/html&css/images/browser.png -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/big10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/big10.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/big11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/big11.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/big12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/big12.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/big15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/big15.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/big16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/big16.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/big17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/big17.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/big18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/big18.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/big19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/big19.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/big7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/big7.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/big8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/big8.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/big9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/big9.jpg -------------------------------------------------------------------------------- /javascript栗子/网页换肤/css/blue.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #CCCCFF; 3 | } 4 | #content li { 5 | background: blue; 6 | } -------------------------------------------------------------------------------- /javascript栗子/网页换肤/css/green.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #00CC33; 3 | } 4 | #content li { 5 | background: green; 6 | } -------------------------------------------------------------------------------- /javascript栗子/网页换肤/css/pink.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #FF9999; 3 | } 4 | #content li { 5 | background: pink; 6 | } -------------------------------------------------------------------------------- /html&css/css3画笑脸.md: -------------------------------------------------------------------------------- 1 | 链接: [http://www.uselessblog.cn/JQM-me/qqcss3.html](http://www.uselessblog.cn/JQM-me/qqcss3.html) 2 | -------------------------------------------------------------------------------- /javascript栗子/Carousel/images/dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/Carousel/images/dot.png -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/loading.gif -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/small10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/small10.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/small11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/small11.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/small12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/small12.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/small15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/small15.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/small16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/small16.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/small17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/small17.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/small18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/small18.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/small19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/small19.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/small7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/small7.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/small8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/small8.jpg -------------------------------------------------------------------------------- /javascript栗子/图片切换/images/small9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/图片切换/images/small9.jpg -------------------------------------------------------------------------------- /javascript栗子/Carousel/images/ad_ctr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/Carousel/images/ad_ctr.png -------------------------------------------------------------------------------- /javascript栗子/Carousel/images/img1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/Carousel/images/img1.jpg -------------------------------------------------------------------------------- /javascript栗子/Carousel/images/img2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/Carousel/images/img2.jpg -------------------------------------------------------------------------------- /javascript栗子/Carousel/images/img3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ellyliang/Note/HEAD/javascript栗子/Carousel/images/img3.jpg -------------------------------------------------------------------------------- /html&css/test/styles/useLess.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #ff0000; 3 | } 4 | a { 5 | color: #ffffff; 6 | } 7 | a:hover { 8 | text-decoration: none; 9 | } 10 | -------------------------------------------------------------------------------- /html&css/test/styles/useLess.less: -------------------------------------------------------------------------------- 1 | @fontColor: white; 2 | @bgColor: red; 3 | 4 | body { 5 | background: @bgColor; 6 | } 7 | a { 8 | color : @fontColor; 9 | &:hover { 10 | text-decoration:none; 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /html&css/README.md: -------------------------------------------------------------------------------- 1 | html-css-note 2 | ============= 3 | 4 | 学习javascript,当然也不能忘了加强自己的html和css,还有学习更多html5和css3的知识。尽然自己没能力写开源项目的代码,但也不能浪费Github这个平台,所以决定开了这个repo来记录学习的笔记,让自己的印象更深刻些! 5 | 6 | 基础,基础,基础。。。。。 7 | 性能,性能,性能。。。。。 8 | 学习,学习,学习。。。。。 9 | -------------------------------------------------------------------------------- /html&css/test/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | less 6 | 7 | 8 | 9 | 我喜欢的颜色是红色 10 | 11 | -------------------------------------------------------------------------------- /获取URL的参数.md: -------------------------------------------------------------------------------- 1 | 获取URL的参数笔记 2 | ================= 3 | 4 | 近期遇到挺多需求,需要获取URL上的参数进行判断之类的,所以写了这个笔记 5 | 6 | ```js 7 | function getURLParameter(name) { 8 | var pattern = new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)'), 9 | matched = pattern.(exec(location.search) || [,""])[1].replace(/\+/g, '%20'); 10 | return decodeURIComponent(matched) || null; 11 | } 12 | ``` 13 | -------------------------------------------------------------------------------- /javascript栗子/README.md: -------------------------------------------------------------------------------- 1 | js-note 2 | ======= 3 | 4 | 今天浏览下自己的Github,发现这个js-note放在这里没动过,感觉浪费,所以我计划,我每看js,都要做学习js笔记,欢迎大神们能给我提供更多学习js的链接!小女感激不尽!哈哈哈哈。。。。。。 5 | 6 | 以下是我近期要学习的链接和书: 7 | > - [http://zh.blog.goddyzhao.me/JavaScript-Internal](http://zh.blog.goddyzhao.me/JavaScript-Internal) 深入学习javascript 8 | > - [http://octsky.com/post/65/](http://octsky.com/post/65/) JavaScript Scoping and Hoisting 9 | > - 《javascript高级程序设计》 10 | 11 | 坚持! 12 | -------------------------------------------------------------------------------- /为什么用$location的replace方法.md: -------------------------------------------------------------------------------- 1 | 为什么用$location的replace方法 2 | ============================= 3 | 4 | 尼玛,发现自己对之前代码态度就是,遇到问题解决就好了,也不知道为什么这么做。然后我就遇到重复来重复去的bug! 5 | 6 | #### bug场景: 7 | 在NG中一载入页面的时候,用了`$location.path('/xxx');`跳转了,但是在客户端中,需要点击很多次返回键才会结束页面。 8 | 9 | #### 解决bug 10 | `$location.path('/xxx').replace();` 11 | 12 | #### 问题来了,为什么用replace()就可以了呢? 13 | 因为`replace`可以告诉`$location`服务下次自动和浏览器同步,上条浏览记录应该被替换而不是创建一个新的。 14 | 15 | 16 | 重定向会导致客户端回退有问题! 17 | -------------------------------------------------------------------------------- /javascript falsy bouncer.md: -------------------------------------------------------------------------------- 1 | Javascript falsy bouncer 2 | ========================= 3 | 4 | - Falsy: false, null, undefined, NaN, 0, ''。 5 | 6 | #### falsy bouncer 7 | 8 | ```js 9 | function bouncer(arr) { 10 | var holderArray = []; 11 | holderArray = arr.filter(removeFalseVal); 12 | return holderArray; 13 | } 14 | 15 | function removeFalseVal(value) { 16 | return Boolean(value); 17 | } 18 | 19 | bouncer([7, 'cate', '', false, 9, 0]); 20 | ``` 21 | -------------------------------------------------------------------------------- /jQuery的delegate()和bind()写法.md: -------------------------------------------------------------------------------- 1 | jQuery的delegate()和bind()写法 2 | ========================== 3 | 4 | 尼玛,最近在写老代码的需求,用到了代理,但里边涉及多版本的jQuery问题。所以不能用ON和LIVE。 5 | 所以我用了bind,但是组里边的大牛建议我用delegate(delegate在1.4.2及以上版本中全兼容)。因为方便以后升级jQuery版本,结果问题来了。我不知道delegate和bind的写法,又懒的去查, 6 | 所以啊,惩罚自己,做个笔记! 7 | 8 | ### delegate() 9 | 10 | ```js 11 | $(document).delegate('.xxx', 'click', function() {}); 12 | ``` 13 | 14 | ### bind() 15 | 16 | ```js 17 | $(document).bind('click', '.xxx', function() {}); 18 | ``` 19 | -------------------------------------------------------------------------------- /笛卡尔集.md: -------------------------------------------------------------------------------- 1 | 笛卡尔集 2 | ========= 3 | 4 | ```js 5 | var data = [['哇塞', '哇靠', '哇哇'], ['志帅', '志哥', '志锅'], ['好帅', '好牛']]; 6 | var result = []; 7 | function dFunc(index, res) { 8 | if(index >= data.length) { 9 | result.push(res); 10 | console.log(result); 11 | return; 12 | } 13 | 14 | var dArr = data[index]; 15 | for(var i=0, len=dArr.length; i - transform: none| []*; 4 | > - transform属性能对元素对象进行变形操作; 5 | > - 主要包括:旋转(rotate)/缩放(scale)/移动(translate)/倾斜(skew)/矩阵变形(matrix). 6 | 7 | ###取值 8 | 9 | > - none:不进行变换; 10 | > - :表示一个或多个变换函数,以空格分开,so可以同时对一个元素进行transform的多种属性操作。 11 | 12 | > - 1.rotate(360deg) ---- 旋转 13 | > - 2.translate(x, y) ---- 移动(水平方向,垂直方向); PS: `translate(100px, 30px)` 14 | > - translateX(x) ---- 仅水平方向移动 15 | > - translateY(y) ---- 仅垂直方向移动 16 | > - 3.scale(x, y) ---- 缩放(水平缩放,垂直缩放)PS:`scale(2, 1.5)` 17 | > - 4.skew(x, y) ---- 扭曲(水平扭曲,垂直扭曲)PS:`skew(30deg, 10deg)` 18 | > - 5.matrix(a, b, c, d, e, f) 19 | 20 | ###改变元素的基点`transform-origin` 21 | 22 | 例子: 23 | 24 | > - `transform-origin: (left, top)` 25 | > - `transform-origin: right` 26 | > - `transform-origin(25%, 75%)` 27 | 28 | ###实例: 29 | 30 | ```css 31 | transform: rotate(90deg) scale(1.5, 0.8) translate(100px, 50px) skew(54deg, 45deg); 32 | ``` 33 | -------------------------------------------------------------------------------- /HTTP.md: -------------------------------------------------------------------------------- 1 | HTTP 2 | ========== 3 | 4 | #### http缺点 5 | 6 | * 通信使用明文(不加密),内容可能会被窃听 7 | * 不验证通信方的身份,可能遭遇伪装 8 | * 无法证明报文的完整性,可能已遭遇篡改 9 | 10 | #### HTTPS = HTTP + 加密 + 认证 + 完整性保护 11 | 12 | #### 因输出值转义不完全引发的安全漏洞 (解决方法:过滤标签) 13 | 14 | * 跨脚本攻击 15 | * SQL注入攻击 16 | * OS命令注入攻击 17 | * HTTP首部注入攻击 18 | * HTTP响应截断攻击 19 | * 邮件首部注入攻击 20 | * 目录遍历攻击 21 | * 远程文件包含漏洞 22 | 23 | #### 返回结果的HTTP状态码 24 | 25 | * 200OK 成功 26 | * 204 No Content 请求处理成功,但资源没有被返回 27 | * 206 Partial Content 客户端进行范围请求,服务器端成功执行了这部分GET请求 28 | * 301 Moved Permanently (永久性重定向)请求资源已被分配了新的URL,应使用新的URL 29 | * 302 Found (临时性重定向)资源的URL已临时定位到其他位置了,禁止从POST变成GET 30 | * 303 See Other 请求对应的资源存在着另一个URL,应使用GET方法定向获取请求的资源 31 | * 304 Not Modified 资源已找到,单未符合条件 32 | * 307 Temporary Redirect 临时重定向。不会从POST变成GET 33 | * 400 Bad Request 请求报文中存在语法错误 34 | * 401 Unauththorized 请求需要有通过HTTP认证的认证信息 35 | * 403 Forbidden 请求资源的访问被服务器拒绝了 36 | * 404 Not Found 服务器上没有请求的资源 37 | * 500 Internal Server Error 服务器端在执行请求时发生了错误 38 | * 502 Bad Gateway 39 | * 503 Service Unavailable 服务器暂时处于超负载或正在进行停机维护 40 | -------------------------------------------------------------------------------- /html&css/临时笔记(ps:很有用).md: -------------------------------------------------------------------------------- 1 | ```html 2 | npm install harp -g 3 | ``` 4 | 5 | 不想用Apache的话,可以用这个命令 6 | 7 | 启动如下: 8 | 9 | ```js 10 | harp server 11 | ``` 12 | 13 | 感谢八哥推荐! 14 | 15 | 16 | 笔记二: 17 | 18 | grunt livereload + chrome reload插件 19 | 20 | ```js 21 | module.exports = function(grunt) { 22 | // 项目配置(任务配置) 23 | grunt.initConfig({ 24 | pkg: grunt.file.readJSON('package.json'), 25 | watch: { 26 | client: { 27 | files: ['*.html', 'css/*', 'js/*', 'images/**/*'], 28 | options: { 29 | livereload: true 30 | } 31 | } 32 | } 33 | }); 34 | 35 | // 加载插件 36 | grunt.loadNpmTasks('grunt-contrib-watch'); 37 | 38 | // 自定义任务 39 | grunt.registerTask('live', ['watch']); 40 | 41 | }; 42 | ``` 43 | 44 | NOTE: livereload需要在服务器上运行,因为对file://支持不是很好。 45 | 46 | 连接: http://www.bluesdream.com/blog/grunt-plugin-livereload-wysiwyg-editor.html 47 | -------------------------------------------------------------------------------- /在移动使用ajax只知道为何返回fail,这个很管用.md: -------------------------------------------------------------------------------- 1 | 在移动使用ajax只知道为何返回fail,这个很管用 2 | ============================================= 3 | 4 | ```js 5 | $.ajax({ 6 | url: "", 7 | data: "", 8 | type: "POST/GET", 9 | dataType: "json", 10 | success: function(r) { 11 | 12 | }, 13 | error: function(jqXHR, exception) { 14 | if (jqXHR.status === 0) { 15 | alert('Not connect.n Verify Network.'); 16 | } else if (jqXHR.status == 404) { 17 | alert('Requested page not found. [404]'); 18 | } else if (jqXHR.status == 500) { 19 | alert('Internal Server Error [500].'); 20 | } else if (exception === 'parsererror') { 21 | alert('Requested JSON parse failed.'); 22 | } else if (exception === 'timeout') { 23 | alert('Time out error.'); 24 | } else if (exception === 'abort') { 25 | alert('Ajax request aborted.'); 26 | } else { 27 | alert('Uncaught Error.n' + jqXHR.responseText); 28 | } 29 | } 30 | }); 31 | 32 | ``` 33 | -------------------------------------------------------------------------------- /javascript栗子/函数接收参数并弹出/value.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 函数接收参数并弹出 7 | 19 | 20 | 21 |
22 |

23 |

24 |

25 |
26 | 27 | 41 | 42 | -------------------------------------------------------------------------------- /点头猪分享用户体验笔记.md: -------------------------------------------------------------------------------- 1 | ##用户体验: 2 | 3 | ###1.动画 4 | 5 | 考虑: 移动端性能,transform性能比较好,因为只计算了一次; 速度,贝塞尔曲线网站; 6 | 7 | ###2.用户体验真的那么重要吗? 8 | - 稀缺型产品(不在乎用户体验); 9 | - 紧急不重要的产品(没空填坑的时候,就不要填) 10 | - 重体验型产品(发现问题解决问题); 11 | 12 | ###3.因什么妥协(为什么选择图片去实现动画效果,不是css3去实现) 13 | 14 | 时间!!! 15 | 16 | > 1).工期、推广实效、老板要求、人力资源不足 17 | 18 | > 2).代码的生命体系 19 | 20 | > 3).时间是高于技术和体验的不可控的因素 21 | 22 | - 四维空间(时间是单线的): 到了这个时间,发现问题,改变方案,解决它。再次遇到问题: 23 | - 五维空间 :看得到这样做产生的画面(带来的后果)调整方案 24 | - 六维空间:不用等到遇到问题才去解决 ,一开始就找到解决方案。 25 | - 七维空间:不是寻求解决方案,而是制定规则的人(工程实现 -> 体验)。 26 | 27 | ### 4、css实现影响因素 28 | 29 | > 1).技术自身的表现: css属性 30 | 31 | > 2).开发及维护成本 32 | 33 | > 3). 项目工期、发布deadline 34 | 35 | > 4) .csser个人知识结构 36 | 37 | ### 5、产品工程师 38 | 39 | ui规范 ui guidelines 40 | 41 | >(为什么工程师不喜欢调界面? 42 | 因为设计的质量决定了工程师的热情。) 43 | 44 | #### 产品考虑: 45 | - 物理尺寸更大,容纳更多信息 46 | - 相对单位:vw\vh\rem\percent... 47 | - 断点:media query 48 | - 横屏,场景变化,界面重排(多少app不考虑) 49 | 50 | ### 6、这部分工程师做还是设计师做? 51 | 52 | > 工程师提供解决方案的人,哪些可以做到,建议那些地方应该怎么样处理。(取决于公司的组织结构 53 | ) 54 | 55 | > 理解页面场景,用户做什么,意图是什么,后选择合适表现形式实现它。 56 | 57 | ### 视频链接 58 | - [移动时代css对用户体验的影响(点头猪)](http://www.imooc.com/video/6362) 59 | -------------------------------------------------------------------------------- /html&css/css3/transition.md: -------------------------------------------------------------------------------- 1 | transition 2 | ========== 3 | 4 | transition呈现的是一种过渡。PS:就是一种动画转换过程,如渐显、渐弱、动画快慢等。 5 | 6 | transition可以和transform同时使用。 7 | 8 | transition是复合属性。PS:如下: 9 | 10 | ###transition属性 11 | > - transition-property [过渡css属性] 12 | > - transition-duration[过渡时间]; PS:单位为s(秒) or ms(毫秒) 13 | > - transition-delay[延迟时间] 14 | > - transition-timing-function[过渡效果] 15 | 16 | ###transition-timing-function过渡的效果包括: 17 | 18 | 1、ease(逐渐变慢) 19 | 20 | 2、linear(均速) 21 | 22 | 3、ease-in(加速) 23 | 24 | 4、ease-out(减速) 25 | 26 | 5、cubic-bezier(该值允许你去自定义一个时间曲线) 27 | 28 | 6、ease-in-out(加速然后减速) 29 | 30 | ###语法 31 | 32 | ```css 33 | transition-property: all | none | [,]*; 34 | //设置要以动画方式变换的css属性。 35 | ``` 36 | 37 | ###取值 38 | 39 | all : 表示针对所有元素。 40 | 41 | none : 表示没有元素。 42 | 43 | ident : 指定css属性列表。 44 | 45 | ###笔记链接 46 | 47 | [http://ecd.tencent.com/css3/guide.html?transform](http://ecd.tencent.com/css3/guide.html?transform) 48 | 49 | [http://www.w3cplus.com/content/css3-transition](http://www.w3cplus.com/content/css3-transition) 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /es6笔记.md: -------------------------------------------------------------------------------- 1 | ES6 笔记 2 | ========= 3 | 4 | #### constructor 代替ES5的构造函数 5 | 6 | ```js 7 | //es5 8 | var Elly = function(name, age) { 9 | this.name = name; 10 | this.age = age; 11 | }; 12 | 13 | Elly.prototype.summary = function() { 14 | return this.name + ' ' + this.age; 15 | }; 16 | 17 | // es6 18 | class Elly { 19 | constructor(name, age) { 20 | this.name = name; 21 | this.age = age; 22 | } 23 | 24 | summary() { 25 | return this.name + ' ' + this.age; 26 | } 27 | } 28 | ``` 29 | 30 | #### super 调用父类的构造函数 31 | 32 | ```js 33 | class Cat { 34 | constructor(name) { 35 | this.name = name; 36 | } 37 | 38 | speak() { 39 | console.log(this.name + ' makes a noise.'); 40 | } 41 | } 42 | 43 | class Lion extends Cat { 44 | constructor(name, color) { 45 | // 此处应该是 super,题目中写错了。 46 | // 即调用父类的构造函数 47 | super(name); 48 | this.color = color; 49 | } 50 | 51 | speak() { 52 | // 调用父类的 speak 方法 53 | super.speak(); 54 | console.log(this.name + ' roars.'); 55 | } 56 | } 57 | 58 | var a = { 59 | val() { 60 | return this === super.valueOf(); 61 | } 62 | } 63 | 64 | console.log(a.val()) // 返回 true 65 | ``` 66 | -------------------------------------------------------------------------------- /项目经验总结2.md: -------------------------------------------------------------------------------- 1 | 项目经验总结 2015-7-1 2 | =================== 3 | 4 | 好了,又一项目上线了,又到总结的时候了。经过上次的总结,感觉自己做项目的时候抱怨少了,反而感觉有项目做的时候才更充实。所以啊,总结还是对自己有帮助的,所以要坚持。 5 | 6 | 说完一些有的没的,现在正式进入这次的话题。 7 | 8 | ### 问题总结 9 | 1、上线之前问题很多; 10 | 11 | 2、项目开始做的时候没有很仔细去思考产品为什么这么做,也没有认真的去了解产品提供的产品文档,还有没有跟产品的各种沟通; 12 | 13 | 3、很多细节的东西没做好等等等..... 14 | 15 | 总结的问题很多,比如代码质量问题啊,解决能力问题啊,对,解决问题的能力,发现自己遇到问题的时候,没有按照自己解决-google-再询问的顺序,有时候会自己思考到一半的时候,会产生懒惰的心理,没有自己去解决,这是不好的,但是又是好的,至少不用花很多时候浪费在这个问题上。嗯,在这个问题上,我有点纠结.... 16 | 17 | ### 为什么有这些问题 18 | 19 | 首先,上线前问题很多,这个原因很简单,经验积累,技术能力,习惯啥的都决定着我的项目在上线前为什么有这么多问题。 20 | 21 | 其次,产品了解方面,这是我这次感慨最深的,很真实的一个例子,产品给了个work文档和流程图,我只是去看了流程图,没有去看work文档里边的说明,导致测试的时候才发现还有功能没做。说实话,这是很不应该的!其次,我没有很了解这个产品,我也不知道后端给我的接口究竟跟这个产品的关系是什么,我只是一昧的拿着接口按照后端给接口去实现这个接口的效果。 22 | 23 | 最后,细节这东西,说实话,我已经说了好多遍,但到自己真正遇到细节问题之后才发现,我不细心,其实细心是建立在上面的基础之上的。 24 | 25 | ### 之后自己应该怎么做 26 | 27 | 1、要积累遇到问题,比如,遇到问题,自己解决了,或是询问了之后,都要做笔记;严重规定:中午吃完饭,如果没有手头上的工作,要花半个小时codereview!!!! 28 | 29 | 2、产品给的东西,一定要看,而且要认真看,就是产生那种懒惰的心理也要看!!!!!后端给接口,要想下,这个接口的作用是什么,我执行了这个接口之后,后端会执行了什么!!!!(这点有点难,但一定要做到) 30 | 31 | 3、给自己定的目标一定要完成,7月份一定要做出react+webpack的东西!!!!!! 32 | 33 | 好了,该怎么做,目标也定,之后就是自己一定要执行,T^T,我一定要做到啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 34 | 35 | 7月份,webpack+react, coding上见!!!!!!!! 36 | -------------------------------------------------------------------------------- /javascript栗子/循环3个div变颜色/color.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 循环3个div变颜色 7 | 24 | 25 | 26 |
27 | 28 | 29 |
30 |

31 |

32 |

33 |
34 |
35 | 36 | 55 | 56 | -------------------------------------------------------------------------------- /this变量.md: -------------------------------------------------------------------------------- 1 | ###this变量 2 | 3 | > - 函数运行时,自动生成的一个内部对象,只能在函数内部使用。 4 | > - !important: this指的是调用函数的那个对象。 5 | 6 | #### this调用的四种方法 7 | 8 | > 普通函数调用(指向的是全局) 9 | 10 | ```js 11 | var x = 1; 12 | function test() { 13 | this.x = 0; //this指向的是全局 14 | } 15 | test(); 16 | console.log(x); //0 17 | ``` 18 | 19 | > 对象方法调用(this指这个上级对象) 20 | 21 | ```js 22 | function test() { 23 | console.log(this.x); //this指向的是obj对象方法 24 | } 25 | var obj = {}; 26 | obj.x = 1; 27 | obj.m = test; 28 | console.log(obj.m()); //1 29 | ``` 30 | 31 | > 构造函数调用 32 | 33 | ```js 34 | var x = 2; 35 | function Test() { 36 | this.x = 1; 37 | } 38 | var test = new Test(); 39 | console.log(test.x); //1 40 | console.log(x); //2 41 | ``` 42 | 43 | > apply函数调用(改变函数的调用对象) 44 | 45 | apply(改变后的调用这个函数的对象) this指向的是第一个参数 46 | 47 | ```js 48 | var x = 0; 49 | function test() { 50 | console.log(this.x); 51 | } 52 | 53 | var obj = {}; 54 | obj.x = 1; 55 | obj.m = test; 56 | 57 | obj.m.apply(); //apply为空的时候指向的是全局对象,x为0 58 | obj.m.apply(obj); //1 59 | ``` 60 | 61 | > 对象原型链上的this 62 | 63 | ```js 64 | var o = { 65 | f : function() { 66 | return this.a + this.b; 67 | } 68 | }; 69 | var p = Object.create(o); 70 | p.a = 1; 71 | p.b = 4; 72 | console.log(p.f()); //5 73 | ``` 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /事件代理.md: -------------------------------------------------------------------------------- 1 | 事件代理 2 | ======== 3 | 4 | ### 什么是代理 5 | 6 | 给很多元素添加事件的时候,将事件委托给所有元素的父节点来触发处理函数。 7 | 8 | ### 简单使用代理 9 | 10 | ```js 11 | // 找到父节点,并添加click事件 12 | document.getElementById('parent').addListener('click', function(e) { 13 | // 检查事件目标e.target是否为li 14 | if(e.target && e.target.nodeName.toUpperCase == 'LI') { 15 | console.log('yep, i am li'); 16 | } 17 | }); 18 | ``` 19 | 20 | ### DOM中常用的事件类型 21 | 22 | ```js 23 | e.type // 事件类型 24 | e.target // 事件目标 25 | e.target.nodeName // 事件目标节点的名称 26 | e.stopPropagation(); // 阻止冒泡 27 | e.preventDefault(); // 阻止默认行为 28 | 29 | IE 30 | 31 | event = e || window.e; 32 | 33 | event.srcElement; // 事件目标 34 | event.cancelBubble = false; // 阻止冒泡 35 | event.cancelBubble = true; // 不阻止冒泡 36 | event.returnValue = true; // 不阻止默认行为 37 | event.returnValue = false; // 阻止默认行为 38 | ``` 39 | 40 | 使用代理 41 | 42 | ```js 43 | var delegate = function(client, clientMethod) { 44 | return function() { 45 | return clientMethod.apply(client, arguments); 46 | }; 47 | }; 48 | 49 | var ClassA = function() { 50 | var _color = 'red'; 51 | return { 52 | getColor : function() { 53 | console.log('Color:' + _color); 54 | }, 55 | setColor : function(color) { 56 | _color = color; 57 | console.log(_color) 58 | } 59 | }; 60 | }; 61 | 62 | var a = new ClassA(); 63 | var d = delegate(a, a.setColor); 64 | d('blue'); 65 | ``` 66 | -------------------------------------------------------------------------------- /循环(迭代)过程.md: -------------------------------------------------------------------------------- 1 | 循环(迭代)过程 2 | ============== 3 | 4 | ### filter 返回符合条件的新数组 5 | 6 | ```js 7 | var arr = [1, 22, 33, 23, 2, 5, 8]; 8 | 9 | arr.filter(function(value, index, arr) { 10 | if(value > 10) { 11 | console.log('value:'+ value +'; index:'+ index +'; arr:'+arr); 12 | } 13 | }); 14 | // value:22; index:1; arr:1,22,33,23,2,5,8 15 | // value:33; index:2; arr:1,22,33,23,2,5,8 16 | // value:23; index:3; arr:1,22,33,23,2,5,8 17 | ``` 18 | 19 | ### forEach 遍历 20 | 21 | > 遍历的时候会跳过被删除或未被赋值的项(undefined除外) 22 | 23 | ```js 24 | var arr = [1, 22, 33, 23, 2, 5, 8, undefined]; 25 | delete arr[1]; 26 | arr.forEach(function(value, index, arr) { 27 | console.log(value); 28 | }); 29 | ``` 30 | 31 | ### map 返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组 32 | 33 | ```js 34 | ['foot', 'goose', 'moose', 'kangaroo'].map(function(value, index, arr) { 35 | var result = value.replace(/o/g, 'e'); 36 | if(value === 'kangaroo') { 37 | result += 'se'; 38 | } 39 | console.log(result); 40 | }); 41 | ``` 42 | 43 | ### every 每一个元素都满足参数中提供的测试函数,返回真 44 | 45 | > 那些被删除的元素或从来未被赋值的元素将不会被访问到 46 | 47 | > 不会改变原数组 48 | 49 | ```js 50 | var arr = [1, 22, 33, 23, 2, 5, 8]; 51 | 52 | arr.every(function(value, index, arr) { 53 | if(value > 0) { 54 | return value; 55 | } 56 | }); 57 | ``` 58 | 59 | ### some 至少有一个元素满足函数测试,返回真 60 | 61 | ```js 62 | var arr = [1, 22, 33, 23, 2, 5, 8]; 63 | 64 | arr.some(function(value, index, arr) { 65 | if(value === 1) { 66 | return value; 67 | } 68 | }); 69 | ``` 70 | -------------------------------------------------------------------------------- /html&css/css3/animation.md: -------------------------------------------------------------------------------- 1 | animation(动画) 2 | ======== 3 | 4 | > - animation-name[动画名称] 5 | > - animation-duration[动画时间] PS:单位为s or ms;默认为0 6 | > - animation-timing-function[播放方式] PS: ease(逐渐变慢)|linear(均速)|ease-in(加速)|ease-out(减速)|ease-in-out(加速然后减速)|step-start(马上转跳到动画结束的状态)|step-end(马上跳转到动画开始的状态)|cubic-bezier(自定义一个时间曲线) 7 | > - animation-delay[开始播放时间] 8 | > - animation-iteration-count[播放次数] PS:默认值为1; `n|infinite(无限)` 9 | > - animation-direction[播放方向] PS: 默认`normal`->动画每次循环都是向前播放;reverse->动画反向运行,方向始终与normal相反;`alternate`->动画播放在第偶数次向前播放,第奇数次向反方向播放。 10 | > - animation-fill-mode[播放后的状态] 11 | > - animation-play-state[对象动画的装填] PS:默认running; paused 12 | 13 | ```css 14 | animation: 'ellyliang' 20s ease-in-out 2s infinite alternate 15 | animation: animation-name animation-duration animation-timing-function animation-delay animation-iteration-count animation-direction 16 | ``` 17 | 18 | ###如何开始进行动画(@keyframes) 19 | 20 | 检索或设置对象所应用的动画名称,必须与规则@keyframes配合使用。 21 | 22 | ```css 23 | @-webkit-keyframes demo { 24 | from { 25 | left: 0; 26 | } 27 | to { 28 | left: 400px; 29 | } 30 | } 31 | 32 | 复杂动画 33 | @-webkit-keyframes demo { 34 | 0% {left: 0;} 35 | 50%{left: 200px;} 36 | 100%{left: 400px;} 37 | } 38 | ``` 39 | 40 | [http://ecd.tencent.com/css3/guide.html?transform](http://ecd.tencent.com/css3/guide.html?transform) 41 | 42 | [http://www.w3cplus.com/content/css3-transition](http://www.w3cplus.com/content/css3-transition) 43 | -------------------------------------------------------------------------------- /javascript单例模式.md: -------------------------------------------------------------------------------- 1 | 单例模式 2 | ======== 3 | 4 | ###什么是单例模式? 5 | 6 | 利用私有构造函数来保证只有一个实例,使不同的地方调用同一个实例对象。 7 | 8 | ###单例模式的例子: 9 | 10 | ```js 11 | var Useless = { 12 | name: "useless", 13 | age: function() { 14 | console.log("secret!"); 15 | } 16 | }; 17 | Useless.age(); 18 | ``` 19 | 20 | ###闭包实现私有成员的单例模式例子: 21 | 22 | ```js 23 | var Ellyliang = (function() { 24 | var name = "useLess", 25 | age = function() { 26 | console.log("secret!"); 27 | }; 28 | 29 | return { 30 | getName: function() { 31 | return name; 32 | }, 33 | getAge: function() { 34 | age(); 35 | } 36 | } 37 | })(); 38 | Ellyliang.getName(); 39 | Ellyliang.getAge(); 40 | ``` 41 | 42 | ###闭包实现私有成员的惰性实例化单例模式: 43 | 44 | ```js 45 | var Ellyliang = (function() { 46 | var name = "useLess", 47 | age = function() { 48 | console.log("secret!"); 49 | }; 50 | 51 | var obj = { 52 | getName: function(){ 53 | return name; 54 | }, 55 | getAge: function(){ 56 | age(); 57 | } 58 | }; 59 | 60 | function init(){ 61 | return obj; 62 | } 63 | 64 | return { 65 | getInstace: init 66 | }; 67 | })(); 68 | 69 | Ellyliang.getInstace().getAge(); 70 | Ellyliang.getInstace().getAge(); 71 | ``` 72 | NOTE: 适用场景-> 必须加载大量数据的单体知道需要使用它的时候才实例化。 73 | 74 | ###笔记链接: 75 | 76 | > - [http://www.cnblogs.com/snandy/archive/2011/04/07/2007717.html](http://www.cnblogs.com/snandy/archive/2011/04/07/2007717.html) 77 | > - [http://rolfzhang.com/articles/920.html](http://rolfzhang.com/articles/920.html) 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /项目中不懂的基础知识(8月份).md: -------------------------------------------------------------------------------- 1 | 项目中不懂的基础知识(8月份) 2 | =========================== 3 | 4 | ### 1. Filter() 5 | > filter()方法利用所有通过指定函数测试的元素创建一个新的数组,并返回。 6 | 7 | > 注意:两个数组间的对比要用id,不用索引 8 | 9 | #### 如何获取对应的id 10 | 11 | 栗子: 12 | 13 | ```js 14 | var arr = [{ 15 | id : 1, 16 | name : 'use' 17 | }, { 18 | id : 2, 19 | name : 'you zi' 20 | }]; 21 | 22 | var getArrId = function(id) { 23 | return arr.filter(function(objArr) { 24 | return +objArr.id === id; 25 | }); 26 | }; 27 | 28 | getArrId(2); //[{id: 2,name: "you zi"}] 29 | ``` 30 | 31 | ### 数据同步(基础) 32 | 33 | > 问题描述:在地图中有很多marker,数据中只有2条数据,当然这时地图中也有2个marker。当我从数据中删除1条数据的时候,bug就产生了,地图中还是有2个marker。这是为什么呢?因为代码中是用数组把marker存起来的,然后数据也是个数组,当数据更新的时候,并没有更新marker的数组。(估计这里很多人不知道说的是什么,因为我的描述有点问题)所以这时要实现数据同步,如果实现数据同步呢?代码如下: 34 | 35 | ```js 36 | var arrOne = [ 37 | { 38 | id: 1, 39 | word : 'e' 40 | },{ 41 | id: 2, 42 | word: 'l' 43 | },{ 44 | id: 3, 45 | word: 'l' 46 | },{ 47 | id: 4, 48 | word: 'y' 49 | },{ 50 | id: 5, 51 | word: '2' 52 | } 53 | ]; 54 | 55 | var arrTwo = [ 56 | { 57 | id: 1, 58 | word : 'e' 59 | },{ 60 | id: 2, 61 | word: 'l' 62 | },{ 63 | id: 3, 64 | word: 'l' 65 | },{ 66 | id: 4, 67 | word: 'y' 68 | } 69 | ]; 70 | 71 | var newArr = []; // 产生的新数组 72 | 73 | arrOne.forEach(function(element, index) { 74 | var arrOneId = +arrOne[index].id; // arrOne数组的id 75 | 76 | arrTwo.forEach(function(ele, idx) { 77 | var arrTwoId = +arrTwo[idx].id; // arrTwo数组的id 78 | if(arrOneId === arrTwoId) { 79 | newArr.push(ele.word); // 如果2个数组中有相同的id,就把它们存到新的数组中 80 | } 81 | }); 82 | 83 | }); 84 | 85 | console.log(newArr); // 新数组: ['e', 'l', 'l', 'y'] 86 | ``` 87 | -------------------------------------------------------------------------------- /assign().md: -------------------------------------------------------------------------------- 1 | ```js 2 | var createAssigner = function(keysFunc, defaults) { 3 | return function(obj) { 4 | var length = arguments.length; // 获取arguments的长度 5 | 6 | if(defaults) { // 如果defaults为真的话,不管传入什么,强制转化为对象 7 | obj = Object(obj); 8 | } 9 | 10 | if(length < 2 || obj == null) { // 如果参数长度小于1或传入的参数为null,则返回obj 11 | return obj; // return obj停止执行下边 12 | } 13 | 14 | for(var index = 1; index < length; index++) { // 当参数大于2的时候循环 15 | var source = arguments[index], // arguments返回的是数组 16 | keys = keysFunc(source), // 获取数组中对象的key值 17 | l = keys.length; 18 | 19 | for(var i = 0; i 10 | 11 | 12 | 13 | footer 14 | 44 | 45 | 46 |
47 |
48 | 49 |
50 |
这是个简单的例子
51 | 52 |
53 |
54 | 55 |
这是footer
56 | 57 | 58 | ``` 59 | 60 | ###笔记参考链接 : 61 | 62 | > * [http://www.cssstickyfooter.com/using-sticky-footer-code.html](http://www.cssstickyfooter.com/using-sticky-footer-code.html) 63 | >* [http://ryanfait.com/resources/footer-stick-to-bottom-of-page/](http://ryanfait.com/resources/footer-stick-to-bottom-of-page/) 64 | 65 | 66 | -------------------------------------------------------------------------------- /html&css/canvas/canvas.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Canvas极客教程 6 | 7 | 8 | 9 | 10 | 62 | 63 | -------------------------------------------------------------------------------- /javascript栗子/网页换肤/skin.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 网页换肤 7 | 8 | 51 | 52 | 53 |
54 |
    55 |
  • 56 |
  • 57 |
  • 58 |
59 | 60 |
    61 |
  • item1
  • 62 |
  • item2
  • 63 |
  • item3
  • 64 |
65 |
66 | 67 | 85 | 86 | -------------------------------------------------------------------------------- /html&css/css3/example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | transform(变形)&transition(过渡) 6 | 70 | 71 | 72 |
73 | 74 | 75 | 76 |

Welcome to the world of USELESS!

77 |
78 | 79 | -------------------------------------------------------------------------------- /html&css/LESS最简单使用讲解.md: -------------------------------------------------------------------------------- 1 | #LESS最初使用篇(配图讲解) 2 | 3 | 写这篇文章的缘由是想帮助一开始接触less,不知道怎么使用less的童鞋,这里只讲解最简单的使用方法,至于那些啥么sublime less2css, grunt-less编译工具等等,这里不讲解, 这里只用koala。初学者建议先使用koala,之后再用其他工具。好吧,以下是简单且快捷的使用方法: 4 | 5 | ###了解,学习。LESS中国官网: [http://www.lesscss.net](http://www.lesscss.net) 6 | 7 | 刚开始接触LESS,总要先去官网学习和了解LESS吧,不然去群里边问,别人跟你讲解你也觉得模糊。千万记得,自己要动手试试!哈哈哈....... 8 | 9 | ###不推荐浏览器端的使用方法!!!! 10 | 11 | ![don't recommend](images/browser.png) 12 | 13 | 你用less浏览器端的使用方法了吗?用了!好吧,建议你换其他的编译方法,或是使用第三方编译工具。 14 | 15 | 至于为什么不推荐,官方的说法是: 16 | 17 | > 在客户端使用 Less.js 是最容易的方式,并且在开发阶段很方便,但是,在生产环境中,性能和可靠性非常重要,我们建议最好使用 node.js 或其它第三方工具进行预编译。 18 | 19 | ##LESS使用方法 20 | 21 | ###本文重点:用koala编译less文件,在页面中引入编译好的css文件(ps:亲,koala可以实时编译哦!) 22 | 23 | >首先下载[koala](http://koala-app.com/index-zh.html) 24 | > > 然后安装。。。。。 25 | 26 | ```html 27 | test/ 28 | ├── styles/ 29 | │ ├── useLess.less 30 | └── index.html 31 | ``` 32 | 33 | koala编译后: 34 | 35 | ```html 36 | test/ 37 | ├── styles/ 38 | │ ├── useLess.less 39 | │ ├── useLess.css 40 | └── index.html 41 | ``` 42 | > 将项目中的Styles文件夹移到koala中 43 | > > 在koala中选上自动编译和压缩方式 44 | > > > 之后在编辑器中编写less,然后保存 45 | > > > > 你就会发现项目的样式文件夹中多了个.css文件,然后将.css文件引入到页面中(这个可以一开始就在页面中引入.css文件),继续编写less。 46 | 47 | ```html 48 | 49 | 50 | 51 | 52 | less 53 | 54 | 55 | 56 | 我喜欢的颜色是红色 57 | 58 | 59 | ``` 60 | 61 | ```css 62 | @fontColor: white; 63 | @bgColor: red; 64 | 65 | body { 66 | background: @bgColor; 67 | } 68 | a { 69 | color : @fontColor; 70 | &:hover { 71 | text-decoration:none; 72 | } 73 | } 74 | ``` 75 | 76 | koala编译后 77 | 78 | ```css 79 | body { 80 | background: #ff0000; 81 | } 82 | a { 83 | color: #ffffff; 84 | } 85 | a:hover { 86 | text-decoration: none; 87 | } 88 | ``` 89 | 90 | 还是不明白我在说什么是吗。。。看图! 91 | 92 | ![how to use KOALA](images/koala.gif) 93 | 94 | NOTE:如果想设置话,在koala的那个齿轮里边设置语言,压缩方式等等,自己随便点下就懂了,哈哈哈哈。。。 95 | 96 | 好了,看完这里之后,可以去LESS中国官网: [http://www.lesscss.net](http://www.lesscss.net)看教程了,跟着里面边练边学,如果之后自己不想用koala编译,再去折腾折腾其他的编译方式,完全取决于自己的兴趣和习惯,哈哈哈哈哈。。。。。 97 | 98 | 如果文中有什么不对的地方,欢迎各位大神的指导,偶只是一名前端菜鸟!哈哈哈哈。。。。。。 99 | 100 | -------------------------------------------------------------------------------- /javascript栗子/译文:确保不在javascript中增加全局作用域.md: -------------------------------------------------------------------------------- 1 | 译文:确保不在javascript中增加全局作用域 2 | ================================= 3 | 4 | 写javascript代码最好的做法是避免把对象放到全局作用域中。有几个很好的理由来解释全局变量会增加耦合(globals add coupling),例如,分开不同库的时候,很容易破坏彼此。事实上,通常程序的规则是避免增加全局作用域。遗憾的是,javascript增加对象到全局作用域中是非常容易的事情。参考以下这段代码: 5 | 6 | ```js 7 | function sayHello(person) { 8 | message = "Hello, " + person; 9 | $("#message").text(message); 10 | } 11 | 12 | sayHello('@ardalis'); 13 | ``` 14 | 15 | ```html 16 |
17 | ``` 18 | 19 | 在这个例子中,我们定义了一个函数,在函数里边设置了一个变量,然后用jquery去修改div。但是因为我们没有声明`var`这个关键词,所以实际上我们已经增加了一个新的对象message到全局作用域中。事实上,如果其他的一些函数也存在message这个全局对象,那么我们刚声明的message就会覆盖掉其他一些函数的message,从而可能导致系统的其他部分被破坏,即使其他部分没有被修改过。增加紧密的耦合(tight coupling)在我们的设计中,很可能不经意间,会使我们写的javascript应用更加脆弱且更难维护。 20 | 21 | 另外,全局作用域很容易意外的导致错误,那么我们如何去避免它?当然有一些工具对找出javascript中的错误问题很有帮助,例如JSLint 。运行`sayHello()`函数,通过JSLint可以让你知道`message`在使用之前有没有被定义过。 22 | 23 | ###全局数量 24 | 另一种方法是在全局空间中计算对象的数量,确保你没有增加同一个全局对象。这样做可以作为你测试套件每个函数的基础,声明每个函数开始和结束都没有改变全局状态的一部分(或是,如果函数想要增加到全局状态中,确保该函数中的对象是唯一你想要的)。关键是在给定的时间里能够计算多少个全局对象。你可以执行以下的代码: 25 | 26 | ```js 27 | function sayHello(person) 28 | { 29 | message = "Hello, " + person; 30 | $("#message").text(message); 31 | } 32 | 33 | function sayHelloShouldNotAddToGlobalScope(globalObject) 34 | { 35 | var initialGlobalCount = Object.keys(globalObject).length; 36 | sayHello("@ardalis"); 37 | var endGlobalCount = Object.keys(globalObject).length; 38 | if(initialGlobalCount == endGlobalCount) { 39 | $("#result").text("Success!"); 40 | } else { 41 | $("#result").text("Failed - Initial Count: " + 42 | initialGlobalCount + 43 | " End Count: " + 44 | endGlobalCount); 45 | } 46 | } 47 | 48 | $(document).ready(function() { 49 | // run test 50 | sayHelloShouldNotAddToGlobalScope(window); 51 | }); 52 | ``` 53 | 54 | ```html 55 |

56 |

57 | ``` 58 | 59 | 运行这个函数,你应该可以看到,该函数在全局作用域的结束比开始多了个项目(确切的数字会在不同的环境中运行该函数)。 60 | 61 | ###使用严格模式 62 | 另一个方法是声明`"use strict;"`模式。它的做法很简单,无论是本地或是全局,在你的代码中增加`"use strict"`这个字符串,然后末尾加个分号。像这样: 63 | 64 | ```js 65 | "use strict"; 66 | ``` 67 | 68 | 这样做除了其他事项外,还可以防止使用未声明的变量,未声明的变量是上面所以提及的sayHello()函数问题的根源。Chrome 13+, IE 10+, Safari 5.1+, 和Firefox 4+都兼容严格模式。如果你添加严格模式到上面的代码中(请看[fiddle](http://jsfiddle.net/7Rx32/4/)),当你运行代码的时候,你会发现有个错误(请查阅开发者工具的console): 69 | 70 | ![说明](image_3.png) 71 | 72 | ###总结 73 | 大多数现代浏览器都支持"use strict",同时使用严格模式可以养成良好的代码习惯,而且严格模式会阻止常见的问题,例如不经意将对象添加到全局作用域中。你也可以在全局对象之前和执行方法之后检查对象的数量,最好做法是在你的javascript单元测试中检查对象的数量。 74 | -------------------------------------------------------------------------------- /javascript栗子/立即调用函数.js: -------------------------------------------------------------------------------- 1 | //声明:此笔记的原文来自http://www.basecss.net/article/immediately-invoked-function-expression.html 2 | 3 | //在JS中,每个函数被调用时都会创建一个全新的上下文环境。 4 | //在函数内部定义的变量和函数就只能在函数内部访问,在外部无法访问 5 | //那么在该上下文环境中,调用函数就提供了一个非常方便的方式来创建私有成员 6 | 7 | //因为返回函数能够访问外部函数的内部变量的私有变量i,返回函数实际上有访问私有变量的特权 8 | function makeCounter(){ 9 | //私有变量 10 | var i = 0; 11 | 12 | //返回函数 13 | return{ 14 | console.log(i++); 15 | }; 16 | } 17 | 18 | var counter = makeCounter(); 19 | counter(); //1 20 | counter(); //2 21 | 22 | var counter2 = makeCounter(); 23 | counter2(); //1 24 | counter2(); //2 25 | 26 | i; //引用错误,因为i是私有变量 27 | 28 | 29 | var foo = function(){} 30 | 31 | function(){}(); //语法错误 32 | 33 | //但是如果在括号中插入一个表达式,就不会异常,但是函数还是不会执行 34 | function foo(){}(1); 35 | 36 | //这其实相当于一个函数声明后面跟一个完全无关的表达式 37 | function foo(){} 38 | (1); 39 | 40 | //解决上面的问题,最好的方法是是有即时函数表达式 41 | (function(){}()); 42 | 43 | //括号和强制运算符的作用是消除函数表达式和函数声明之间的歧义 44 | var i = function foo(){}(); 45 | true && function(){}(); 46 | 0,function(){}(); 47 | 48 | //使用闭包保存状态 49 | 50 | //当点击元素时(循环执行完成后),它会弹出元素总数,因为i实际上是循环执行后完成的值。 51 | var elems = document.getElementsByTagName('a'); 52 | 53 | for(var i = 0; i < elems.length; i++){ 54 | elems[i].addEventListener('click',function(e){ //addEventListener(); 监听事件 55 | e.preventDefault(); //preventDefault();取消事件的默认动作 56 | alert('I am link #' + lockedInIndex) 57 | },'false'); 58 | } 59 | 60 | //立即调用函数表达式内部的lockedLindex总是在函数表达式被调用时传递给它i的值 61 | //因此当点击元素时,会正确的弹出当前的值。 62 | var elems = document.getElementsByTagName('a'); 63 | 64 | for(var i = 0; i < elems.length; i++){ 65 | (function(lockedInIndex){ 66 | elems[i].addEventListener('click',function(e){ 67 | e.preventDefault(); 68 | alert('I am link #' + lockedInIndex); 69 | },false); 70 | }(i)); 71 | } 72 | 73 | //以上的例子还可以这样 74 | var elems = document.getElementsByTagName('a'); 75 | 76 | for(var i = 0; i < elems.length; i++){ 77 | elems[i].addEventListener('click',(function(lockedInIndex){ 78 | return function(e){ 79 | e.preventDefault(); 80 | alert('I am link #' + lockedInIndex); 81 | } 82 | }(i),'false');); 83 | } 84 | 85 | //即时函数模块模式 86 | //即时函数可以赋给一个变量,当调用匿名函数时立即执行 87 | var counter = (function(){ 88 | //私有变量 89 | var i = 0; 90 | 91 | //闭包 92 | return{ //特权 93 | get:function(){ 94 | return i; 95 | }, 96 | set:function(val){ 97 | return i = val; 98 | }, 99 | increment:function(){ 100 | return ++i; 101 | } 102 | }; 103 | }()); 104 | 105 | //实现 106 | counter.get(); //0 107 | counter.set(5); //5 108 | counter.increment(); //6 109 | counter.increment(); //7 110 | -------------------------------------------------------------------------------- /javascript栗子/简易js日历/calendar.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 简易日历js 7 | 18 | 19 | 52 | 53 | 54 | 55 |

56 |
    57 |
  • 1JAN
  • 58 |
  • 2FER
  • 59 |
  • 3MAR
  • 60 |
  • 4APR
  • 61 |
  • 5MAY
  • 62 |
  • 6JUN
  • 63 |
  • 7JUL
  • 64 |
  • 8AUG
  • 65 |
  • 9SEP
  • 66 |
  • 10OCT
  • 67 |
  • 11NOV
  • 68 |
  • 12DEC
  • 69 |
70 |
71 |

72 | 6 73 | 月节日 74 |

75 |

端午节:6月4日至6日放假3天。

76 |
77 |
78 | 79 | 80 | -------------------------------------------------------------------------------- /html&css/雅虎性能优化的14条规则.md: -------------------------------------------------------------------------------- 1 | 雅虎性能优化的十四条规则 2 | ===================== 3 | 4 | 作为一位前端技术人员,了解网站的性能优化方面的知识是很基本的,但是我很惭愧我现在才了解到这一点T^T,以下是我学习yahoo性能优化十四条规则的笔记: 5 | 6 | - __一、减少http请求次数__ 7 | 8 | 如何减少http请求次数: 9 | 10 | > - 组合页面中的图片到单个文件中,并使用css的background-image和background-position属性来实现所需部分的图片; 11 | > - 组合多个脚本文件到单一文件中。意思就是:把页面中的多个css 或js文件合并在一个文件中。 12 | 13 | 减少http请求次数是性能优化的起点!对提高首次访问效率起到很重要的作用。 14 | 15 | - __二、使用cdn(Content Delivery Network,内容分发网络)__ 16 | 17 | 这条可以忽略之。。。。 18 | 19 | - __三、增加expires header__ 20 | 21 | 浏览器(和代理)使用缓存来减少http请求次数和大小,使得网页加速装载。 22 | 23 | 如何增加expires header 24 | 25 | > - 如果是apache,可以使用expiresDefault基于当期日期来设置过期日期。 26 | > - 记住:如果使用超长的过期时间,则当内容改变时,必须改变文件名称。 27 | > - 版本号内嵌在文件名中,如:useless_1.0.0.js. 28 | 29 | - __四、压缩页面元素__ 30 | 31 | 压缩http响应内容可以减少页面响应时间,同时,对尽量度的文件类型进行压缩是一种减少页面大小和提高用户体验的简便方法。 32 | 33 | 通过Accept-Encoding头来表明支持的压缩类型,如: 34 | 35 | `Accept-Encoding: gzip,deflate` 36 | 37 | PS:这个可以忽略,因为一般浏览器都支持gzip之类压缩,然后服务端前端这边不用管。 38 | 39 | - __五、把样式表放在头上__ 40 | 41 | 把样式表移到head中,可以提高界面的加载速度,因此这使得页面元素可以顺序显示。 42 | 43 | 原因: 避免空白屏幕或闪烁的问题。 44 | 45 | - __六、把脚本文件放在底部__ 46 | 47 | 尽量把脚本文件放在页面底部,好处就是,一能顺序显示,二可达到最大的并行下载。 48 | 49 | - __七、避免css表达式__ 50 | 51 | css表达式是强大的(同时也是危险的)用于动态设置css属性的方式。ie,从版本5开始支持css表达式。 52 | 53 | 所谓的表达式是,看例子: 54 | 55 | `expression((new Date()).getHours()%2?"#B8D4FF":"#F08A00")`,即背景色每个小时切换一次。 56 | 57 | ps:一般很少用css表达式 58 | 59 | - __八、把js和css放到外部文件中__ 60 | 61 | > - 使用外部文件会加快页面显示速度,因为外部文件会被浏览器缓存。 62 | > - 内置的js和css在页面中虽然会减少http请求次数,但是增大了页面的大小。 63 | > - 使用外部文件,会被浏览器缓存,则页面大小会减小,同时又不增加http请求次数。 64 | 65 | - __九、减少DNS查询次数__ 66 | 67 | 这个不说明,了解下,这主要是服务端的优化 68 | 69 | - __十、最小化js代码__ 70 | 71 | 最小化js代码是指在js代码中删除不必要的字符,从而降低下载时间。 72 | 73 | ps:其实就是压缩js。 74 | 75 | - __十一、避免重定向__ 76 | 77 | 重定向功能是通过301和302这两个http状态码完成的,如: 78 | 79 | > - `HTTP/1.1 301 Moved Permanently` 80 | > - `Location:http://example.com/newuri` 81 | > - `Content-Type:text/html` 82 | 83 | ps:没用过这个 84 | 85 | - __十二、删除重复的脚本文件__ 86 | 87 | 在一个页面中包含重复的js脚本会影响性能,即它会建立不必要的http请求和额外的js执行。 88 | 89 | - __十三、配置etags__ 90 | 91 | 忽略吧。。。。 92 | 93 | - __十四、缓存ajax__ 94 | 95 | 提高ajax的性能最重要的方式是使得其response可缓存。 96 | 97 | 学习链接如下: 98 | 99 | > - [https://developer.yahoo.com/performance/rules.html](https://developer.yahoo.com/performance/rules.html) 100 | > - [http://3y.uu456.com/bp-58a2922f647d27284b73512a-2.html](http://3y.uu456.com/bp-58a2922f647d27284b73512a-2.html) 101 | > - [http://fex.baidu.com/blog/2014/03/fis-optimize/](http://fex.baidu.com/blog/2014/03/fis-optimize/) 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /javascript栗子/图片切换/imgToggle.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 图片切换 6 | 55 | 56 | 57 |
58 |
    59 |
  • 60 |
  • 61 |
  • 62 |
  • 63 |
  • 64 |
  • 65 |
  • 66 |
  • 67 |
  • 68 |
  • 69 |
  • 70 |
71 | 72 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /搭建reactNative&遇到的问题.md: -------------------------------------------------------------------------------- 1 | 最近搞react-native环境遇到的问题 2 | ================================ 3 | 4 | 前奏完成后,通过`react-native init Hello`,然后启动xcode,打开项目。本应该很兴奋看到页面,结果尼玛,报错了,以下是我遇到的2个问题的笔记 5 | 6 | 7 | ![reactNativeError01](/reactNativeError01.jpg); 8 | 9 | ![reactNativeError02](/reactNativeError02.jpg); 10 | 11 | 12 | 13 | 如何跑通react native(iOS) 14 | ==================== 15 | 16 | > 下载的时候,请保持翻墙状态,不然可能会出现其他的问题。 17 | 18 | > 请确认本机是否已经安装了node 19 | 20 | #### 1.更新homebrew(如还未安装homebrew, [请戳](http://brew.sh/)) 21 | 22 | ```js 23 | brew update 24 | brew upgrade 25 | ``` 26 | 27 | #### 2.homebrew安装nvm, watchman, flow 28 | 29 | brew安装nvm或是通过[安装指南](https://github.com/creationix/nvm#installation) 30 | 31 | > 注意:要想react native跑通,且不会出现很多问题,一定要将node升级到4.0 32 | 33 | ```js 34 | brew install nvm && 35 | nvm --version // 查看是否安装成功 36 | // 遇到问题请看下边说明 37 | // 如果安装成功,执行下边的命令 38 | nvm install node 39 | nvm alias default node 40 | nvm ls-remote // 查看node的版本 41 | ``` 42 | 43 | 说明:中间我遇到了一个问题,无论我怎么装,都会提示这个`nvm command not found`,于是我Google找到了解决方法,链接如下: 44 | 45 | [Node Version Manager install - nvm command not found](http://stackoverflow.com/questions/16904658/node-version-manager-install-nvm-command-not-found/17707224#17707224) 46 | 47 | brew安装watchman,flow 48 | 49 | ```js 50 | brew install watchman 51 | brew install flow 52 | ``` 53 | 54 | #### 3.安装[Xcode]()7.1或更高版本(这个不做说明,因为我也不熟,刚开始接触,只要下载安装就好) 55 | 56 | 这是我查找的参考链接 57 | 58 | [【整理】Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得](http://www.crifan.com/intro_ios_simulator_in_xcode_and_usage_summary/) 59 | 60 | #### 4.最后一步,下载react native提供的demo(AwesomeProject) 61 | 62 | 执行以下链接: 63 | 64 | ```js 65 | npm install -g react-native-cli 66 | react-native init AwesomeProject 67 | cd AwesomeProject/ 68 | ``` 69 | 70 | 进入到AwesomeProject/,然后找到ios/AwesomeProject.xcodeproj,双击打开启动。 71 | 72 | 如果没报啥权限问题的话估计是成功了,但是我遇到了啥permission,或是unlock的问题,具体的提示忘记了。 73 | 74 | 解决方法: 75 | 76 | [http://stackoverflow.com/questions/20182676/unlock-xcode-files](http://stackoverflow.com/questions/20182676/unlock-xcode-files) 77 | 78 | 注意:解决步骤, 79 | 80 | * 右键ios/AwesomeProject.xcodeproj,显示简介 -> 开锁 -> 点击‘+’ -> 选择自己的账号(登录的用户,就是你平时要输入密码的那个账户) -> 改成‘读与写’状态; 81 | 82 | * 然后返回到AwesomeProject, 显示简介 -> 开锁 -> 点击‘+’ -> 选择自己的账号(登录的用户,就是你平时要输入密码的那个账户) -> 改成‘读与写’状态 -> 点击齿轮icon,选择‘应用到包含的项目..’; 83 | 一定要按这个顺序 84 | 85 | 好了,我的笔记完毕,当然,在配react native开发环境的时候遇到了很多问题,有点模糊,但是,升级了iOS系统之后,突然有些东西都没了,然后我就按里边的步骤去执行,保证node升级到了4.0,之后就遇到的问题少了,这2个问题是我印象比较深刻的。遇到问题的时候,一定要看清楚问题,然后google下,就会解决的。我那么笨都可以,你更可以的! 86 | 87 | #### 目前学习的资料 88 | 89 | [react native中文](http://wiki.jikexueyuan.com/project/react-native/GettingStarted.html) 90 | 91 | [深入浅出react native](http://zhuanlan.zhihu.com/FrontendMagazine/19996445) 92 | 93 | [javascript es6入门](http://es6.ruanyifeng.com/#docs/object) 94 | 95 | 当然,我学习这些的时候,一定不能把基础漏掉,我要进行之前的计划,学习underscore源码,学习Javascript基础!自己加油!!! 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /fontSize_rem_Note.md: -------------------------------------------------------------------------------- 1 | ### REM 2 | 3 | [淘宝](https://github.com/amfe/article/issues/8) 4 | 5 | [web app变革之rem](http://isux.tencent.com/web-app-rem.html) 6 | 7 | ```css 8 | html { 9 | font-size: 10px; 10 | /*默认为16px, font-size:100%;*/ 11 | } 12 | body { 13 | font-size: 1.2rem; /* 12px/10px=1.2rem */ 14 | } 15 | h1 { 16 | font-size: 2.4rem; 17 | } 18 | 19 | /* 随着浏览器缩放字体 rem + mediaquery */ 20 | /* iphone4 */ 21 | @media (min-width:414px){ 22 | html{ 23 | font-size: 10px; 24 | } 25 | /* iphone6 */ 26 | @media (min-width:340px) and (max-width: 413px){ 27 | html{ 28 | font-size: 8.8px; 29 | } 30 | } 31 | /* iphone5 */ 32 | @media (max-width: 339px){ 33 | html{ 34 | font-size: 7.6px; 35 | } 36 | } 37 | 38 | ``` 39 | 40 | ### rem bug文章 41 | 42 | [西门后花园](http://ons.me/490.html) 43 | 44 | ### js实现字体缩放 45 | [请自行翻墙](http://jsbin.com/yipeqiseyi/1/edit?html,output) 46 | 47 | ### less实现字体缩放 48 | [栗子](http://codepen.io/Dudy/pen/gpLgma) 49 | 50 | ```less 51 | @charset "utf-8"; 52 | //此class类需添加在html元素上 53 | .Dd-rem-responsive{ 54 | // 在此变量上设置默认的基准屏viewport的width 55 | @firstViewportWidth: 640px; 56 | 57 | // 以320pxViewport的Width下的font size值为基准 58 | @defaultFontSize: 40px; 59 | 60 | @media screen and (width: @firstViewportWidth){ 61 | font-size: @defaultFontSize; 62 | } 63 | 64 | // 定义一个media 方法,通过媒体判断设置不同屏幕下的html的font size值 65 | .media(@viewportWidth,@firstViewportWidth:640px){ 66 | @media (width: @viewportWidth) { 67 | font-size: @defaultFontSize / (@firstViewportWidth / @viewportWidth); 68 | } 69 | } 70 | 71 | // 一般只用传一个参数,也就是需要改变字体大小的viewport的width 72 | .media(320px); 73 | .media(360px); 74 | .media(375px); 75 | .media(384px); 76 | .media(400px); 77 | .media(414px); 78 | .media(424px); 79 | .media(480px); 80 | .media(540px); 81 | .media(720px); 82 | .media(960px); 83 | .media(966px); 84 | .media(1024px); 85 | .media(1280px); 86 | 87 | >body{ 88 | // 实际项目中,这里body的font size大小应该和reset里定义的一致,可以通过一个变量让其保持同步 89 | font-size: initial; 90 | } 91 | } 92 | 93 | //@htmlDefaultFontSize的值为@defaultFontSize的值,单位为rem 94 | .Dd-rem-responsive-comput-value(@sizeValue,@htmlDefaultFontSize:40rem){ 95 | @Dd-rem-responsive-comput-value: @sizeValue / @htmlDefaultFontSize; 96 | } 97 | 98 | .rem-responsive-demo{ 99 | margin-left: auto; 100 | margin-right: auto; 101 | 102 | //使用者只需关注这个mixin方法 103 | 104 | // 传入需要的参数,左边的是元素对应的长度,无单位,值为元素单位为px时的长度大小。右边是html 640px宽度下的的font size,如果需拓宽元素宽度,可以传参数,否则不用传 105 | .Dd-rem-responsive-comput-value(640); 106 | // 此处将“.Dd-rem-responsive-comput-value”mixin方法进行调用,会返回相应的值 107 | width: @Dd-rem-responsive-comput-value; 108 | 109 | //使用者只需关注这个mixin方法 END 110 | 111 | height: 200px; 112 | 113 | background-color: #cccccc; 114 | } 115 | ``` 116 | 117 | #### iphone手机分辨率 118 | 119 | [请戳](http://blog.sunnyxx.com/2014/09/10/iphone6-resolution/) 120 | -------------------------------------------------------------------------------- /自己整理的resetCss.md: -------------------------------------------------------------------------------- 1 | ### css 2 | 3 | ```css 4 | /**** 去掉默认的margin值 ****/ 5 | /* dt, 默认的margin和padding就为0*/ 6 | /*fieldset, 使用率不高*/ 7 | /*font, 默认里边没必要margin和padding为0*/ 8 | body, 9 | form, 10 | dl, 11 | dd, 12 | p, 13 | h1, 14 | h2, 15 | h3, 16 | h4, 17 | h5, 18 | h6{ 19 | margin: 0; 20 | } 21 | 22 | /**** 增加IE9以下块级展示,待在IE上边确认 ****/ 23 | article, 24 | aside, 25 | footer, 26 | header, 27 | nav, 28 | section { 29 | display: block; 30 | } 31 | 32 | /**** 将列表默认list style设置没没有 ****/ 33 | ul, 34 | /*li,默认没有padding和margin值*/ 35 | ol { 36 | list-style: none; 37 | margin: 0; 38 | padding: 0; 39 | } 40 | 41 | /**** 全局定义字体大小、颜色和背景颜色 ****/ 42 | body { 43 | color: #393B3F; 44 | background-color: #F0F0F0; 45 | line-height: 1.15; 46 | -webkit-font-smoothing: antialiased; 47 | -ms-text-size-adjust: 100%; 48 | -webkit-text-size-adjust: 100%; 49 | } 50 | 51 | body, 52 | input, 53 | button, 54 | select, 55 | optgroup, 56 | option, 57 | textarea, 58 | input[type="button"], 59 | input[type="submit"], 60 | input[type="reset"], 61 | pre { 62 | font-family: "Microsoft Yahei", "ff-tisa-web-pro-1", "ff-tisa-web-pro-2", "Lucida Grande", "Hiragino Sans GB", Tahoma, HELVETICA, Arial, sans-serif; 63 | } 64 | 65 | input, 66 | textarea, 67 | select, 68 | button { 69 | margin: 0; 70 | color: #393B3F; 71 | line-height: 1.15; 72 | } 73 | 74 | input[disabled], 75 | textarea[disabled] { 76 | color: #ADB9C1; 77 | cursor: not-allowed; 78 | } 79 | 80 | h1, 81 | h2, 82 | h3, 83 | h4, 84 | h5, 85 | h6 { 86 | font-size: 1em; 87 | /*font-size: 16px;*/ 88 | } 89 | 90 | /**** 设置iframe的背景色以及去除个别浏览器iframe底部的几个像素 ****/ 91 | iframe { 92 | background-color: #FFFFFF; 93 | vertical-align: middle; 94 | } 95 | 96 | /**** 移除文件链下划线,设置文字链各种状态的颜色 ****/ 97 | a { 98 | text-decoration: none; 99 | color: #52668C; 100 | background-color: transparent; /*移除在IE10下点击超链接出现的背景。*/ 101 | -webkit-tap-highlight-color: transparent; /*设置的tap A标签的时候出现的黑色高亮*/ 102 | } 103 | 104 | a:active, 105 | a:hover { 106 | outline-width: 0; /*** Remove the outline on focused links when they are also active or hovered in all browsers (opinionated).*/ 107 | } 108 | 109 | a:hover { 110 | color: #285CCB; 111 | } 112 | 113 | a:active { 114 | color: #0954B8; 115 | } 116 | 117 | a:focus { 118 | color: #0954B8; 119 | } 120 | 121 | /**** 移除IE10以下图片的边框以及去除个别浏览器的几个像素 ****/ 122 | img { 123 | vertical-align: middle; 124 | } 125 | 126 | a img { 127 | border-style: none; 128 | } 129 | 130 | /**** 设置表格的默认样式 ****/ 131 | table { 132 | border-spacing: 0; 133 | border-collapse: collapse; 134 | } 135 | 136 | td, 137 | th, 138 | caption { 139 | padding: 0; 140 | } /* 去除单元格以及caption表头的padding值 */ 141 | 142 | /* 样式公用不应该放reset里边 143 | caption { 144 | font-size: 14px; 145 | font-weight: bold; 146 | text-align: left; 147 | } 148 | 149 | caption p { 150 | font-weight: normal; 151 | } 152 | */ 153 | 154 | /**** 图片多余部分在IE 9/10/11下不隐藏的问题 需要在IE下边认证 ****/ 155 | svg:not(:root) { 156 | overflow: hidden; 157 | } 158 | ``` 159 | -------------------------------------------------------------------------------- /如何搭建react native环境.md: -------------------------------------------------------------------------------- 1 | 最近搞react-native环境遇到的问题 2 | ================================ 3 | 4 | 前奏完成后,通过`react-native init Hello`,然后启动xcode,打开项目。本应该很兴奋看到页面,结果尼玛,报错了,以下是我遇到的2个问题的笔记 5 | 6 | #### 第一个问题。如图 7 | 8 | ![reactNativeError01](/reactNativeError01.png) 9 | 10 | 将`../Hello/ios/Hello/AppDelegate.m`中的` jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"];`改成机器的地址 11 | 12 | ![reactNativeError02](/reactNativeError02.jpeg) 13 | 14 | 15 | 将`/Hello/node_modules/react-native/node_modules/react-transform-hmr/node_modules/react-proxy/node_modules/react-deep-force-update/.babelrc`删除掉 16 | 17 | 就这么愉快解决了! 18 | 19 | 20 | 如何跑通react native(iOS) 21 | ==================== 22 | 23 | > 下载的时候,请保持翻墙状态,不然可能会出现其他的问题。 24 | 25 | > 请确认本机是否已经安装了node 26 | 27 | #### 1.更新homebrew(如还未安装homebrew, [请戳](http://brew.sh/)) 28 | 29 | ```js 30 | brew update 31 | brew upgrade 32 | ``` 33 | 34 | #### 2.homebrew安装nvm, watchman, flow 35 | 36 | brew安装nvm或是通过[安装指南](https://github.com/creationix/nvm#installation) 37 | 38 | > 注意:要想react native跑通,且不会出现很多问题,一定要将node升级到4.0 39 | 40 | ```js 41 | brew install nvm && 42 | nvm --version // 查看是否安装成功 43 | // 遇到问题请看下边说明 44 | // 如果安装成功,执行下边的命令 45 | nvm install node 46 | nvm alias default node 47 | nvm ls-remote // 查看node的版本 48 | ``` 49 | 50 | 说明:中间我遇到了一个问题,无论我怎么装,都会提示这个`nvm command not found`,于是我Google找到了解决方法,链接如下: 51 | 52 | [Node Version Manager install - nvm command not found](http://stackoverflow.com/questions/16904658/node-version-manager-install-nvm-command-not-found/17707224#17707224) 53 | 54 | brew安装watchman,flow 55 | 56 | ```js 57 | brew install watchman 58 | brew install flow 59 | ``` 60 | 61 | #### 3.安装[Xcode]()7.1或更高版本(这个不做说明,因为我也不熟,刚开始接触,只要下载安装就好) 62 | 63 | 这是我查找的参考链接 64 | 65 | [【整理】Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得](http://www.crifan.com/intro_ios_simulator_in_xcode_and_usage_summary/) 66 | 67 | #### 4.最后一步,下载react native提供的demo(AwesomeProject) 68 | 69 | 执行以下链接: 70 | 71 | ```js 72 | npm install -g react-native-cli 73 | react-native init AwesomeProject 74 | cd AwesomeProject/ 75 | ``` 76 | 77 | 进入到AwesomeProject/,然后找到ios/AwesomeProject.xcodeproj,双击打开启动。 78 | 79 | 如果没报啥权限问题的话估计是成功了,但是我遇到了啥permission,或是unlock的问题,具体的提示忘记了。 80 | 81 | 解决方法: 82 | 83 | [http://stackoverflow.com/questions/20182676/unlock-xcode-files](http://stackoverflow.com/questions/20182676/unlock-xcode-files) 84 | 85 | 注意:解决步骤, 86 | 87 | * 右键ios/AwesomeProject.xcodeproj,显示简介 -> 开锁 -> 点击‘+’ -> 选择自己的账号(登录的用户,就是你平时要输入密码的那个账户) -> 改成‘读与写’状态; 88 | 89 | * 然后返回到AwesomeProject, 显示简介 -> 开锁 -> 点击‘+’ -> 选择自己的账号(登录的用户,就是你平时要输入密码的那个账户) -> 改成‘读与写’状态 -> 点击齿轮icon,选择‘应用到包含的项目..’; 90 | 一定要按这个顺序 91 | 92 | 好了,我的笔记完毕,当然,在配react native开发环境的时候遇到了很多问题,有点模糊,但是,升级了iOS系统之后,突然有些东西都没了,然后我就按里边的步骤去执行,保证node升级到了4.0,之后就遇到的问题少了,这2个问题是我印象比较深刻的。遇到问题的时候,一定要看清楚问题,然后google下,就会解决的。我那么笨都可以,你更可以的! 93 | 94 | #### 目前学习的资料 95 | 96 | [react native中文](http://wiki.jikexueyuan.com/project/react-native/GettingStarted.html) 97 | 98 | [深入浅出react native](http://zhuanlan.zhihu.com/FrontendMagazine/19996445) 99 | 100 | [javascript es6入门](http://es6.ruanyifeng.com/#docs/object) 101 | 102 | 当然,我学习这些的时候,一定不能把基础漏掉,我要进行之前的计划,学习underscore源码,学习Javascript基础!自己加油!!! 103 | 104 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /html&css/snail/snail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 长的很丑的蜗牛~哈哈哈哈哈哈哈 6 | 133 | 134 | 135 |
136 |
137 |
138 |
139 | 140 | 141 | -------------------------------------------------------------------------------- /html&css/snail/example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 长的很丑的蜗牛~哈哈哈哈哈哈哈 6 | 143 | 144 | 145 |
146 |
147 |
148 |
149 | 150 | -------------------------------------------------------------------------------- /javascript栗子/闭包: -------------------------------------------------------------------------------- 1 | //此笔记原文来自http://miyuki.42code.com/2012/05/closures/#more-619 2 | 3 | //JS中,每件事物都是一个对象,当然包括函数(PS:这句话很重要,我在很多JS文章中都看到) 4 | 5 | //闭包 6 | //什么是闭包: 7 | //闭包就是拥有许多变量并且绑定这些变量的环境的表达式(函数),因而这些变量是表达式的一部分 8 | //阮一峰的理解是:读取其他函数内部变量的函数。 9 | 10 | //闭包由来:能关闭内容的方式而得名 11 | 12 | outerMost = 'my'; //变量的存取从外到内:定义某个函数外的变量是可以被函数访问的 13 | function useLess(name){ 14 | //console.log('Yes,' + outerMost + ' ' + 'name is' + ' ' + name ); //Yes,my name is Lcm 15 | 16 | var outerMost = 'Your', //如果我们忽略这个变量,那么下面的console.log()返回的是Yes,my name is Lcm 17 | interFunc=function(){ 18 | var outerMost = 'Her'; 19 | console.log('Yes,' + outerMost + ' ' + 'name is' + ' ' + name ); 20 | }; 21 | interFunc(); //Yes,His name is Lcm 22 | console.log('Yes,' + outerMost + ' ' + 'name is' + ' ' + name ); //Yes,Your name is Lcm 23 | 24 | } 25 | useLess('Lcm'); 26 | 27 | //一个闭包即一个函数对象 28 | //上面的例子中,有个2个函数对象,分别是:useLess();和interFunc(); 29 | 30 | 31 | //一个闭包拥有他自己的作用域 32 | //变量不能从内到外读取:就如放在innerFunc()中的变量outerMost不能被其外部的函数访问到。 33 | 34 | 35 | //JS的词法作用域:变量的作用域是在定义的时候决定的,而不是执行的时候决定的。也就是词法作用域取决于源码,跟函数调用的什么木有关系。 36 | 37 | 38 | //哈哈,为什么使用闭包,@张小雪的博客里说,为了隐私! 39 | //闭包是将你的代码在公共环境中隐藏的一种方式。通过闭包,你可以简单地创建与外界隔离的私有成员 40 | 41 | (function(exports){ //匿名函数 42 | function mycode(num,num2){ //这是个嵌入函数,它仅仅存在于闭包的作用域内,所以我们能在作用域内任意的使用它 43 | return num * num2; //同时也仅仅只能在这个匿名函数的作用域内使用 44 | } 45 | 46 | exports.publicCode = function(num1,num2){ //将私有方法曝露为公有方法,我的理解就是,通过父对象的变量或是this 47 | console.log(mycode(num1,num2)); //使父对象中的私有成员让外界访问到 48 | }; 49 | })(window); 50 | 51 | publicCode(3,5); //15 52 | mycode(3,5); //私有方法,只能在匿名函数中的作用域中使用 Uncaught ReferenceError: mycode is not defined 53 | 54 | //注:哈哈,终于搞清楚以下2种的区别了 55 | //(function(){}());---->这是即时函数 56 | //(function(){})(); --->这是匿名函数的调用 57 | 58 | //使用闭包进行元编程 59 | var KeyMap = { 60 | "Enter" : 13, 61 | "Shift" : 16, 62 | "Tab" : 9, 63 | "LeftArrow" : '37' 64 | }; 65 | 66 | var txtInput = document.getElementById('myTextInput'); 67 | txtInput.onkeypress = function(e){ 68 | var code = e.keyCode || e.which; 69 | 70 | if(code === KeyMap.Enter){ 71 | console.log(txtInput.value); 72 | } 73 | } 74 | 75 | //及时的捕获一个时刻 76 | for(var key in KeyMap){ 77 | KeyMap['is' + key] = (function(compare){ 78 | return function(ev){ 79 | var code = ev.keyCode || ev.which; 80 | return code === compare; 81 | }; 82 | })(KeyMap[key]); 83 | } 84 | //使用闭包来扩展语言 85 | Function.prototype.cached = function(){ 86 | var self = this, 87 | cached = {}; 88 | 89 | return function(args){ 90 | if(args in cached){ 91 | return cached[args]; 92 | } 93 | return cached[args] = self[args]; 94 | }; 95 | }; 96 | 97 | //闭包在外界的使用 98 | //jQuery 99 | (function($){ 100 | $(document).ready(function(){ 101 | //....... 102 | }); 103 | })(jQuery); 104 | 105 | //Backbone.js 106 | (function(exports){ 107 | var Product = Backbone.Model.extend({ 108 | urlRoot : '/Products', 109 | }); 110 | var ProductList = Backbone.Collection.extend({ 111 | url : '/products', 112 | model : Product 113 | }); 114 | var Products = new ProductList; 115 | var ShoppingCartView = Backbone.View.extend({ 116 | addProduct : function(product, opts){ 117 | return CartItems.creat(product, opts); 118 | }, 119 | removeProduct : function(product, opts){ 120 | Products.remove(product, opts); 121 | }, 122 | getProduct : function(productId){ 123 | return Products.get(productId); 124 | }, 125 | getProducts : function(){ 126 | return Products.models; 127 | } 128 | }); 129 | 130 | exports.ShoppingCart = new ShoppingCartView; 131 | })(window); 132 | -------------------------------------------------------------------------------- /javascript栗子/Carousel/Carousel.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 轮播 6 | 77 | 78 | 79 |
80 | 85 | 90 | 91 | 92 |
93 | 94 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | -------------------------------------------------------------------------------- /html&css/CSS:响应式导航菜单.md: -------------------------------------------------------------------------------- 1 | CSS:响应式导航菜单 2 | ================= 3 | 4 | 之前我(原文作者)已经写过一篇关于如何制作响应式设计[手机导航 ](http://webdesignerwall.com/tutorials/mobile-navigation-design-tutorial)的教程,但现在我(原文作者)发现一个不需要使用javascript也可以制作响应式菜单的方法。它使用了简洁和语义化的html5标签,菜单可以向左,中间或右对齐。前面的教程菜单只能点击切换,本教程的菜单是通过hover切换,这样用户体验更友好。另外,用active/current来提示选中的菜单项,还可以在所有移动端浏览器和包括ie在内的桌面浏览器中运行。 5 | 6 | > [响应式菜单demo](http://webdesignerwall.com/demo/responsive-menu/) 7 | 8 | ### 目的 9 | 本教程的目的是告诉你如何把一个普通列表菜单变成下拉菜单显示在更小的屏幕上。 10 | 11 | ![图片](http://webdesignerwall.com/wp-content/uploads/2013/01/purpose-of-responsive-menu.png) 12 | 13 | 这种做法对带有许多链接的导航更有用些,如下图。你可以将所有的按钮集成一个优雅的下拉菜单。 14 | 15 | ![图片](http://webdesignerwall.com/wp-content/uploads/2013/01/purpose-of-responsive-menu-2.png) 16 | 17 | ###导航的html标签 18 | 19 | 这个是导航的标签。`