多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
#### 使用H5的history改善AJAX 比如有一个分页功能,用的ajax,当用户点击浏览器的返回按钮时,返回的不是分页的上一页数据,而是页面的上一个页面了。这里可以使用h5的history进行优化。 ``` //缓存当前页码 var pageIndex = window.localStorage.pageIndex || 0; function nextPage() { window.localStorage.pageIndex = ++pageIndex; requestData(pageIndex); //把当前页push到state中,这样浏览器history中就多了当前页 //三个参数: 页面数据\title(没用)\当前页url window.history.pushState({page: pageIndex}, null, window.location.href); } //监听用户点击浏览器的前进后退 window.addEventListener("popState", function(event) { var page = 0; if(event.state != null) { page = event.state.page; requestData(page); window.localStorage.pageIndex = page; } }) window.onload=function(){ var pageIndex = window.localStorage.pageIndex || 0; requestData(pageIndex); } ``` popState只能监听pushState进去的东西! 浏览器有一个队列,用来存放访问记录,包括页面的网址还有state数据。这个队列只有pushState了才有数据,否则就没有。 #### 雪碧图 雪碧图其实就是多个小图片合并在一起,然后调整这张大图的位置来显示不同图片。这种做法能够减少http请求,但缺点就是图片是提前做好的,分辨率是固定的,高清屏会模糊,并且如果想要修改图片的颜色的话就只能重做图片了。我们应该用图标或svg来代替雪碧图。 #### 图片上传相关 ``` var reader = new FileReader(file); //读取为base64格式 reader.readAsDataURL(file); reader.onload = function(e) { var base64 = e.target.result; if(file.size > 1024) { //背景透明0.5 } //如果图片大的话赋值src过程可能会卡一下,这里设置div的透明度告诉用户图片正在处理中来提高体验 $img.attr("src", base64); if(file.size > 1024) { //还原透明度 } //后续上传等操作 } ``` 压缩图片可以用canvas,原理就是把一张图片画到一个小画布上,再把画布的内容导出成base64,就能拿到一张很小的图片了。 ``` var ctx = cvs.getContext("2d"); ctx.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight); var quality = 0.6; var newImageData = cvs.toDataURL(mimeType, quality); var _img = new Image(); _img.src = newImageData; ``` 文件上传进度: ``` xhr.upload.onprogress = function(e) { if(e.lengthComputable) { callback(e.loaded / e.total); } } ```