;

原理:如果成功会触发window的blur事件 (function($)) { $(‘a[href^=mailto]’).each(function() { var href = $(this).attr(‘href’); $(this).click(function() { var t; var self = $(this); $(window).blur(function() { // The browser apparently responded, so stop the timeout. clearTimeout(t); }); t = setTimeout(function() { // The browser did not respond after 500ms, so open an alternative URL. document.location.href = ‘…’; }, 500); }); }); })(jQuery); 参考链接:https://www.uncinc.nl/en/articles/dealing-mailto-links-if-no-mail-client-available

检测mailto是否成功打开了客户端 18 天前
;

大多数浏览器的ES5实现之中,每一个对象都有__proto__属性,指向对应的构造函数的prototype属性

prototype和__proto__ 2018年7月15日
;

看图之前我们首先来了解几个对象原型的基本知识: 例子: function Fn() {}// Fn为构造函数 var f1 = new Fn();//f1是Fn构造函数创建出来的对象 构造函数的prototype属性值就是对象原型。(Fn.prototype就是对象的原型) 构造函数的prototype属性值的类型就是对象 typeof Fn.prototype===object. 对象原型中的constructor属性指向构造函数 (Fn.prototype.constructor===Fn) 对象的__proto__属性值就是对象的原型。(f1.__proto__就是对象原型) Fn.prototype===f1.__proto__ 其实它们两个就是同一个对象—对象的原型。 所有Fn.prototype.__proto__===Object.prototype typeof Object.prototype ===object。 Object.prototype.__proto__===null。 我讨论原型就是指的对象与原型对象之间的关系。所以原型链也称之为对象链。 有了以上的基础知识,下面的原型链图你就可以看明白了。 所以对象f1的原型链:f1.__proto__—->Fn.prototype.__proto_…

一张图瞬间让你明白原型链结构 2018年7月12日
;

简介 铁路图(railroad diagram),又叫语法图(syntax diagrams),是一种表示形式语法的方式,是巴科斯范式和扩展巴科斯范式的图形化表示。 基本规则 1.从左边界开始,沿着轨道到右边界。 2.沿途,你在圆框中遇到的是字面量,在方块中遇到的是规则或描述。 3.任何沿着轨道能走通的序列都是合法的。 4.任何不能沿着轨道走通的序列都是非法的。 5.末端只有一个竖条的铁路图,表示允许在任意一对符号中插入空白。而在末端有两个竖条的铁路图则不允许。 示例 以javascript为例,声明变量的语法。 则语法如下: 1、空。 2、从name和=之间绕行。 var name; 3、中间横向语句。 var name = expression; 4、在expression和;之间循环。 var name, name,…,name; var name = expression, name = expression,…, name = expression; 5、在分号之后循环。 var name = expression; var name = expression; … 注:圆角向内表示循环,向外则不循环。或者将左下弧理解为出口,右下弧理解为入口。 来源:https://blog.csdn.net/u013961139/ar…

铁路图 2018年4月2日
;

示例数据 const animals = [ { "name": "cat", "size": "small", "weight": 5 }, { "name": "dog", "size": "small", "weight": 10 }, { "name": "lion", "size": "medium", "weight": 150 }, { "name": "elephant", "size": "big", "weight": 5000 } ] map() 定义和用法: map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。 map() 方法按照原始数组元素顺序依次处理元素。 语法: array.map(function(currentValue,index,arr), thisValue) 示例:获取所有动物的n…

map(),filter(),reduce(),foreach()比较 2018年3月3日
;

var o1 = { a: 1 }; var o2 = { b: 2 }; var o3 = { c: 3 }; var obj = Object.assign(o1, o2, o3);

Javascript 对象合并 2018年2月9日
;

bxslider轮播插件 pc端正常,但是切换到移动端后,每次轮播切换时候在控制台会有此提示(控制台报错,但不影响功能) Uncaught DOMException: Failed to execute ‘releasePointerCapture’ on ‘Element’: InvalidPointerId 查看官网demo此报错同样存在 1.查找代码 touchPoints = (typeof orig.changedTouches !== ‘undefined’) ? orig.changedTouches : [orig]; 2.在后面添加如下代码 var chromePointerEvents = typeof PointerEvent === ‘function’; if (chromePointerEvents) { if (orig.pointerId === undefined) { return; } }

Failed to execute releasePointerCapture on Element: InvalidPointerId 2018年1月5日

步骤1. 手机通过USB连接到电脑 步骤2. 手机设置 开发者选项->USB调试 步骤3. 保证电脑可以访问google.com 步骤4. 进入电脑端调试页面 chrome://inspect/#devices 步骤5. 手机用chrome打开需要调试的网站 步骤6. 电脑端会显示手机上打开的所有页面,点击inspect即可 备注: 如果页面一直显示加载白屏尝试以下操作 chrome://appcache-internals/# 清除一下这里的缓存

chrome远程调试 2017年12月31日
;

(function() { var h = {} , mt = {} , c = { id: "9ee4bb9d5bb1d41420031974fceab60f", dm: ["willless.com"], js: "tongji.baidu.com/hm-web/js/", etrk: [], icon: ”, ctrk: false, align: -1, nv: -1, vdur: 1800000, age: 31536000000, rec: 0, rp: [], trust: 0, vcard: 0, qiao: 0, lxb: 0, conv: 0, med: 0, cvcc: ”, cvcf: [], apps: ” }; var q = void 0 , r = !0 , t = null , u = !1; mt.cookie = {}; mt.cookie.set = function(a, b, d) { var f; d.H && (f = new Date, f.setTime(f.getTime() + d.H)); document.cookie = a + "=" + b + (d.domain ? &quo…

百度统计,源代码解读 2017年12月11日
;

//形如这种,应该叫做unix时间戳, 1363737600000 //形如这种,我们称之为ISO-8601格式的时间 2017-09-28T16:00:00Z 一般跨时区的应用,数据库中都是存储这两种格式化的时间,前端根据自己所在的时区展示对用的本地时间 把unix时间戳格式化为本地时间,推荐使用moment.js moment.unix(1318781876).format(‘YYYY-MM-DD’) 把一个ISO时间根据时区转换,推荐使用使用moment.js //demo var date = ‘2017-09-28T16:00:00Z’; var timezone = ‘Asia/Shanghai’; moment(date).tz(timezone).format(‘YYYY-MM-DD hh:mm:ss’); 如果是在微信小程序中使用,你需要先去moment官方下载moment-timezone-with-data.js这个文件到你的小程序应用中 const moment = require("./moment-timezone-with-data"); var date = ‘2017-09-28T16:00:00Z’; var timezone = ‘"Asia/Shanghai’; momen…

跨时区时间转换 2017年11月28日
;

1.一维数组排序 timeList=[‘2017-10-05′,’2017-10-01′,’2017-10-03′,’2017-10-02′,’2017-10-09′]; timeList.sort(); console.log(timeList); 2.对象数组的排序 sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同 var arr = [ {name:’zopp’,age:0}, {name:’gpp’,age:18}, {name:’yjj’,age:8} ]; function compare(property){ return function(a,b){ var value1 = a[property]; var value2 = b[property]; return value1 – value2; } } console.log(arr.sort(compare(‘age’))) 当对日期排序就需要处理一下 var arr = [ {name:’zopp’,age:’2017-11-5′}, {name:’gpp’,age:’2017-11-9′}, {name:’yjj’,age:’2017-11-1′} ]; function compare(property)…

js中sort方法根据数组中对象的某一个属性值进行排序 2017年11月20日
;

toUTCString() toISOString() http://www.jianshu.com/p/415f8c276388 https://segmentfault.com/a/1190000003710954?mType=Group https://segmentfault.com/a/1190000007581722 http://www.w3school.com.cn/jsref/jsref_obj_date.asp

时间相关函数 2017年11月1日
;

array.map(callback, [thisArg]) map 方法会给原数组中的每个元素都按顺序调用一次 callback 函数。callback 每次执行后的返回值组合起来形成一个新数组。如果 thisArg 参数有值,则每次 callback 函数被调用的时候,this 都会指向 thisArg 参数上的这个对象。如果省略了 thisArg 参数,或者赋值为 null 或 undefined,则 this 指向全局对象 。 var numbers = [1, 4, 9]; var roots = numbers.map(Math.sqrt); /* roots的值为[1, 2, 3], numbers的值仍为[1, 4, 9]*/

map函数 2017年10月29日
;

JSON.parse() 方法用于将一个 JSON 字符串转换为对象。 语法:JSON.parse(text[, reviver]) 参数说明: text:必需, 一个有效的 JSON 字符串。 reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。 返回值: 返回给定 JSON 字符串转换后的对象。 JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串。 语法:JSON.stringify(value[, replacer[, space]]) 参数说明: value: 必需, 一个有效的 JSON 字符串。 replacer: 可选。用于转换结果的函数或数组。 如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:””。 如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当 value 参数也为数组时,将忽略 replacer 数组。 space: 可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格…

JSON.parse与JSON.stringify及toString 2017年10月27日
;

// Converts canvas to an image function convertCanvasToImage(canvas) { var image = new Image(); image.src = canvas.toDataURL("image/png"); return image; } // Converts image to canvas; returns new canvas element function convertImageToCanvas(image) { var canvas = document.createElement("canvas"); canvas.width = image.width; canvas.height = image.height; canvas.getContext("2d").drawImage(image, 0, 0); return canvas; }

canvas与image互相转换 2017年10月20日
;

步骤一: 地址栏输入,chrome://version,“个人资料路径”即为本地路径 步骤二: 复制地址在文件夹内打开,进入到“Extensions”目录 如何知道插件对应的目录 步骤三: 地址栏输入,chrome://extensions/ 此处ID即为对应的目录名

如何查看chrome插件源文件 2017年7月16日
;

1.对象属性遍历 var pricelist={1: "35", 2: "70", 3: "105", 4: "140", 5: "175", 6: "210", 7: "245", 8: "280", 9: "315", 10: "350"}; for (var key in pricelist) { console.log(key+"="+pricelist[key]) } for (attr in window) { console.log(attr); } //枚举window对象的所有属性 2.数组遍历 方式一: var pricelist = [35,70,105,140,175,210,245,280,315,350]; for (var key in pricelist) { console.log(pricelist[key]) } 方式二: var pricelist = [35,70,105,140,175,210,245,280,315,350]; for (var i=0;i<pricelist…

对象及数组属性遍历 2017年5月8日
;

基本结构 <link href="video-js.css" rel="stylesheet" type="text/css"/> <script src="videojs-ie8.min.js"></script> <script src="video.js"></script> <video id="my-video" class="video-js vjs-default-skin my_video_1-dimensions vjs-fluid vjs-controls-enabled vjs-workinghover vjs-has-started vjs-paused vjs-user-inactive vjs-big-play-centered" controls preload="auto" data-setup="{}"> <source src="url.mp4" type=’video/mp4′> </video> 切换源地址 va…

videojs视频地址切换 2017年5月6日
;

代码: .imgview_inner{height: 500px; display: -webkit-box; display: -webkit-flex; display: flex; -webkit-box-align: center; -webkit-align-items: center; align-items: center; -webkit-box-pack: center; -webkit-justify-content: center; justify-content: center; } <div class="imgview_inner"><img src="http://gameweb-img.qq.com/gad/20170317/phphgAjtN.1489739479.jpg"></div>

flex实现图片垂直居中 2017年4月25日
;

格式: console.log("%c要显示的字符串","css样式"); 示例代码 console.clear(); console.log("%c ", "border-top: 4px dotted #dadada; font-size: 42px;"); console.log("%chttp://willless.com", "font-size: 42px; color: #fff; text-shadow: 0 1px 0 #eaeaea, 0 2px 0 #dadada, 0 3px 0 #bababa, 0 4px 0 #b0b0b0, 0 5px 0 #a0a0a0, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 10px 10px rgba(0,0,0,.2), 0 20px 20px rgba(0,0,0,.15);"); console.log("%c ", &qu…

对console.log的信息添加样式 2017年4月24日
;

前提: 1.当元素设置box-sizing:border-box; 2.同时设置了上下padding 问题: height等于line-height 就无法实现垂直居中 修正: line-height=height-padding*2

box-sizing 影响垂直居中 2017年4月14日
;

slice() 把匹配元素集合缩减为指定的指数范围的子集。 <ul> <li>list item 1</li> <li>list item 2</li> <li>list item 3</li> <li>list item 4</li> <li>list item 5</li> </ul> $(‘li’).slice(2).css(‘background-color’, ‘red’);选中的是后面三个li元素。

jquery slice用法 2017年3月29日
;

问题描述: 1,通过微信朋友圈链接点击进入网站,导航按钮点击失效。 2,跳转到其它页面再点击导航按钮功能却正常。 3,浏览器及微信web开发者工具内问题无法重现,一切功能正常。 4,css各种修改,位置调整及元素标签修改,问题依旧。 5,类似结构其它网站无此bug。 权宜之计: 通过把相关的js写到头部页面内,问题消失。 相关: 其它项目中也遇到在微信打开后一些奇怪的边框,通过调整z-index解决

微信朋友圈链接,导航按钮点击失效 2017年3月17日
;

html <a class="label label-success" onclick="fastform({$row[‘id’]},$(this))">提交</a> 函数内 function fastform(id,$this) { //对象已经传递进来 } How to use $(this) in functions?

function内传递$(this) 2017年3月6日