手机浏览器与我的那些事(三)
来源:互联网 发布:淘宝企业店铺注册资金 编辑:程序博客网 时间:2024/05/22 00:30
最近一直在学习,cordova与vue的结合 cordova与ios的结合 原生路由框架 axios的封装 好多好多 。。。
分享下我最开始的一套代码;
背景:上级要求在2周内完成一个手机H5版本 ,界面有19个,随带的效果大概有loading,toast,confirm,轮播图,上拉加载,懒加载图片,没有接口的搜索功能。。。
感受:对领导莫大的信任感觉到热(lei)泪(liu)盈(man)眶(mian) ,只有2周,当然2周是开发时间,自动算上周末14天;
动手前的想法:
1.1界面的切换用路由的话,担心出问题(主要是还没能驾驭vue到生产),所以就来了简单粗暴的方式,只换内容,不换url。
1.2只换内容,不换url,大家应该猜到了 display block none;
2.1没有接口的搜索,实际上还是有搜索接口的,可是一个返回数据像蜗牛的接口,你怎么敢用。
2.2过程就不说了,直接上实现方式
存:首先发送一个请求所有数据的接口,再用localstorage存起来,将关键字段抽取出来组成数组,存的item很讲究的---1存数据 2存每个用户的数据(理论上是搜索接口返回的) 所以item的拼接是用户字段+数据字段
取:一般来说输入框都是input,input有一个oninput事件,是oninput不是onchange ,这个很重要!!! oninput取值再用 arr.indexOf(value)>-1得到搜索数据的索引,逆推回去,得到搜索数据的详情
3.1大家都知道手机适配是很关键的,但是很少有人关注横竖屏切换的用户体验 毕竟是浏览器这个还是要考虑的,之前我有发过rem布局的写法,现在优化了一下
(function(doc,win){
//此处是兼容ios的写法
var supportOrientation = (typeof window.orientation === 'number' &&
typeof window.onorientationchange === 'object');
var init = function(){
var orientation,docEl = doc.documentElement, dpr=Math.min(win.devicePixelRatio, 3),count = 0;
var updateOrientation = function(){
clientWidth = docEl.clientWidth;
clientHeight = docEl.clientHeight;
if(supportOrientation){
orientation = window.orientation
switch(orientation){
case 90:
case -90:
orientation = 'landscape';//横屏
break;
default:
orientation = 'portrait';//竖屏
break;
}
}else{
orientation = (window.innerWidth > window.innerHeight) ? 'landscape' : 'portrait';
}
docEl.setAttribute('class',orientation);
if(orientation==='portrait'){
if (clientWidth == undefined) return;
//ui给的效果图是安卓iphone6来做的 所以此处是750 ,老实说这个if在这里没一点用,但是淘宝的写法有用到dpr,还是自己不够专业 所以此处暂留
if (clientWidth / dpr > 750) {
clientWidth = 750 * dpr;
}
//根部的fontsize是20px (这个看个人);为什么要用Math。round()是因为项目中是rem和px混合使用,在做数据滚动的时候会出现1px的问题,加上Math。round就行了
docEl.style.fontSize = Math.round(40 * (clientWidth / 750)) + 'px';
// document.body.scrollTop = 0 ;
// alert(docEl.style.fontSize)
}
if(orientation==='landscape'){
if (clientHeight === undefined) return;
if (clientHeight / dpr > 750) {
clientHeight = 750 * dpr;
}
//横屏的fontsize 还可以用原生js写一些操作 :在竖屏浏览到界面一半时横屏,横屏的界面处在哪个位置可以在这里设置 scolltop
docEl.style.fontSize = Math.round(40 * (clientHeight / 750)) + 'px';
// document.body.scrollTop = Math.round(40 * (clientHeight / 750))*8 ;
// alert(docEl.style.fontSize)
}
};
//此处是重点中的重点 这样写的原因是:在横竖屏切换操作时,无法一开始正确的获取设备的宽度(高度),所以要用settimeout,找了好久的帖子才找到的黑魔法
if(supportOrientation){
window.addEventListener('orientationchange',function(){
if(count<20){
count++;
setTimeout(updateOrientation,10)
}
},false);
}else{
//监听resize事件
window.addEventListener('resize',function(){
if(count<20){
count++;
setTimeout(updateOrientation,10)
}
},false);
}
updateOrientation();
};
window.addEventListener('DOMContentLoaded',init,false);
})(document, window);
4.1 懒加载图片 这个网上有很多 我用的是img的onload替换src,这里也用了settimeout,解释原因可能知识不太够。描述下现象吧:第一次显示过渡图片(一般为公司形象图片)直到真实图片加载完毕完成懒加载,但是第二次就不行了
function changeImgSrc(obj) {
setTimeout(function () {
if (obj.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数
obj.onload = null;
}
var trueSrc = $(obj).attr('data-src');
$(obj).attr('src', trueSrc);
}, 100)
}
5结束
结果---大体上差强人意,发了一笔奖金给女朋友买了点东西 ^_^
- 手机浏览器与我的那些事(三)
- 手机浏览器与我的那些事(一)
- 手机浏览器与我的那些事(二)
- 手机浏览器与我的那些事(四)
- 手机浏览器与我的那些事(五)
- 与浏览器的那些事!
- 计算机中那些事儿(三):我与Dos的不解情缘---初识篇
- 浏览器的那些事
- 我与地图的那些事(百度)
- 我与Linux的那些事
- 那些年我不知道的TDD(三)
- 我与G那些事
- 四、浏览器的那些事
- 手机浏览器UA测试(三)
- 2009年关于我与IT的那些事
- 【Java二十周年】我与Java的那些事
- 关于QT的那些事(三)
- QT C++与QML 交互的那些事 之(你的就是我的我的就是你的)
- Sitemesh 3 的使用及配置
- C#循环删除List中某个元素
- Python 程序员都会喜欢的 6 个库
- 利用Python从文件中读取字符串(解决乱码问题)
- JAVA 数组、排序 day5
- 手机浏览器与我的那些事(三)
- Swift3.0视频教程
- 【Excel】vs2015利用mfc读excel时的类型
- 操作系统页面调度算法
- Linux学习——磁盘管理、用户管理、权限管理命令
- “gjw” is of a model that is not supported by this version of Xcode. Please use a different device.
- Controller相关
- SpringMVC企业开发实战
- 减少广播接收延时