博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
移动端的几个面试小问题
阅读量:5888 次
发布时间:2019-06-19

本文共 3133 字,大约阅读时间需要 10 分钟。

1. 安卓下大面积触摸会导致触发touchmove的问题
  判断一下touchstart的上一次位置和当前位置是否一样,一样就使move return掉

 

 
2.移动端输入框被遮挡了怎么办
  在focus里去做:获取屏幕高度,比较输入框的底部是否超出了屏幕,超出就让外框向上移动超出的距离
  在blur里做:把外框回到原来位置
 
3.移动端怎么固定横屏显示
  检测手机竖屏的时候,元素给元素添加90deg的旋转
  检测手机横屏的时候,元素给元素的旋转再改为0
 
4.事件点透
  
  pc端的鼠标事件在移动端也有效果,但是在移动端使用鼠标事件会有300毫秒的延迟,如果有两个元素是重叠的,点击之后上面那个元素消失了就会出现点透事件,如果下面元素有鼠标事件,就会被触发
  因为执行过程:手指按下之后,会先执行touch事件,然后记录点击的坐标,300ms之后,在该坐标上查找元素,如果该元素绑定了鼠标事件,就把事件执行了
  解决办法: e.preventDefault ( ),或者延迟三百毫秒以上来处理事件
  不推荐的解决方法:给单个空间添加阻止冒泡
5.解决安卓下点击了软键盘缩放之后,触发不了input的blur的问题

 

 
6.目前新版浏览器不支持viewport中的禁止缩放和最大缩放值限制
  阻止默认事件
 
7.多指操作的兼容
  安卓下没有gestures事件,需要利用e.touches自己去封装。
document.addEventListener('touchstart', function(e) {    e.preventDefault();});/*init:{    el: 元素,    start:fn,    change:fn,    end:fn}*/(function(){    var box = document.querySelector('#box');    var startDeg = 0;    var startScale = 0;    css(box,"rotate",0);    css(box,"scale",100);    gesture({        el:box,        start: function(e){            startScale = css(box,"scale")/100;            startDeg = css(box,"rotate");            this.style.background = "blue";        },        change: function(e){            css(this,"scale",(e.scale * startScale)*100);            this.innerHTML = e.rotation;            css(box,"rotate",e.rotation + startDeg);        },        end: function(e){            this.style.background = "red";        }    });})();function gesture(init){    var el = init.el;    var isGesture = false;    var startDis = 0;    var startDeg = 0;    el.addEventListener('touchstart', function(e) {         if(e.touches.length >= 2){             startDis = getDis(e.touches[0],e.touches[1]);             startDeg = getDeg(e.touches[0],e.touches[1]);             isGesture = true;             init.start&&init.start.call(el,e);         }    });     el.addEventListener('touchmove', function(e) {         if(isGesture&&e.touches.length >= 2){             isGesture = true;             var nowDis = getDis(e.touches[0],e.touches[1]);             var nowDeg = getDeg(e.touches[0],e.touches[1]);             e.scale = nowDis/startDis;//缩放值             e.rotation = nowDeg - startDeg;             init.change&&init.change.call(el,e);         }    });     el.addEventListener('touchend', function(e) {         if(isGesture){             init.end&&init.end.call(el,e);         }         isGesture = false;    }); }    function getDis(Point,Point2){    return Math.sqrt((Point.pageX - Point2.pageX)*(Point.pageX - Point2.pageX) + (Point.pageY - Point2.pageY)*(Point.pageY - Point2.pageY));}function getDeg(Point,Point2){    var y = Point.pageY - Point2.pageY;    var x = Point.pageX - Point2.pageX;    return Math.atan2(y,x)/Math.PI*180;}

 

 
8.滑屏时的卡顿问题
  阻止默认事件
 
9.transition移动端的闪屏问题
  把外框变成3D的,一般情况下不会遇到。
 
10.使用了3d做动画之后,3d元素下边的文字失真的问题
  给上面动画的幻灯片什么的外层加上绝对定位,定位里面一层加上相对定位。
 
11.部分安卓下调用file,只能调用到相册,不能调用摄像头
  在input上加上一个caption属性,但是如果是x5或者是ios浏览器下就会出现只能调到摄像头的问题,所以要加一个判断,判断浏览器的版本,如果是iso浏览器或者x5浏览器,就把加caption属性这个renturn掉不加
 
12.audio的不能自动播放问题
  给document加上.play()
 
13.如何判断网络环境是无线还是流量
  navigator里面有所有和网络相关的东西

转载于:https://www.cnblogs.com/hjj2ldq/p/7487356.html

你可能感兴趣的文章
Java中String和byte[]间的转换浅析
查看>>
辞职信也要玩出高big
查看>>
什么是异步
查看>>
WordPress 主题切换
查看>>
cookie和session
查看>>
【java】path和classpath
查看>>
UVa 10057 - A mid-summer night's dream
查看>>
解决3 字节的 UTF-8 序列的字节 3 无效
查看>>
jQuery获取属性值
查看>>
浅谈浏览器兼容性问题-(1)产生、看待与思
查看>>
iOS8中定位服务的变化(CLLocationManager协议方法不响应,无法回掉GPS方法,不出现获取权限提示)...
查看>>
BeanUtils\DBUtils
查看>>
Recover the String
查看>>
VC 创建托盘,托盘tooltip。右键托盘菜单,点击别的地方会隐藏掉的问题。
查看>>
11 种在大多数教程中找不到的JavaScript技巧
查看>>
第一天,新的定义
查看>>
WPF EventSetter Handler Command
查看>>
polya定理,环形涂色
查看>>
day4-装饰器前奏
查看>>
【Jest】笔记三:全局变量
查看>>