自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 收藏
  • 关注

原创 移动端input呼出的键盘,换行(enter)变为搜索

1.首先,input 要放在 form里面。2.  这时 "换行" 已经变成  “前往”,3.如果想变成 “搜索”,input 设置  type="search"

2017-08-24 17:17:53 8712 2

原创 vue hash模式的缺点。

最近碰到的问题。1. 回退无法回到本来的状态。或者说不方便。比如,在一个很长的list中,点击某个item去看详情,回退会回到list的顶端。2. 无法使用锚点进行定位,与原来的路由冲突。

2017-08-02 14:55:29 4835

原创 关于“keyup”的使用

首先,说下原则。所有keyup事件都要写成节流函数,这样可以避免很多问题。附上一个简易的节流函数实现function throttle(func, wait, mustRun) {        //var timeout,        var startTime = new Date();        return function() {            va

2017-07-21 14:54:04 1117

原创 关于IE8的坑 (不间断更新)

所有坑都是真实存在,在实际项目中遇到的。1.调试IE8的兼容问题,一定要一定要 在xp系统下进行。因为win7下的ie8和xp下的表现是不同的。虽然你可以在ie11打开F12,把模式改成IE8,我想说这没个卵用。遇到有报错的,即使不影响使用也要尽量解决,指不定在什么系统,什么浏览器,就会造成网页无法运行。2.全局变量一定要加 var,不要以为变量不加 var,就会变成全局变量。我只能送你2...

2017-07-21 10:29:49 611

转载 extend 的js实现

有个很基础的问题。我以前就知道有浅复制和深复制。也知道浅复制更改远对象会对现在的对象产生影响。知道了  深复制其实就是遇到对象和数组就循环复制。为什么这样就是深复制,就不会对原对象产生影响呢。很简单。因为 深复制  ,经过循环对象后    复制的其实都是 int string这些基础类型。这样就没有影响了。而浅复制,是直接复制对象,这样其实复制的是引用。

2017-07-06 10:42:14 217

原创 工作中的经验教训

1.即使你再有把握,即使你的代码提升很大,再优化,也不要在别人的方法上改东西。你可以自己另起一个方法,自用。2.项目上线前,不要改东西,一个标点都不要。每次改,都要提价测试组进行测试。

2017-05-11 10:50:23 1376

转载 es6学习之路(8):对象的扩展

1.属性的简洁表示法vvar target = { a: 1 };var source1 = { b: 2 };var source2 = { c: 3 };Object.assign(target, source1, source2);target // {a:1, b:2, c:3}ES6允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。var foo

2017-02-25 14:22:04 285

转载 es6学习之路(7):函数的扩展

1.默认值

2017-02-17 14:41:17 217

转载 es6学习之路(6):数组的扩展

1. Array.from()Array.from方法用于将两类对象转为真正的数组:类似数组的对象( array-like object )和可遍历( iterable )的对象(包括 ES6 新增的数据结构 Set 和Map )。下面是一个类似数组的对象,Array.from将它转为真正的数组。let arrayLike = {'0': 'a','1': 'b','2

2017-02-17 11:19:13 315

转载 es6学习之路(5):数值的扩展

1.Number.isFinite(), Number.isNaN()ES6 在 Number 对象上,新提供了Number.isFinite()和Number.isNaN()两个方法。Number.isFinite()用来检查一个数值是否为有限的( finite )。Number.isNaN()用来检查一个值是否为NaN。2.Number.parseInt(), Nu

2017-02-17 10:48:25 227

转载 es6学习之路(4):字符串扩展

1.includes(), startsWith(), endsWith()includes() :返回布尔值,表示是否找到了参数字符串。startsWith() :返回布尔值,表示参数字符串是否在源字符串的头部。endsWith() :返回布尔值,表示参数字符串是否在源字符串的尾部。2.repeat()'x'.repeat(3) // "xxx"'hello'.repea

2017-02-17 10:22:04 205

转载 es6学习之路(3):解构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构( Destructuring )。本质上,这种写法属于 “ 模式匹配 ” ,只要等号两边的模式相同,左边的变量就会被赋予对应的值1,数组:let [foo, [[bar], baz]] = [1, [[2], 3]];foo // 1foo // 1bar // 2baz // 3let [ ,

2017-02-14 16:10:24 222

原创 es6学习之路(2):作用域,不存在变量提升,避免暂时性死区,与全局对象的属性脱钩

1、ES6 新增了let命令,用来声明变量。它的用法类似于var.       const声明一个只读的常量。一旦声明,常量的值就不能改变.const声明的变量不得改变值,这意味着, const 一旦声明变量,就必须立即初始化,不能留到以后赋值。    这2个都是在所在的代码块内有效。意味着他们有自己的作用域。而且,不存在变量,所以存在“暂时性死区”的问题。    ES6 明确规定

2017-02-14 15:26:04 638

转载 es6学习之路(1) 安装

转载自 http://www.shaoqun.com/a/239505.aspx本文介绍Babel6.x的安装过程~首先呢,可以使用Babel在线转换 https://babeljs.io/repl/ 然后进入主题:安装Babel(命令行环境,针对Babel6.x版本) 1、首先安装babel-cli(用于在终端使用babel)    n

2017-02-14 15:10:24 235

原创 运用setTimeout 替换 setInterval

通用的代码如下, setTimeout(function(){ //do something setTimeout(arguments.callee, time); }, time);具体的代码如下 Repeating Timers Example

2017-01-06 09:45:04 1295

翻译 惰性载入函数(使if不必每次都执行,good idear)

function createXHR(){debugger; if (typeof XMLHttpRequest != "undefined"){ createXHR = function(){ return new XMLHttpRequest(); };

2017-01-05 16:18:47 350

翻译 作用域安全的构造函数

一般的构造函数是这个样子的。function Person(name, age, job){ this.name = name; this.age = age; this.job = job; }var person1 = new Person("Nicholas", 29, "Software Engineer

2017-01-05 15:32:39 232

原创 避免因为错误而影响程序。区分致命错误和非致命错误

任何错误处理策略中最重要的一个部分,就是确定错误是否致命。对于非致命错误,可以根据下列一个或多个条件来确定:不影响用户的主要任务;只影响页面的一部分;可以恢复;重复相同的操作可以消除错误;本质上,非致命错误并不是需要关注的问题。想一下,大公司的网站就不会出问题吗,为什么他们很少出问题呢。其实可能是他们出了问题,但是我们没发现,或者是没受到影响。因此,预测一些常见的错误,

2017-01-04 22:12:58 820

转载 JSONP的优劣点

一个简单的例子 JSONP Example function handleResponse(response){ alert("You're at IP address " + response.ip + ", which is in " + response.city + ", " + response.region

2017-01-04 17:29:21 459

原创 ajax的实现,基于XHR的原理

function createXHR(){ if (typeof XMLHttpRequest != "undefined"){ return new XMLHttpRequest(); //IE8及以上和其他浏览器,不管IE6,IE7这段就行了 } else if (typeof ActiveXObject != "undefined"){ if

2017-01-04 17:10:24 473

原创 JSON.stringify和JSON.parse

标准的json,属性都要加双引号,不加或者单引号都会报错。1、JSON.stringify  这个方法接收3个参数,该方法会过滤掉 值为undefinde的属性。第一个是 json对象,第二个可以是数组或者函数,第三个参数如果是数字,代表缩进的空格字数,如果是字符串代表用该字符串代替空格进行缩进。(同时会自动换行)如果属性有个toJSON,会优先按照这个属性的方法返回 var

2017-01-03 18:14:41 429

原创 获取焦点元素

js                       var ele = document.activeElementj;jquery         var ele = $(“:focus”)

2016-12-22 15:08:10 418

原创 tips: hasOwnProperty和 object.property 有什么不一样呢

var  a = {"test":undefined};console.log(a.hasOwnProperty("test"));// trueif(a["test"]){console.log("Y");}else{console.log("F");}// F

2016-12-14 11:04:08 244

原创 gulp 几个用法,打包,压缩,监听文件

一、首先,最重要的一点    代码的文件名必须是 gulpfile.js.二,写法1.合并多个js文件var gulp = require('gulp'), concat = require('gulp-concat'); gulp.task('testConcat', function () { gulp.src('src/js/*.js') .p

2016-11-28 15:13:46 3281

转载 gulp教程之gulp中文API

原文链接:http://www.ydcss.com/archives/424简介:本文主要翻译gulp官方API,加上自己一点点理解。gulp API docs1、gulp.src(globs[, options])1.1、说明:src方法是指定需要处理的源文件的路径,gulp借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,

2016-11-28 11:15:43 274

原创 利用Browsersync实现快速测试。(修改文件自动刷新,避免手动f5)

Browsersync基于node。1. 安装 npm install -g browser-sync2.命令行输入browser-sync start --server --files "css/*.css,html/*.html"。即可实现,修改css下面的任何css文件,html下面的任何html文件会自动刷新。这样会创建一个http服务器,端口为3000。3....

2016-11-28 10:55:38 709

翻译 Tips:replace()

function htmlEscape(text){ return text.replace(/[<>"&]/g, function(match, pos, originalText){ switch(match){ case "<": return "<

2016-11-22 23:29:11 209

翻译 Tips:函数的内部属性 arguments和 this

arguments是一个类数组对象,包含这传入函数中的所有参数。this 简单理解就是调用当前函数的对象arguments.callee  ,这个属性是一个指针,指向拥有这个arguments对象的函数请看一个递归函数function factorial(num){            if (num                 return 1;     

2016-11-22 00:37:00 337

翻译 tips:用闭包优雅地写出json排序方法。

function createComparisonFunction(propertyName) { return function(object1, object2){ var value1 = object1[propertyName]; var value2 = object2[prope

2016-11-21 23:34:13 354

原创 tips:js没有块级作用域。

js没有块级作用域可能会导致一些疑惑。在其他类C语言中, 由{}封闭的代码都有自己的作用域(如果用ECMAScript的话来讲,就是他们自己的执行环境)。但是 ,js没有这个概念。例如:if(true){ var color = "blue";}console.log(color);// "blue"对于有块级作用于的语言来讲 ,color会在{}的代码块执行完毕后销毁。但是js不会

2016-11-13 12:04:44 324

原创 腾讯登录做的安全处理

请求qq密码 MD5图片验证码  sign (qq+密码+验证码)合一起再进行MD5然后用户登录了 session里面去掉图片验证码id。

2016-10-21 11:20:23 332

转载 有限状态机模型

作者:流云诸葛出处:http://www.cnblogs.com/lyzg/1. 有限状态机概述简单说,有限状态机是一种模型,模型都用来模拟事物,能够被有限状态机这种模型模拟的事物,一般都有以下特点:1)可以用状态来描述事物,并且任一时刻,事物总是处于一种状态;2)事物拥有的状态总数是有限的;3)通过触发事物的某些行为,可以导致事物从一种状态过渡

2016-08-31 17:58:57 1169

原创 关于浏览器缓存的知识

1.基本认识浏览器缓存分为强缓存和协商缓存强缓存,就是浏览器直接从客户端缓存中加载资源(用于很长时间不更新的资源)协商缓存,就是浏览器想服务器发出一个请求,这个资源是从服务器拿还是从本地缓存中读取呢(协商),服务器判断这个资源没有改变,就给客户端返回一个304,告诉客户端直接从缓存读取就行。如果资源改变了,就直接返回这个资源的新版本。2.原理实现强缓存原理与实现:强缓存

2016-08-31 11:38:13 359

原创 一看就明白的图片懒加载插件lazyload

一看就明白的图片懒加载插件lazyload,直接demo lazyload .lazy { width:60px; height: 60px; } <!-- 参考地址https://github.com/jieyou/lazyload layzeload需要设置宽度高度,可以写在css文件里, --> <!-

2016-08-31 11:34:56 2073

原创 Node+express+handlebars最简单例子

新手最需要就是个实例。在网上找了许多,贴代码又不写明是哪个文件,讲一大堆不知道在说什么。下面是一个最简单的实例,就三个文件,HTML模板文件,json数据,和express2.js文件。下载后,安装module,然后直接运行express2.js即可。需要掌握的知识:1,安装node2,安装module3,运行以及访问.demo: 链接:http://pan.baidu.com

2016-08-23 09:57:16 1640

转载 Node入门

这是一本入门非常好的书,里面讲的非常非常详细,每一步都有代码实例,对我这样的入门学生非常非常友善,极力推荐,让更多的人看到。里面的模块化思想很好,只要是面向对象的语言都是相通的。关于保存图片那一步,原代码少了一句话,设置目录,我在自己的demo里已经补充。作者: Manuel Kiessling翻译: goddyzhao & GrayZhang & MondayChen

2016-08-22 12:42:25 272

原创 小tips:nodeJs找不到模块 Cannot find module 'xxx'

console.log(process.mainModule.paths);执行这个语句,就可以看到当前的module了如果你在其他地方安装了,复制到这个目录下就可以了。

2016-08-22 11:50:43 2033

原创 观察者模式与发布/订阅模式区别

最大的区别是调度的地方。虽然两种模式都存在订阅者和发布者(具体观察者可认为是订阅者、具体目标可认为是发布者,取消订阅也可以看作是取消观察者),但是观察者模式是由具体目标调度的,而发布/订阅模式是统一由调度中心调的,所以观察者模式的订阅者与发布者之间是存在依赖的,而发布/订阅模式则不会。

2016-08-11 16:46:57 200

转载 设计模式之发布/订阅模式

Observer var pubsub = (function() { //订阅者列表 var events = {}; var subUid = 0; //发布 function publish(eventName, args) { if (!eve

2016-08-11 16:43:05 211

原创 设计模式之观察者模式

Observer 点击 function ObserverList(){ this.observerList = []; } ObserverList.prototype.add = function(observer){ return this.observerList.p

2016-08-11 16:38:36 245

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除