js-xlsx 介绍由SheetJS出品的js-xlsx是一款非常方便的只需要纯JS即可读取和导出excel的工具库,功能强大,支持格式众多,支持xls、xlsx、ods(一种OpenOffice专有表格文件格式)等十几种格式。本文全部都是以xlsx格式为例。 官方github:https://github.com/SheetJS/js-xlsx本文配套demo在线演示地址:http://dem... 阅读全文
js-xlsx 介绍由SheetJS出品的js-xlsx是一款非常方便的只需要纯JS即可读取和导出excel的工具库,功能强大,支持格式众多,支持xls、xlsx、ods(一种OpenOffice专有表格文件格式)等十几种格式。本文全部都是以xlsx格式为例。 官方github:https://github.com/SheetJS/js-xlsx本文配套demo在线演示地址:http://dem... 阅读全文
概述常见排序算法: 傻瓜排序这个傻瓜排序是我自己给起的名字,就是按照人的常规思维进行排序,不考虑任何时间复杂度和空间复杂度。话说如果给你一个数组让你手工排序,你的思路会是什么样的呢?我想你肯定是这样的: 整体用肉眼扫描一遍,找到最小的,插入结果里面,然后再扫描剩下的数字,找到最小的,再次插入结果里面,直至原始数组变空,是的,没错,这里说的傻瓜排序就是这个思路。 /** * 傻瓜排... 阅读全文
兼容性较好的3种方法方法一:float+overflow实现:左边浮动+固定宽度,右边overflow:hidden即可,注意,右边不要设置width:100%。由于设置overflow:hidden并不会触发IE6-浏览器的haslayout属性,所以若要兼容IE6需要设置zoom:1。 原理:overflow:hidden会触发BFC,BFC不会浮动元素重叠,因此会重新计算宽度。 <... 阅读全文
前言所有人都知道,localStorage和sessionStorage的最大区别是生命周期,一个永久,一个仅针对一个会话期间有效。那么,到底什么是一个会话?多个标签页之间的数据是否会共享呢? 后台的session我们对会话session的认识一般都是从后台的session开始的,比如Java的session,它是基于往cookie写入一个JSESSIONID来实现的,所以,只要你不是打开一个隐... 阅读全文
老生常谈的问题,虽然有些不太常用,但还是总结一下。 图片法这种方法利用了图片没有跨域限制的特点,仅适用于不需要获取服务端响应的场景,如日志统计等,且只能以GET方式请求,一般很少用。 var img = new Image();img.src = 'http://other.domain.com/log.png'; JSONPXmlHttpRequest有跨域限制,但是script标签没有,... 阅读全文
正文网上很多写法都有点问题或者难以理解,下面这一张图说明所有问题: 补充说明: defer 和 async 在下载这块儿是一样的,相较于HTML解析都是异步的;它俩的差别在于脚本下载完之后何时执行,async什么时候下载完什么时候执行,并且会中断HTML解析,defer则在HTML解析完成之后,DOMContentLoaded 事件触发之前执行。async只能用于对其它JS没有任何依赖... 阅读全文
本文demo:http://demo.haoji.me/2018/04/28-webworker/ JS是单线程语言由于JS设计的初衷就是用来进行一些简单的用户交互以及DOM操作,为了避免复杂性,从一开始JS就被设计成一门单线程语言,现在如是,以后也不会变。 然后正是由于单线程的缘故,当我们需要在前端运行一些大运算量的代码时,浏览器肯定会陷入卡顿。为了解决前端大运算量问题,HTML5引入了We... 阅读全文
背景前阵子突然发现博客的目录导航只要一滚动就会消失,其中有一段这样的代码: $(window).on('scroll', function(e){ var top = document.body.scrollTop; if(top <= 100) $('.markdown-nav-wrapper').addClass('hide'); else if(localStora... 阅读全文
前言作为一个前端程序员,难免会有一些专属自己的小扩展,没必要每一个都发到Chrome应用商店去,虽然可以勾选“开发者模式”来运行本地插件,但是每次启动都会有一个烦人的“请停用以开发者模式运行的扩展程序”提示,这个提示有多烦人,接触过的人都知道,启动的时候它不立即提示,等过了几秒钟等你打开某个网页开始执行某些操作时它突然弹出来干扰你的操作,真是苦不堪言!所以总想着如何把它给去掉。 解决方法网上... 阅读全文
背景早上到公司发现个人网站打不开,一直在转,用xshell连接服务器,虽然能连上,但是卡到爆,处于完全无法操作的状态,登录阿里云后台发现CPU使用率持续超过45%: 可怜的1M带宽也被全部占用(也就是截图中的1122kbps): 想查看是哪个进程占用这么大的CPU和带宽,但是带宽被未知程序占用,xshell完全连不上,怎么破!最后只能强制重启服务器,重启之后CPU和带宽立马恢复正常,网... 阅读全文
前言曾经对这一块不知道多熟悉,一年多没接触移动端开发,竟然连远程调试怎么打开都不记得了,所以看来啊,任何东西无论多简单都要做笔记,这是这的! 下面开始其实真的非常简单! 第一步,开启USB调试模式这个就不用细说了,是个人都知道怎么开启。 第二步,连接手机和电脑连上基本就不用管了,驱动都不用装,这个后面再细说。 第三步,手机使用Chrome访问任一网站也可以不使用Chrome,但是使用Chr... 阅读全文
正文直接上代码: var obj = {a:1, b:2};console.log(obj);obj.b = 3;console.log(obj) 效果如下: 收起时显示的还是旧的值,展开时才是新的,最近就因为这个问题坑了我半天,后来才发现代码没问题,是Chrome控制台显示问题。水文一篇,记录下来! ... 阅读全文
正文如下代码: <form> <input type="number" name="test"/> <input type="submit" value="提交"/></form> 输入时可以正常输入数字和小数点,但是提交的时候浏览器会拦截,不允许输入小数: 修改如下即可,step表示允许的小数位个数,比如2位小数用0.01,3... 阅读全文
本文有待完善,参考:https://www.zhihu.com/question/20756479 https://zh.wikihow.com/%E8%AE%A1%E7%AE%97%E5%9C%86%E5%91%A8%E7%8E%87-Pi 先看代码4行代码实现计算圆周率: var pai = 0, flag = false;for(var i=1; i<10000000; i+=2... 阅读全文
常见错误console.log(0.1+0.2); // 输出 0.30000000000000004console.log(0.3-0.1); // 输出:0.19999999999999998console.log(0.07*100); // 输出 7.000000000000001console.log(8.8/100); // 输出 0.08800000000000001 相关文章: ... 阅读全文
如题鉴于之前的域名太长不太好记,经过长时间的慎重考虑以及一段时间的精心准备,本站即日起(2017年11月21日)开始启用全新域名 http://haoji.me (好记么)!旧域名除了极少数仍然保留外,大部分都做了301自动重定向处理,所以大可放心。 做这个决定也是下了一番决心,因为本站上线已有1年多,换域名要做的工作非常多:买域名、重新备案、代码改造、cnzz统计需要重新弄,QQ登录、微博登... 阅读全文
背景和感叹多说自2017年6月关闭后,本站的评论系统就一直处于关闭状态,有严重拖延症的我终于在最近疯狂晚上加班了一阵把它完成了,拖拖拉拉这么久了,再拖下去自己估计都快疯掉了。 转纯前端快1年来,感觉自己Java的功底真的是在退步,评论这样一个很简单的东西我竟然很多地方都写的很吃力,方案换了一套又一套,代码重写了一遍又一遍,再加上自己的强迫症太严重,哎,具体细节后面再道来。 最终效果界面效果大部... 阅读全文
公告本站评论功能今天上线,欢迎大家随意评论、灌水! 这个页面是专门的评论测试页面,除非恶意谩骂、攻击、色情等评论,一般我不会删除的。 ... 阅读全文
正文前端先假设有如下setCookie方法: function setCookie(name, value, day, path, domain){ day = day || 30; path = path || '/'; var str = name + '=' + value + '; '; if(day) str += 'expires=' + new Date(D... 阅读全文
正文N年前就知道,只是没记录过,所以今天写下来。主要是借助window.onbeforeunload来实现: JS写法: window.onbeforeunload = function(){ return '修改尚未保存,确定放弃吗?';};//或者这样写:window.onbeforeunload = function(event){ event.returnValue = '... 阅读全文