美文网首页
移动端基础

移动端基础

作者: 年过古稀的Coder | 来源:发表于2018-02-23 14:09 被阅读0次

viewport

layout viewport(布局视口)

一般移动设备的浏览器都默认设置了一个viewport 元标签,定义一个虚拟的layout viewport(布局视口),用于解决早期的页面在手机上显示的问题。iOS, Android基本都将这个视口分辨率设置为 980px,所以pc上的网页基本能在手机上呈现,只不过元素看上去很小,一般默认可以通过手动缩放网页。

visual viewport(视觉视口)和物理像素

visual viewport(视觉视口)备物理屏幕的可视区域,屏幕显示器的物理像素,同样尺寸的屏幕,像素密度大的设备,硬件像素会更多。

ideal viewport(理想视口)和 dpi (设备逻辑像素)

ideal viewport(理想视口)通常是我们说的屏幕分辨率。
dip (设备逻辑像素)跟设备的硬件像素无关的。一个 dip 在任意像素密度的设备屏幕上都占据相同的空间。
逻辑像素宽度x倍率 = 物理像素宽度

<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
属性名 取值 描述
width 正整数 或 device-width 定义视口的宽度,单位为像素
height 正整数 或 device-height 定义视口的高度,单位为像素,一般不用
initial-scale [0.0-10.0] 定义初始缩放值
minimum-scale [0.0-10.0] 定义缩小最小比例,它必须小于或等于maximum-scale设置
maximum-scale [0.0-10.0] 定义放大最大比例,它必须大于或等于minimum-scale设置
user-scalable yes/no 定义是否允许用户手动缩放页面,默认值yes

width属性被用来控制layout viewport(布局视口)的宽度,layout viewport(布局视口)宽度默认值是设备厂家指定的。iOS, Android基本都将这个视口分辨率设置为 980px。我们可以 width=320 这样设为确切的像素数,也可以设为device-width这一特殊值,一般为了自适应布局,普遍的做法是将width设置为device-width
width=device-width 也就是将layout viewport(布局视口)的宽度设置 ideal viewport(理想视口)的宽度。网页缩放比例为100%时,一个CSS像素就对应一个 dpi(设备逻辑像素),而layout viewport(布局视口)的宽度,ideal viewport(理想视口)的宽度(通常说的分辨率),dpi的宽度值是相等的。

自适应font-size的设置

(function () {
    window.addEventListener("orientation" in window ? "deviceorientation" : "resize", setSize);
    setSize();
    function setSize() {
        var html = document.documentElement;
        var hWidth = html.getBoundingClientRect().width;
        html.style.fontSize = hWidth / 15 + "px";//根据不同的屏幕宽度重置html的字体大小//15为自定义比例
    }
})()

获取设备逻辑像素,设置根元素font-size的大小为页面宽度/15,而rem是相对于根元素的font-size大小,也就是说1rem = 页面宽度/15,假设设计图宽度为750px,那么 1rem = 750/15 = 50px,假设设计图上一元素宽度为 25px,则 转换成rem为 25/50 = 0.5rem;在实际应用手机屏幕逻辑像素为320px,则1rem = 320/15 = 21.33px;则设计图25px宽度元素,在css中写为:width:.5rem,则实际显示尺寸为25/50*21.33 = 10.66px;

rem

rem(font size of the root element)是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位。看到rem大家一定会想起em单位,em(font size of the element)是指相对于父元素的字体大小的单位。它们之间其实很相似,只不过一个计算的规则是依赖根元素一个是依赖父元素计算。

移动端事件

在模拟器下用事件绑定的方式添加touch事件,时好时坏,但是在真机上没有问题,最好用事件监听添加事件

在移动端也支持mouse事件,但是mouse事件的执行,会有300ms左右的延迟

ontouchstart//手指触碰元素
ontouchmove//手指触碰元素之后在屏幕上滑动
ontouchend//手指触碰元素之后在屏幕上抬起

事件点透

手指按下之后,会先执行touch事件,然后记录点击的坐标,300ms之后,在该坐标上查找元素,如果元素上有鼠标事件就执行

解决办法:

preventDefault()//在webkit的模拟器下,目前已经不支持在document上阻止默认事件,真机没问题

移动端event属性

clientX/clientY //相对于屏幕左上角的坐标

pageX/pageY//相对于页面左上角的坐标

  • ev.changedTouches[index]//手指操作的集合(触发当前事件的手指列表)
  • ev.targetTouches 当前元素上的手指列表
  • ev.touches 当前屏幕上的手指列表

index//第几根手指
function () {
    var touchs = ev.changedTouches[0];
    touchs.pageY;
}

阻止默认事件(preventDefault())可以解决以下问题

  • 在iOS10之后,viewport中禁止用户缩放和最大缩放比例失效
  • 鼠标事件,在移动端会有点透问题
  • 在iOS下会有系统默认的回弹(橡皮筋问题)

阻止默认事件 带来的危害

  • 阻止文字的选中
  • 阻止所有的系统菜单
  • 阻止页面默认的系统滚动条
  • 阻止页面上所有的链接跳转
  • 阻止页面上的表单控件获得焦点

不推荐的解决方案

  • 给单个控件添加阻止冒泡

各种方案

  • input可以在touchstart的时候 手动获得焦点
  • 链接可以在JS中自己添加跳转

查询横竖屏

window.orientation//记录手机横竖屏状态

  • undefind //设备不支持横竖屏切换
  • 90 -90 //横屏
  • 0 180 //竖屏

orientationchange//监测横竖屏切换

window.addEventListener(‘orientation’ in window ?'orientationchange':'resize',function(){
    setSize();
    //放置有部分手机带有动画,所以延迟在执行一次
    setTimeout(function(){
        setSize();
    },500)
})
function setSize(){
            var html = document.documentElement;
            html.style.fontSize = html.clientWidth/16 + "px";
        }

devicemotion//检测重力加速度

安卓和iOS下数值相反

window.addEventListener('devicemotion',function(e){
    var motion = e.accelerationIncludingGravity;
    montion.x//x方向加速度
    montion.y//y方向加速度
    montion.z//z方向加速度
})

deviceorientation//检测手机旋转角度变化

window.addEventListener('deviceorientation',function(e){
    var motion = e.accelerationIncludingGravity;
    e.beta//围绕x轴旋转(-180 - 180)
    e.gama.y//围绕y轴旋转(-90 - 90)
    e.alpha//围绕z轴旋转(0 - 360)
})

navigator.userAgent//判断是安卓还是iOS

function getIos(){
    var u = navigator.userAgent;
    //var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
    var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
    return isiOS;
}

transform:'rotateZ' //iOS下有兼容问题

相关文章

  • 移动布局

    移动web开发流式布局 ====================== 1.0 移动端基础 1.1浏览器现状 PC端...

  • 移动端基础

    viewport layout viewport(布局视口) 一般移动设备的浏览器都默认设置了一个viewport...

  • 移动端基础

    移动端布局计算Flex:采用Flex布局的元素,它的所有子元素自动成为容器成员,可以自动分配空间,更适合做移动端开...

  • 移动端网页开发基础

    移动端开发基础 1.移动端浏览器主要是对webkit内核进行兼容2.开发的移动端主要是针对于手机端开发3.移动端开...

  • 关于像素问题收藏的好文章

    移动端尺寸基础知识从设备像素比到移动适配弄清移动端网页中viewport、retina、高清图、dp单位等

  • 移动端开发现状与发展浅析

    之前负责移动端基础架构相关的工作,并做了一段时间 ToB 的移动技术框架输出,所以对移动端的现状以及移动端开发这个...

  • 流式布局&flex布局

    流式布局 1. 移动端基础 1.1浏览器现状 1.2手机屏幕的现状 1.3常见移动端屏幕尺寸 1.4移动端调试方法...

  • 移动前端开发项目学习记录

    2_移动端前端开发注意事项 移动端开发一般使用HTML5 3.移动端前端基础架构单词释义:a)mkdir: ma...

  • 移动WEB开发

    了解移动端基础 浏览器移动端的浏览器大多都是基于webkit修改的内核,国内尚无自主研发的内核。所以,兼容移动端主...

  • 移动端布局(1)

    1.移动端基础 #1.1.屏幕 移动端和pc端开发差异比较大的就是屏幕了,这里说的差异主要体现在移动端大屏幕碎片化...

网友评论

      本文标题:移动端基础

      本文链接:https://www.haomeiwen.com/subject/bxcxxftx.html