移动端的几个面试小问题

1. 安卓下大面积触摸会导致触发touchmove的问题

  判断一下touchstart的上一次位置和当前位置是否一样,一样就使move return掉

<body>
<div class="page">
    <div id="box"></div>
</div>
<script type="text/javascript">
var page = document.querySelector(‘.page‘);
page.addEventListener(‘touchstart‘, function(e) {
    e.preventDefault();
});
var lastPoint = {};
box.addEventListener(‘touchstart‘, function(e) {
    lastPoint = {
        x:e.changedTouches[0].pageX,
        y:e.changedTouches[0].pageY
    }
    this.innerHTML = "start";
    this.innerHTML += "<br/>x:"+e.changedTouches[0].pageX;
    this.innerHTML += "<br/>y:"+e.changedTouches[0].pageY;
});
box.addEventListener(‘touchmove‘, function(e) {
    if(e.changedTouches[0].pageX == lastPoint.x
    &&e.changedTouches[0].pageY == lastPoint.Y){
        return;
    }

    this.innerHTML += "<br/>move";
    this.innerHTML = "x:"+e.changedTouches[0].pageX;
    this.innerHTML += "<br/>y:"+e.changedTouches[0].pageY;
    lastPoint = {
        x:e.changedTouches[0].pageX,
        y:e.changedTouches[0].pageY
    }
});
</script>

2.移动端输入框被遮挡了怎么办

  在focus里去做:获取屏幕高度,比较输入框的底部是否超出了屏幕,超出就让外框向上移动超出的距离

  在blur里做:把外框回到原来位置

<div class="page">
    <div class="info"></div>
    <input type="text" class="text" name="">
</div>
<script type="text/javascript" src="js/mTween.js"></script>
<script type="text/javascript">
(function(){
    var page = document.querySelector(‘.page‘);
    var text = document.querySelector(‘.text‘);
    var info = document.querySelector(‘.info‘);
    var old = 0;
    css(page,"translateY",0);
    /*
        移动端输入框被遮挡的问题
            1) 在软件盘弹出之后(在focus中加个延迟时间),获取input的坐标
            2) 判断input是否遮挡
                1. 判断 input 是否在 可视区的高度以下
            3) 如果被遮挡了 就向上移动整个页面
                1. 用被软件盘遮挡的距离     

    */
    text.addEventListener(‘focus‘, function(e) {
        setTimeout(function(){
            //延迟一段时间之后,才可以获取到软键盘弹出之后的坐标
            var rect = text.getBoundingClientRect();
            var h = document.documentElement.clientHeight;
            old = css(page,"translateY");
            if(rect.bottom > h){
                //info.innerHTML = "被遮挡了";
                var dis = rect.bottom - h;
                css(page,"translateY", old - dis);
            }
        },1000);
    });
    text.addEventListener(‘blur‘, function(e) {
        old = css(page,"translateY",old);
    });
})();
</script>

3.移动端怎么固定横屏显示

  检测手机竖屏的时候,元素给元素添加90deg的旋转

  检测手机横屏的时候,元素给元素的旋转再改为0

4.事件点透

  

  pc端的鼠标事件在移动端也有效果,但是在移动端使用鼠标事件会有300毫秒的延迟,如果有两个元素是重叠的,点击之后上面那个元素消失了就会出现点透事件,如果下面元素有鼠标事件,就会被触发

  因为执行过程:手指按下之后,会先执行touch事件,然后记录点击的坐标,300ms之后,在该坐标上查找元素,如果该元素绑定了鼠标事件,就把事件执行了

  解决办法: e.preventDefault ( ),或者延迟三百毫秒以上来处理事件

  不推荐的解决方法:给单个空间添加阻止冒泡

5.解决安卓下点击了软键盘缩放之后,触发不了input的blur的问题

<body>
<input id="text" type="text" name="">
<div id="info"></div>
<script type="text/javascript">
(function(){
    var text = document.querySelector(‘#text‘);
    var info = document.querySelector(‘#info‘);
    text.onfocus = function(){
        //软键盘的弹出 会影响窗口的大小发生改变
        // 展开是 改变一次,收缩起来又改变一次
        window.addEventListener(‘resize‘, toResize);
    };
    function toResize(){
        window.removeEventListener(‘resize‘, toResize);
        window.addEventListener(‘resize‘, toBlur);
    }
    function toBlur(){
        window.removeEventListener(‘resize‘, toBlur);
        text.blur();
    }
})();
</script>

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里面有所有和网络相关的东西

时间: 2024-08-24 02:38:18

移动端的几个面试小问题的相关文章

关于多线程的几个问题(面试小问题,Java篇)

面试官想考考我多线程方面的问题. 1.请说下线程与进程的关系. 答:<操作系统>中是这样说的 (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程.线程是操作系统可识别的最小执行和调度单位. (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源.同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储).但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量. (3)处理机分给线程,即真正在处理机上运行的是线

移动端全屏滑动的小插件,简单,轻便,好用,只有3k swiper,myswiper,page,stage

https://github.com/donglegend/mySwiper mySwiper 移动端全屏滑动的小插件,简单,轻便,好用,只有3k 下载 直接下载 bower install mySwiper 预览 预览demo 使用 支持amd和cmd规范 直接引入 <link rel="stylesheet" type="text/css" href="dist/swiper.css"> <script type="

关于一些设计模式(面试小问题,Java篇)

今天在某公司(不透露了)写了一套Java面试题.有个题大概是这样的. Which design pattern used in Java.lang.Runtime? 就是说java.lang.Runtime里,用了什么设计模式 还有java.utils.collection里用了什么设计模式. 当时由于对这冷门知识了解的不够多,而且api也读的少,所以一时答不上来. 回到家搜了下. 答: Runtiome里 单例模式. 1)  每一个Java程序都有一个Runtime类的单一实例. 2)  通过

在弱网传输的情况下,是怎么做到节约流量的(面试小问题,Android篇)

马上毕业了,在毕业之际,我辞掉了以前的实习工作,主要是工作内容不太感兴趣.最近在找工作,主要是找Java和Android方面的工作.自以为学得不错,但是面试屡屡受挫.先提一下问到的一些问题吧. 第一个:在弱网传输的情况下,是怎么做到节约流量的? 由于Android接触的确实不多,这个问题自然没有很愉快的答上来. 我这样回答的:将一些数据进行压缩,例如传一个字符串,先将字符串转换成字符数组的形式,然后对这个字符数组进行压缩.然后就是对很多传输对象(一般都是JSON,XML这种方式太笨重了),提取公

JVM(七),JVM面试小知识

七.JVM面试小知识 1.JVM三大性能调优参数 -Xms -Xmx -Xss 的含义 2.java内存模型中堆和栈的区别 3.不同JDK版本中的intern()方法的区别 原文地址:https://www.cnblogs.com/xzmxddx/p/10366891.html

跨界!Omi 发布多端统一框架 Omip 打通小程序与 Web 腾讯开源 2月28日

https://mp.weixin.qq.com/s/z5qm-2bHk_BCJAwaodrMIg 跨界!Omi 发布多端统一框架 Omip 打通小程序与 Web 腾讯开源 2月28日 原文地址:https://www.cnblogs.com/yuanjiangw/p/10774063.html

美团面试小感——认知撑起的格局

前两天因准备美团的面试,导致公众号文章断更了一天,今天就以一篇纯干货来弥补大家.美团的整个面试收获颇丰,与大家分享. 好多年没有面试了,为此专门准备了一天.在美团一个下午经历了四个多小时的三轮技术面试,才发现为面试所准备的面试题几乎无用,整个过程全靠临场发挥和经验积累. 面试之后对整个过程进行复盘.反思,又有了很大的收获,而且这些收获有必要分享给大家.下面会从面试题的学习感悟."面试"你的面试官.认知与格局等方面与大家聊聊. 缘起 一直在用美团的产品,但真正对美团印象深刻的却是它的技术

拿不到想要的offer,只缘身在CV中,关于一些面试小知识

在平时我们面试的过程总总会遇到一些面试官问一些平时我们不怎么注意的问题,当问出来的时候,面试者通常都是一脸懵逼,这和我想象中的不一样阿,怎么不按照套路出牌,当然一些小知识更能体现出你的细心和好学,以下分析20个面试中的小知识,共勉~.·整理的这份PDF有从基础到进阶.含有BATJ.字节跳动面试专题,算法专题,高端技术专题,混合开发专题,java面试专题,Android,Java小知识,到性能优化.线程.View.OpenCV.NDK等应有尽有.还有辅之相关的视频+学习笔记 (更多完整项目下载.未

storm面试小题

1.大纲 Storm工作原理是什么? 流的模式是什么?默认是什么? 对于mapreduce如何理解? Storm的特点和特性是什么? Storm组件有哪些? 2.Storm工作原理是什么? 相对于hadoop而言,strom的优势在于对于应对大数据两的实时数据处理上,因为hadoop在处理大数据过程中高延时的特点使得其面对实时数据缺乏足够的应对策略,目前strom已经被广泛的应用在诸如金融系统,实时推送系统,预警系统,网站统计等多个场景中,他可伸缩性高,不存在数据丢失,高容错性,高健壮性等特点都