移动端基础

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下有兼容问题

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • title: 移动端Web页面适配浅析date: 2018-01-31 16:38:01tags: 移动端 适配 ...
    豆板儿阅读 12,255评论 0 16
  • 1.移动端迷之视口 为什么我称他为“迷之视口”,因为其实我听过很多人的分享,来讲解移动端视口的问题,但我好像都...
    buershero阅读 1,206评论 0 2
  • 像素 css中所用的“px”和移动设备的物理像素是不一样的 px:CSS pixels逻辑像素,浏览器使用的抽象单...
    TianZhu阅读 375评论 0 0
  • day01--基础知识&京东移动端 基础知识 屏幕 讲移动端这门课程,咱们先从手机开始说起,接下来我们来给大家看一...
    Robyn_Luo阅读 309评论 0 0
  • 移动端开发 我们现在关注的点还在移动M站上,或者我们可以叫做webapp,其实就是运行在移动端浏览器中的web网站...
    WEB攻程狮阅读 656评论 0 0