精华内容
下载资源
问答
  • 移动端开发所需的简历模板,有了这个简历模板,可以快速创建简历,方便找工作时使用
  • 移动端开发源码demo

    2018-05-28 16:23:42
    移动端开发源码demo
  • 移动端开发

    2018-02-28 14:40:10
    关于移动端开发的一些代码 display:flex;flex-direction 设置主轴方向,确定弹性子元素排列方式 flex-wrap 当弹性子元素超出弹性容器范围时是否换行 flex-flow flex-direction和flex-wrap属性的快捷方式,复合属性 ...
  • 心血制作,总结了移动端开发中遇到的问题 踩过得坑。心血制作,总结了移动端开发中遇到的问题 踩过得坑。心血制作,总结了移动端开发中遇到的问题 踩过得坑。心血制作,总结了移动端开发中遇到的问题 踩过得坑。
  • 主要介绍了移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法 ,需要的朋友可以参考下
  • vue框架移动端开发入门指南vue框架移动端开发入门指南
  • 基于 Webpack 开发和构建 传统多页面静态站点的前端工程化方案,支持ie8 同时适用于 PC 端和移动端
  • 移动端开发工作总结

    2015-12-19 15:02:57
    我非常热爱本职工作,能够严以律己,遵守工程部的各项制度,保持对工作负责的工作态度,谦逊学习,积极进取,不断提高自己的技术水平,力争把领导分配的每一项任务做的最好。
  • 主要给大家介绍的是基于Vue2的移动端环境搭建,移动端大家更多想到的是响应布局,我们根据不同大小的屏幕进行适配,当然少不了我们的重头戏rem,移动端相比pc端就没什么特别的了。我会一步一步带领大家进入Vue2的...
  • 伴随着深度学习技术的广泛使用,越来越多的深度学习模型被部署到移动端或IoT设备上运行,对于从事人工智能研发的相关人员,掌握对应的移动端开发技术是十分必要的,也将对自己的职业生涯产生极大的促进作用! 本课程将从...
  • 2018mui教程 mui实战视频教程 web移动端开发教程+源码 课程简介: 结合MUI框架完成HTML5移动端混合应用开发(微信实战)。 本课程将介绍如何使用HTML5完成移动端混合应用开发,课程以移动端框架MUI为基础,以微信...
  • 这个项目收集移动端开发所需要的一些资源与小技巧
  • 这一篇文章主要对移动端开发相关的基础知识点,进行总结。从移动端开发的一些概念、专有名词、缩放、viewport移动端事件、适配问题以及一些工作中沟通经常会用到这些方面来说一下移动端 1-移动端开发相关概念 ...

    引言

    这一篇文章主要对移动端开发相关的基础知识点,进行总结。从移动端开发的一些概念、专有名词、缩放、viewport移动端事件、适配问题以及一些工作中沟通经常会用到这些方面来说一下移动端

    1-移动端开发相关概念

    移动端特点

    移动端与 PC 端网页有所不同,有以下几个特点

    屏幕大小

    ​屏幕大小指屏幕的对角线的长度,单位一般是英寸。常见的手机屏幕大小 3.5、4、4.7、5.0、5.5、6.0等。常见手机屏幕查看网址 http://screensiz.es/
    在这里插入图片描述

    注意:

    • 英寸的英文为 inch , 英尺的英文是 foot
    • 1foot = 12inch 1inch=2.54cm

    屏幕分辨率

    屏幕分辨率是指屏幕横纵向上的像素点数。一般表示形式 x * y 或者 y * x 表示。例如 IPhone 6 的屏幕分辨率为 750 * 1334,华为 P30 的分辨率为 2340 * 1080。
    在这里插入图片描述

    注意

    • 屏幕分辨率是一个固定值,生产出来就固定了,无论手机屏幕还是电脑屏幕。
    • 屏幕分辨率与显示分辨率不同。计算机可以修改显示分辨率,信号传递给屏幕,屏幕会进行计算,在屏幕上显示。
    • 1080P 的分辨率是1920x1080
    • 2K 屏幕是单一方向分辨率具有约 2000 像素的显示设备。最标准的 2K 分辨率为 2048×1024

    几款手机的分辨率

    型号分辨率
    IPhone 3GS320 * 480
    IPhone 4 / 4s640 * 960
    IPhone 5 / 5s640 * 1136
    IPhone 6 / 7 / 8750 * 1334
    华为 P301080 * 2340
    IPhone X1125 * 2436

    像素相关

    物理像素 / 设备像素

    • 设备像素 / 物理像素是一个长度单位。 1 物理像素对应显示设备中一个微小的物理部件。
    • 设备像素是手机屏幕的一个参数,由手机制造商决定。
      在这里插入图片描述

    设备独立像素 / 设备无关像素

    • 设备独立像素,简称 DIP(device-independent pixel),又称为设备无关像素,是一个长度计量单位。
    • 设备独立像素也是手机屏幕的一个参数,由手机制造商决定。
    • 1 个设备独立像素可以认为是计算机坐标系统中的一个点,代表可以通过程序控制使用的虚拟像素。
      • 普通屏幕下 1 设备独立像素 等于 1 物理像素
      • 高清屏幕下 1 设备独立像素 等于 N 物理像素

    Retina 屏幕

    Retina 是苹果公司 2010 年推出的一种显示标准,是把更多的像素点压缩至一块屏幕里,从而达到更高的分辨率并提高屏幕显示的细腻程度。

    在这里插入图片描述
    设备独立像素的出现,使得即使在高分辨率的屏幕下,也可以正常尺寸的显示元素,代码不受到设备的影响。

    几款手机的屏幕像素参数,点击这里查看更多

    型号设备像素总和设备独立像素总和
    IPhone 3GS320 * 480320 * 480
    IPhone 4 / 4s640 * 960320 * 480
    IPhone 5 / 5s640 * 1136320 * 568
    IPhone 6 / 7 / 8750 * 1334375 * 667
    HUAWEI P101080 x 1920360 x 640
    IPhone X1125 * 2436375 * 812

    CSS 像素 / 逻辑像素

    CSS 像素是一个抽象的长度单位,单位 px,主要用来精确度量和控制 WEB 网页上的内容。

    • CSS 像素不能直接跟现实中的长度单位换算
    • CSS 像素主要用在 CSS 与 JS 中控制元素的大小

    位图像素

    位图像素也是一个长度单位。位图像素是栅格图像(如:png,jpg,gif等)最小的数据单元。
    在这里插入图片描述

    位图和矢量图

    • 位图图像是由称作像素(图片元素)的单个点组成的。放大后会失真。
    • 矢量图,也称为面向对象的图像或绘图图像,在数学上定义为一系列由线连接的点。放大后不会失真。软件有Adobe Illustrator,Sketch

    1个位图像素对应于1个物理像素,图片才能得到完美清晰的展示

    像素之间的关系

    • CSS 像素 == 独立设备像素 == 逻辑像素 == DIP == 位图像素
    • 在一个标准的显示密度下(普通屏),一个 CSS 像素对应着一个设备像素,高清屏幕下一个 CSS 像素 等于 N 个物理像素

    像素密度

    屏幕上每英寸可以显示的像素点的数量,单位是 ppi (pixels per inch ),这里还有另一个单位 dpi(dots per inch),两个值的计算方式都一样,只是使用的场景不同。 描述屏幕属性时使用 ppi,开发过程中描述屏幕设备使用 dpi。
    在这里插入图片描述
    苹果曾经给出个一个标准:手机屏幕达到 300PPI、平板屏幕达到 220PPI、笔记本电脑屏幕达到 200PPI 即可认为是 Retina 屏幕。

    像素比 / N倍屏

    • 像素比(DPR dpr): 单一方向上设备物理像素和设备独立像素的比例。
      window.devicePixelRatio
    • 像素比的作用
      程序可以根据像素比来显示不同的图片,达到清晰显示网页的效果。
      @media screen and (-webkit-min-device-pixel-ratio: 2) {
      .logo {
          background-image: url('./image/logo@2x.png');
      }
      }
      
    • 注意:
      并不是所有的图片都这样处理,只需要处理那些页面布局需要的图片和图标即可

    视口

    PC 端

    在 PC 端,视口指的是浏览器的可视区域。其宽度和浏览器窗口的宽度保持一致。在 CSS 标准文档中,视口也被称为初始包含块,它是所有 CSS 百分比宽度推算的根源。

    移动端

    移动端的视口与 PC 端不同,有三个视口

    • 布局视口
    • 视觉视口
    • 理想视口

    布局视口

    • 布局视口是用来放置网页内容的区域。
    • 一般移动设备的浏览器都默认定义一个虚拟的布局视口(layout viewport),用于解决早期的页面在手机上显示的问题。 视口大小由浏览器厂商决定,大多数设备的布局视口大小为 980px。
      document.documentElement.clientWidth 
      document.documentElement.clientHeight
      

    视觉视口

    • 视觉视口就是用户可见的区域。
    • 获取方式
      window.innerWidth
      window.innerHeight
      
    • 注:不缩放的情况下,视觉视口宽度 == 布局视口宽度。

    理想视口

    • 宽度与屏幕同宽的布局视口称为理想视口。 理想视口的好处
      • 用户不需要缩放和滚动条就能看到网站的全部内容。
      • 针对移动端的设计稿更容易开发。
    • 注意:理想视口不是真实存在的视口
    • 设置理想视口的方法
      <meta name="viewport" content="width=device-width" />
      // 或者
      <meta name="viewport" content="initial-scale=1.0" />
      // 合体
      <meta name="viewport" content="width=device-width,initial-scale=1.0" />
      

    2-缩放

    PC 端

    放大时

    • 布局视口变小
    • 视觉视口变小
    • 元素的像素大小不变

    缩小时

    • 布局视口变大
    • 视觉视口变大
    • 元素的像素大小不变

    移动端

    放大时

    • 布局视口不变
    • 视觉视口变小

    缩小时

    • 布局视口不变
    • 视觉视口变大
      注意:移动端缩放不会影响页面布局

    真机测试流程(重点)

    真机测试是项目测试必要的一个流程,一定要掌握!!!

    • 闭防火墙
    1. webstorm -> ctrl + alt + s -> 搜索 debugger -> 修改端口并勾选两个多选框
    2. 使 PC 与手机处于同一个网络。手机连接电脑 wifi,或者电脑连接手机热点,两者在同一个 wifi 下最方便。
    3. cmd 查看电脑无线网卡的 IP(ipconfig)
    4. webstorm 在浏览器中预览文件,将 localhost 更改为 IP
    5. 打开草料网址 https://cli.im/ 将 URL 转化为二维码,手机扫描即可 😎

    3-viewport 控制

    • viewport 标签是苹果公司在 2007 年引进的,用于移动端布局视口的控制。
    • 使用示例
      <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scaleable=no,maximum-scale=1.0, minimum-scale=1.0">
      

    viewport 相关选项

    - width  布局视口宽度
    - initial-scale  初始化缩放比例
    -  minimum-scale  最小缩放比例
    	- 这里通过微信来浏览器演示  苹果内置的和很多安卓的浏览器不可用  itools 实时屏幕
    - maximum-scale 最大缩放比例
    - user-scalable  设置是否允许用户缩放
    	-  苹果内置的浏览器不好使, 但是微信浏览器好使
    - viewport-fit   auto/contain/cover
    

    width

    width 值可以是数字,也可以是设备宽度表示 device-width,这样可以得到完美视口

    initial-scale

    • initial-scale 为页面初始化时的显示比例。
    • scale = 屏幕宽度独立像素 / 布局视口宽度。
    • 注意:
      • chrome 测试该参数会有偏差,真机测试
      • initial-scale = 1.0 也可以得到完美视口
      • initial-scale 会影响布局视口和视觉视口的大小
      • width 与 initial-scale 同时设置时,会选择尺寸较大的那个

    minimum-scale

    • 设置允许用户最小缩放比例。
    • minimum-scale = 屏幕独立像素宽度 / 视觉视口

    maximum-scale

    • 设置允许用户最大缩放比例,苹果浏览器 safari 不认识该属性
    • maximum-scale = 屏幕独立像素宽度 / 视觉视口

    user-scalable

    是否允许用户通过手指缩放页面。苹果浏览器 safari 不认识该属性。

    viewport-fit

    设置为 cover 可以解决『刘海屏』的留白问题
    在这里插入图片描述

    4-移动端事件

    事件类型

    移动端事件列表

    • touchstart 元素上触摸开始时触发
    • touchmove 元素上触摸移动时触发
    • touchend 手指从元素上离开时触发
    • touchcancel 触摸被打断时触发

    这几个事件最早出现于IOS safari中,为了向开发人员转达一些特殊的信息。

    应用场景

    • touchstart 事件可用于元素触摸的交互,比如页面跳转,标签页切换
    • touchmove 事件可用于页面的滑动特效,网页游戏,画板
    • touchend 事件主要跟 touchmove 事件结合使用
    • touchcancel 使用率不高
    • 注意:
      • touchmove 事件触发后,即使手指离开了元素,touchmove 事件也会持续触发
      • 触发 touchmove 与 touchend 事件,一定要先触发 touchstart
      • 事件的作用在于实现移动端的界面交互

    事件绑定

    • 方式一
      box.ontouchstart = function(){
      console.log('touch start')
      }
      
    • 方式二
      box.addEventListener('touchstart', function(){
      console.log('touch start')
      })
      

    点击穿透

    • touch 事件结束后会默认触发元素的 click 事件,如没有设置完美视口,则事件触发的时间间隔为 350ms 左右,如设置完美视口则时间间隔为 5ms 左右。
    • 如果 touch 事件隐藏了元素,则 click 动作将作用到新的元素上,触发新元素的 click 事件或页面跳转,此现象称为点击穿透

    解决方法

    • 阻止当前元素事件的默认行为。
      cls.addEventListener('touchstart', function(e){
      e.preventDefault();
      })
      
    • 阻止顶级元素事件的默认行为,可以增加一个包裹元素绑定,也可以给 document 和 window 绑定,不过需要关闭被动模式
      document.addEventListener('touchstart', function(e){
      	e.preventDefault();
      }, {
      	passive: false
      });
      
    • 使用非链接的元素代替 a 标签,并绑定 touchstart 事件
      <div class="item">
      <div data-href="http://m.atguigu.com"><img src="holder.js/60x60?bg=#a76"></div>
      </div>
      
    • 延时隐藏遮盖元素
      setTimeout(function(){
      	el.style.display = 'none';
      }, 400)
      

    页面跳转的选择

    移动端页面跳转可以使用 a 链接,也可以使用 touchstart 事件来触发 JS 代码完成跳转

    • 效率上,touchstart 速度更快
    • SEO 优化上, a 链接效果更好

    浏览器默认行为

    这里指的浏览器默认行为主要有两个

    • 滑动露白
    • 页面缩放

    为什么要阻止这些默认行为

    这样可以让网页在不同的浏览器都有一样的表现。

    如何阻止默认行为

    可以给 document 绑定 touchstart 事件,并阻止默认行为,不过需要关闭被动模式。这里推荐创建一个包裹元素,绑定 touchstart 事件并阻止默认行为。

    • CSS 代码
      html, body, #app {
      width: 100%;
      height:100%;
      overflow: hidden;
      }
      
    • HTML 代码
      <body>
      <div id="app">
      .
      .
      .
      </div>
      </body>
      
    • JS 代码
      app.addEventListener('touchstart', function(e){
      e.preventDefault();
      })
      

    后遗症

    最外层元素阻止了 touchstart 默认行为之后,会产生一些意外现象😭

    • 链接失效
    • 内容无法选择
    • form 元素无法获得焦点

    灵丹妙药

    产生『后遗症』的原因在于 touchstart 阻止了默认行为,后续所有的操作都已经失效。解决问题只需要给目标元素绑定 touchstart 事件并阻止事件冒泡,这样当前操作的默认行为仍然可用。👌

    var link = document.getElementsByTagName('a')[0];
    link.addEventListener('touchstart', function(e){
    	e.stopPropagation();
    })
    

    注: 不是非要阻止浏览器的默认行为,这是一种极端要求的应对方法,正常只需要设置完美视口即可。

    事件对象属性

    touch 事件对象中有 3 个非常重要的属性

    • changedTouches
    • targetTouches
    • touches

    touchstart 事件

    在 touchstart 事件中

    • changedTouches 为当前在元素上同时滑动的触点对象数组。
    • targetTouches 为滑动时,当前元素上的触点对象数组
    • touches 为滑动时,当前屏幕上所有的触点对象数组

    touchmove 事件

    在 touchend 事件中

    • changedTouches 为当前在元素上同时抬起的触点对象数组。
    • targetTouches 为结束时时,当前元素上的触点对象数组
    • touches 为结束时时,当前屏幕上所有的触点对象数组
      触摸结束的位置,必须要使用 touchend 事件中的 changedTouches 来获取

    触点对象

    每一个触点对象都包含一些位置信息,其中包括

    • clientX 相对可视区域左侧的偏移
    • clientY 相对可视区域顶侧的偏移
    • pageX 相对文档左侧的偏移
    • pageY 相对文档顶部的偏移

    5-小案例(未完待续—后续补上)

    • 触摸拖拽
    • 竖向滑屏
    • 画板

    6-适配

    移动端设备的屏幕尺寸繁多,要想让页面的呈现统一,需要对不同尺寸的设备进行适配。适配的方式主要有两种

    • viewport 适配
    • rem 适配

    viewport 适配

    拿到设计稿之后,设置布局视口宽度为设计稿宽度,然后量尺寸进行布局即可。

    <meta name="viewport" content="width=375, user-scalable=no">
    

    操作步骤:

    1. 上传 PSD 到蓝湖
    2. 设置 viewport 标签 width=375 (以设计稿为准)
    3. 根据设计稿测量尺寸,编写 CSS

    rem适配

    em 和 rem

    em 和 rem 都是 CSS 中的长度单位。而且两个都是相对长度单位,不过两个有点区别

    • em 相对的是父级元素的字体大小
    • rem 相对的是根元素的字体大小

    核心是等比缩放

    rem 适配的策略有以下几种

    • 方法一
      先按照 IPhone 6 进行页面布局,再进行适配
      1. 完美视口设置
      2. 设计稿总宽 375 布局
      3. 设置 font-size 100px 尺寸转为 rem
      4. 增加 JS 代码进行页面适配
    document.documentElement.style.fontSize = document.documentElement.clientWidth*100/375+'px';
    
    • 方法二
      编写时按照 IPhone 6 直接使用 rem 单位进行布局
      1. 完美视口设置
      2. 设计稿总宽 375 布局
      3. 以 font-size 100px 进行尺寸换算,设置 rem
      4. 增加 JS 代码进行页面适配
    document.documentElement.style.fontSize = document.documentElement.clientWidth*100/375+'px';
    
    • 方法三
      选择一个设计稿宽度的比例尺寸作为根元素的字体大小
      1. 完美视口设置
      2. 通过 JS 设置页面的根元素字体大小。可以除以 10 也可以除以其他的数字
    document.documentElement.style.fontSize = document.documentElement.clientWidth/10+'px';
    
      1. 根据设计稿使用 rem 设置元素大小
      @rem: 375/10rem;
      #banner {
      width: 335/@rem;
      height: 144/@rem;
      background: #225094;
      margin: 97/@rem auto 0px;
      }
      

    1px 边框问题

    高清屏幕下 1px 对应更多的物理像素,所以 1 像素边框看起来比较粗,解决方法如下

    方法一

    1. 边框使用伪类选择器,或者单独的元素实现。例如底部边框
      .box2::after{
      content:'';
      height:1px;
      width:100%;
      position:absolute;
      left:0;
      bottom:0;
      background:#000;
      }
      
    2. 在高清屏幕下设置
      @media screen and (-webkit-min-device-pixel-ratio: 2){
      .box2{
          transform:scaleY(0.5);
      	}
      }
      
      @media screen and (-webkit-min-device-pixel-ratio: 3){
      .box2{
          transform:scaleY(0.33333);
      	}
      }
      

    方法二

    1. rem 页面布局
      var fontSize = 50;
      document.documentElement.style.fontSize = '50'+px;
      
    2. 元素的边框设置为 1px
    3. 通过 viewport 中的 initial-scale 将页面整体缩小
      var dpr = window.devicePixelRatio;
      viewport.setAttribute('content', 
                        'user-scalable=no, initial-scale='+1/dpr + ',user-scalable=no');
      
    4. 重新设置根元素字体
      document.documentElement.style.fontSize = fontSize * dpr + 'px';
      

    7-附录

    chrome 插件安装

    1. 下载 crx 插件文件,如 caoliao.crx
    2. 更名为 .rar 后缀, 例 caoliao.rar
    3. 解压文件,得到 caoliao 文件夹
    4. chrome 浏览器 -> 右上角 ┆ -> 更多工具 -> 扩展程序 -> 右上角开启开发者模式 -> 左侧已解压的扩展程序 -> 选择 caoliao 文件夹 👌

    webstorm 配置 less 解析

    1. 下载安装 nodejs 。下载地址 http://nodejs.cn/download/
    2. 命令行下安装 lessc
    npm install less -g
    
    1. webstorm 配置文件监控
    ctrl + alt + s 打开设置  ->  搜索 watcher -> 点击右上角 + 号 -> 选择 less -> 确定👌
    
    1. 创建 less 文件,就会自动生成 css 文件

    8-总结

    • 相信不用多说了,一万多字的详解移动端开发,希望每一个知识点可以帮助到你
    • 愿你在这个代码繁杂、头发渐秃的编码世界里,可以温暖疲倦的自己,坚持学习

    有时候你不努力一下,就不知道什么叫绝望。

    『传送门』☛ 什么是混合移动App开发【重点学习系列—干货十足–一文详解】

    『传送门』☛ 什么是微信小程序【重点学习系列—干货十足–一文详解】

    展开全文
  • 移动端开发基础知识

    万次阅读 多人点赞 2019-04-09 23:37:04
    移动端与pc端web开发的区别: 1、浏览器不同 移动端的浏览器与pc端不同 谷歌浏览器 苹果浏览器、 UC浏览器 QQ浏览器 百度手机浏览器 360安全浏览器 搜狗浏览器 猎豹浏览器等 国内的手机浏览器都是根据webkit内核修.....
    • 移动web开发指的是: 需要适配移动设备的网页开发
    • 移动web开发与pc端web开发没有本质的区别,使用的还是HTML/CSS/JavaScript的技术

    移动端与pc端web开发的区别:

    1、浏览器不同

    移动端的浏览器与pc端不同
    
    谷歌浏览器 苹果浏览器、 UC浏览器 QQ浏览器  百度手机浏览器  360安全浏览器  搜狗浏览器  猎豹浏览器等
    国内的手机浏览器都是根据webkit内核修改过来的,国内没有自主研发的内核,国内的操作系统也是基于Android系统修改的。
        
    因此在移动端,css3属性只需要加webkit前缀即可。
    

    2、屏幕尺寸

    移动端设备尺寸不一样(尺寸非常多,碎片化很严重)
    
    Android: 320*480 480*800  540*960 720*1280 1080*1920 2k屏 4k屏
    iphpne:  640*960 640*1136 750*1334 1242*2208
    
    
    让页面在不同手机屏幕中进行适配,宽度自适应, 基于手机全屏进行布局;
    
    PC: 要适配所有pc端页面用版心, pc端基于版心进行布局的
    

    3、布局方式

    移动端的特点
    
    - 手机端的兼容性问题比PC端小很多,因为手机端的浏览器版本比较新(对H5的支持比较好)
    - 手机端屏幕比较小,能够放的内容比较少。
    
    问题:布局的时候怎么解决屏幕大小不一致的问题?
    
    - PC端,固定版心,让所有分辨率的电脑的版心都是一样的,比如京东
    - 移动端:移动端无法设置版心,因为移动端的设备屏幕本身就小,设置版心不合适。因此移动端大多会采用流式布局(百分比布局)
    
    流式布局,也叫百分比布局,是移动端开发中经常使用的布局方式之一。
    
    流式布局的特征:
    
    - 宽度自适应,高度固定,并不是百分百还原设计图
    
    流式布局无法做到所有设备都非常逼真的还原设计图,有些设备显示效果不是特别的好看。但是流式布局是移动端非常常用的一种布局方式,比较简单,需要掌握(携程、京东)
    

    4、视口viewport(重要)

    问题:一个电脑上的网站,在手机端访问,效果是什么样的?
        
    1. 在手机端,html的大小都是980px,为什么?
        这主要是历史原因导致的,因为在移动设备刚流行的时候,网站大多都是pc端的,pc端的页面宽度一般都比较大,
        移动设备的宽度比较小,如果pc端页面直接在移动端显示的话,页面就会错乱。
        为了解决这个问题,移动端html的大小直接就定死成了980px(因为早起的pc端网站版心就是980px居多)。
        
    2. 视口
        在pc端,html的大小默认是继承了浏览器的宽度,即浏览器多宽,html的大小就是多宽,
        但是在移动端,多出来了一个视口的概念(乔布斯),视口是移动端一个虚拟的布局区域,
        视口的宽度默认定死了980px,因此html的宽度默认就是980px,视口的特点是能够根据设备的宽度进行缩放。
        
        
    3. 视口设置
        对于现在的移动端页面来说,视口默认为980px肯定不合适,因为设备宽度不够的话,视口会进行缩放,导致页面展示效果不好看。
    
    	视口参数设置
    
        //width 设置视口的宽度
        //width=device-width   设置视口宽度为设备的宽度(常用)。
        
        //initial-scale 设置初始缩放比例
        //initial-scale=1.0  表示不缩放
        
        //user-scalable 设置是否允许用户缩放
        //user-scalable=no  不允许用户缩放
        
        //maximum-scale  设置允许的最大缩放比例
        //maximum-scale=1.0  可以不设置,因为都禁止用户缩放了。
        
        //minimum-scale 设置允许最小缩放比
        //minimum-scale=1.0  不设置,因为都禁用用户缩放了。
        
        //标准写法:
        //快捷键:  meta:vp + tab键
        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0">
    
    
    屏幕与分辨率(了解)
    
    移动设备与PC设备最大的差异在于屏幕,这主要体现在屏幕尺寸和屏幕分辨率两个方面。
    
    屏幕尺寸
    
    通常我们所指的屏幕尺寸,实际上指的是屏幕对角线的长度(一般用英寸来度量)如下图所示:
    
    1英寸 = 2.54厘米
    

    在这里插入图片描述

    屏幕分辨率
    
    分辨率则一般用像素来度量,表示屏幕水平和垂直方向的像素数,例如1920*1080指的是屏幕垂直方向和水平方向分别有1920和1080个像素点而构成,如下图所示,相同尺寸下分辨率越高,越清晰。
    

    在这里插入图片描述

    像素:指计算机显示设备中的最小单位,即一个像素点的大小。
    
    像素是相对长度单位,在屏幕分辨率越高的设备,像素点越小,屏幕分辨率越低,像素点越大。
    

    在这里插入图片描述

    物理像素 和 css像素
    
    物理像素
    
    设备像素,在同一个设备上,它的物理像素是固定的,这是厂商在出厂时就设置好了的,即一个设备的分辨率是固定的。
    
    
    css像素
    
    逻辑像素,viewport中的一个小方格,CSS样式代码中使用的是逻辑像素。如果在一个设备中,物理像素与逻辑像素相等,将不会产生任何问题。但是,在iphone 4中,物理像素是640px960px,而逻辑像素数为320px*480px。因此,需要使用大约4个物理像素来显示一个CSS像素。
    
    
    像素比
    
    物理像素与逻辑像素之间的比例。当像素比为1:1时,使用1个物理像素显示1个逻辑像素;当像素比为2:1时,使用4个物理像素显示1个逻辑像素。
    
    
    获取设备的像素比
    
    window.devicePixelRatio  //物理像素与CSS像素的比值
    

    2倍图与3倍图(重要)(一般操作background-size属性,等比例缩小)

    在工作的过程中,从UI那拿到的设计图通常都是640的设计图或者是750的设计图.
    
    把更多的像素点压缩至一块屏幕里,从而达到更高的分辨率并提高屏幕显示的细腻程度。
    

    在这里插入图片描述

    设备像素比devicePixelRatio:即像素的压缩比例
    
    结论 :在移动端为了在高清屏手机上显示得更加细腻,通常会使用更大的图片,比如2倍图或者3倍图。
    

    【演示:2倍图】

    移动端调试问题

    1. 模拟器调试
    2. 真机调试:使用手机进行访问。
    
    手机设备五花八门,屏幕尺寸都大不一样,尤其是安卓端,给我们的页面预览带来了一些麻烦。在实际工作中,作为开发者不可能有足够的设备让我们去测试(除了测试部门 ),即便有,效率也特别的低,因此开发者一般都是通过浏览器的手机模拟器来模拟不同的设备。
    

    Less简介

    CSS 需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用。成这些困难的很大原因源于 CSS 是一门非程序式语言,没有变量、函数、SCOPE(作用域)等概念。LESS/sass 为 Web 开发者带来了福音,它在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS 的维护成本,就像它的名称所说的那样,LESS 可以让我们用更少的代码做更多的事情。
    
    (less css预处理器)
    
    本质上,LESS 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件。LESS 并没有裁剪 CSS 原有的特性,更不是用来取代 CSS 的,而是在现有 CSS 语法的基础上,为 CSS 加入程序式语言的特性。
    
    less仅仅是写css的另一种方式,写出来的less文件浏览器也不识别,所以啊,我们写完了less文件,还需要通过less解析器解析成css,最终浏览器引入的还是css文件。
    
    学习网站:  中文网: http://lesscss.cn/
    

    less的编译 (如何把less文件变成css文件)

    1.引入less.js文件(了解)

    必须指定rel的类型是stylesheet/less 
    <link rel="stylesheet/less" href="less/01.less">
    <script src="less.js"></script>
    
    注意:这种方式必须在http协议下运行,因为本质上less.js是通过ajax请求了less文件,进行编译。
    
    缺点:
    
    1. 需要多引入一个less.js文件
    2. 需要多一次http请求,file协议打开无效
    3. 无法实时的看到编译的结果。
    

    2.使用考拉

    koala是一个前端预处理器语言(less/sass)图形编译工具,支持Less、Sass、Compass、CoffeeScript,帮助web开发者更高效地使用它们进行开发。跨平台运行,完美兼容windows、linux、mac。
    

    考拉官网: http://koala-app.com/index-zh.html

    使用步骤:
    
    1. 把less文件夹拖进去
    2. 会在当前目录生成一个css目录
    

    3.VScode 安装 Easy LESS 插件

    Less语法
    
    less初体验
    
    新建一个less文件,输入以下代码:
    
    @color:red;
    p {
      color:@color;
    }
    

    可以看到,webstorm自动的帮我们生成了对应的css文件。

    注释

    /*这个注释是CSS中的注释,因此会编译到css中*/
    //这个注释,CSS中用不了,因此不会编译出来。
    

    变量

    @charset "UTF-8";
    @wjs_color:#e92322;
    body {
      background-color: @wjs_color;
    }
    
    div {
      width: 400px;
      height: 400px;
      border: 1px solid @wjs_color;
    }
    

    mixin混入

    混入样式类

    @charset "UTF-8";
    //混入
    .btn {
      width: 200px;
      height: 50px;
      background-color: #fff;
    }
    
    .btn_border {
      border: 1px solid #ccc;
    }
    
    .btn_danger {
      background-color: red;
    }
    
    .btn_block {
      display: block;
      width: 100%;
    }
    
    //混入其他类的样式。
    .my_btn {
      .btn();
      .btn_block();
      .btn_border();
      .btn_danger();
    }
    

    编译后的css

    @charset "UTF-8";
    .btn {
      width: 200px;
      height: 50px;
      background-color: #fff;
    }
    .btn_border {
      border: 1px solid #ccc;
    }
    .btn_danger {
      background-color: red;
    }
    .btn_block {
      display: block;
      width: 100%;
    }
    .my_btn {
      width: 200px;
      height: 50px;
      background-color: #fff;
      display: block;
      width: 100%;
      border: 1px solid #ccc;
      background-color: red;
    }
    
    缺点:写了很多类,但是都编译到css文件中了,其实我们需要的仅仅是.my_btn这一个类。
    

    混入函数

    不带参数的函数

    @charset "UTF-8";
    
    //不会被编译
    .btn() {
      width: 200px;
      height: 200px;
      background-color: #ccc;
    }
    .my_btn {
      .btn();
    }
    

    带参数的函数

    .btn_border(@width) {
      border: @width solid #000;
    }
    .my_btn {
      //如果函数定义了参数,调用的时候必须传入参数,否则会报错
      .btn_border();
      //传入参数,就不会报错
      .btn_border(10px);
    }
    

    带默认值的函数

    .btn_border(@width:1px) {
      border: @width solid #000;
    }
    .my_btn {
      //因为有默认值,所以不会报错
      .btn_border();
      //传入参数,会覆盖1px,也不会报错
      .btn_border(10px);
    }
    

    嵌套

    我们可以在一个选择器中嵌套另一个选择器来实现继承,这样很大程度减少了代码量,并且代码看起来更加的清晰。

    -使用伪类的时候 可以使用& 表示自己

    @charset "UTF-8";
    .wjs_header {
        border-bottom: 1px solid #ccc;
     }
    .wjs_header .header_item {
        height: 40px;
        line-height: 40px;
        text-align: center;
        border-left: 1px solid #ccc;
     }
    .wjs_header .header_item:first-child {
        border-left: none;
     }
    

    导入

    @charset "UTF-8";
    
    @import "01-variable";
    
    @import "02-maxin";
    
    @import "03-mixin02";
    
    @import "04-book";
    

    模块化的思想,分模块进行管理这些less文件,最终只需要使用import将less引入到一起即可。
    

    函数

    在我们的 CSS 中充斥着大量的数值型的 value,less可以直接支持运算,也提供了一系列的函数提供给我们使用。

    http://www.1024i.com/demo/less/reference.html

    展开全文
  • 从去年下半年开始,就开始听到各种言论,例如 “Android 开发凉凉”、“移动端开发没出路了赶紧转行”、“要被 XXX 替代了” 等等,充分反映了大家焦虑的心态。移动端开发真的要凉凉了吗?我也经常和朋友聊起这个...

    点击上方“开发者技术前线”,选择“置顶或者星标” 属于你的文章一触即达!

    我是一名 Android 开发者。从去年下半年开始,就开始听到各种言论,例如 “Android 开发凉凉”、“移动端开发没出路了赶紧转行”、“要被 XXX 替代了” 等等,充分反映了大家焦虑的心态。移动端开发真的要凉凉了吗?我也经常和朋友聊起这个话题,今天我决定写下自己的一些看法,供大家参考。

    现状

    移动端开发的现状是什么?我们可以从自己写的代码中寻找线索。以 Android 为例,很多大公司的移动端开发者写的最多的代码是这样的:

    LinearLayout layout = new LinearLayout();
    layout.addView(xxxx);
    ...
    

    或者也许是这样的:

    public class XXXView extends RelativeLayout {

    public XXXView(Context context) {
        this(context, null);
    }
    
    public XXXView(Context context,
            @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }
    
    public XXXView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView();
    }
    
    private void initView() {
        LayoutInflater.from(getContext()).inflate(R.layout.xxxlayout, this, true);
        ...
    }
    
    public void setData(XXX xxx) {
      ...
    }
    

    }
    又或者是对着 xml 标签做出各种骚操作——UI 开发。没错,如今移动端技术栈已经愈发趋于成熟完善,对业务来说,就连大公司的工程师也是在做 UI 的展示逻辑。大公司产品相对比较完善,后端管控了大部分业务逻辑,客户端做的就是取到后端的数据,然后通过setText(xxx)展示出来,然后通过接口返回的 Boolean 值来判断 View 显示还是隐藏。我听到很多人说,工作几年感觉自己没什么提升,天天都在堆代码,随便找个刚毕业的学生也能分分钟替代自己,于是就很焦虑。那对于工作几年的人来说,要想尽可能不让自己过早的被替代、被淘汰,就需要选一个有潜力的有前景的领域深挖。

    标题移动端开发的未来在哪里?

    动态化

    在聊动态化之前,我们先聊聊 Android 的插件化。前两年,插件化火起来了。为什么火?因为可以实现 Android 应用不发版本的同时动态上线需求,同时热修复还可以动态的修复线上出现的 bug。但是插件化存在最大的问题是什么呢?兼容性。Android 机型太多太复杂,插件化框架难免会涉及到系统 API 的 hook,兼容性问题就出现了,开发者会看到莫名其妙的错误上报上来却束手无策。随着 Android 版本的迭代更新,插件化这条路越来越不好走,Android P 给了开发者们一个信号:别随便 hook 系统 API 了,Google 要开始收口整顿了。插件化这条路注定无法一直走下去,于是开发者们另辟蹊径。最开始是继续用 H5 混合开发的方式,例如老牌 Hybrid 框架 Cordova,但是性能不尽人意。

    这时候 Facebook 开发出了一个跨时代的框架:React-Native。它提供了一个全新的思路:通过 jscore 进行 js 解析,使用原生的 View 进行渲染,提供桥机制调用原生的能力。React-Native 是第一个真正的高性能的动态化框架,它的出现让 Web 前端和客户端的界限迅速变得模糊。随之而来的是各大公司的自研框架,例如阿里巴巴的 Weex 和美团点评的 Picasso 框架。React-Native 只提供了 Android 和 iOS 的双端支持,Weex 扩展了思路,提供的 Web 端的支持,一个是 React 语法糖,一个是 Vue 语法糖。Picasso 又不一样,Picasso 是纯 TS,DSL 语法树,写法实在太简单,又准备在三端的基础上提供小程序端的支持。

    今年 GMTC 大会,Flutter 发布了第一个预览版,阿里巴巴闲鱼团队已经在闲鱼 APP 中使用了 Flutter 技术。Flutter 三年前开始开发,直到今年才有第一个 beta 版本。通过 Dart 编写 APP,然后编译成机器码同时运行在 Android 和 iOS 上,做到了原生跨平台,Hot Reload,性能很不错,可定制性也非常强,连封装的系统层 Dart 代码都能改。提供了 Web、iOS、Android、React-Native 开发者学习 Flutter 的入门文档,也是今年移动端少数的几个比较火的热点之一。它的思路不同于 React-Native,是一种全新的思路,目前我对 Flutter 持乐观态度。

    支付宝的动态方式不同于以上所有,它是完全基于自己的 H5 容器进行 Hybrid 开发,不过由于内核也是自研的(UC 内核),所以性能各方面都比原生的 WebView 好,支付宝里非常多的页面都是基于 H5 容器开发的,包括支付宝小程序,这也算是一种动态化的方式吧,只不过研发成本太高:自研 WebView 内核。

    目前来看,动态化的三驾马车已经初步形成:

    React-Native 为首的 jscore(v8)桥通信动态化方案
    自研 WebView 内核,H5 容器化方案
    Flutter(我觉得 Flutter 正在发力争取第三驾马车的位置)

    动态化改变了移动开发的方式,模糊了 Web 前端和客户端的界限,让越来越多的人认识了什么是 “大前端”。如果有经验的开发者们对这个方向进行深入研究,五年内,应该不会被淘汰了(笑)。

    移动端机器学习

    毫无疑问,移动端机器学习从去年年底就开始火起来了,TensorFlow 也推出了移动端框架,很多应用都开始在移动端部署机器学习模型,例如相机类应用(faceu)、电商类应用(唯品会)等,包括离线的机器学习。如果深挖这个方向,我觉得十年内不会被淘汰。当然了,难度也不小。

    AR & VR

    从支付宝的 AR 抢红包、QQ 的 AR 踢球等玩法被越来越多的人体验,AR 走进了人们的视野。对于广告引流玩法来说,AR 无疑是能带来巨大收益的。月初大众点评亲子上线了 “亲子奇妙日” 活动,就是基于大头儿子小头爸爸的 AR 玩法。那么开发 AR 引擎的移动开发者自然成了香饽饽,目前 AR 主要应用的领域还是广告变现,不过很多公司也找到了 AR 的一些落地场景,比如卖家具的电商公司可以通过 AR 技术让用户在购买之前就能看到实物在自己家里到底能不能放得下,这能极大的提升用户的购买体验。如果是研究 OpenGL、计算机图形学的移动开发者,可以往 AR 引擎开发方向发展,非常有前景。

    VR 同理

    移动端音视频

    这个领域最火的产品当之无愧是抖音了,就连我自己都天天刷抖音。除了抖音,还有各大视频应用,都需要音视频开发领域的专业开发人员,图像处理、滤镜、裁剪等等骚操作都是需要专业的音视频开发知识才能做出来的,研究 OpenGL、计算机图形学的移动开发者在这个领域也有很大的优势。据我所知,这方面人才现在缺口依然很大,各大公司求贤若渴,如果在这方面有经验并且愿意深挖的同学,自然是各大公司的香饽饽啦。

    移动端区块链

    区块链,今年最火的技术没有之一。从人人都在谈比特币到人人都在谈区块链,可以看出区块链技术已经被越来越多人熟知。无数区块链公司如雨后春笋般的冒出,连大公司们也按捺不住开始涉足区块链领域。对于移动端来说,区块链应用最多的还是数字钱包。但是未来移动端区块链一定会有更多的落地应用,例如 Status。区块链今年大火,移动端的区块链应用还没开始火,但是也不远了。如果有移动开发同学对区块链方向感兴趣的,可以开始研究起来了。如果要学习智能合约开发的同学,我推荐一个非常好的网站:Cryptozombies,绝对是入门 solidity 智能合约开发的精品。目前移动端的区块链人才还不多,各大公司也没有在招,但是两三年内,应该就会爆发了,现在还在探索落地场景的阶段,也给了对区块链技术感兴趣的移动开发同学学习的时间。改变世界的技术了解一下?

    移动基础框架

    UI 未来可能都会被动态化技术接管,但是移动基础框架不会。但凡要开发一个 APP,网络请求、日志处理、数据库处理、缓存、Push 等框架都是不可或缺的,这部分和 UI 关系不大,又是 APP 的命脉所在。只要 APP 存在,基础框架就存在。有同学可能要说了,我用 okhttp 分分钟写一个网络请求出来,没错,这是 okhttp 已经帮我们做好了很多事。什么是框架?用一句话总结,我的理解就是:

    一种可以让能力差别较大的开发者写出功能、性能差不多的代码的库

    不知道大家能不能理解这种说法,我举个例子:如果使用 HttpUrlConnection 来写网络请求,可能不同能力的开发者写出来的代码不一样,网络请求的性能和效果也不一样。但是如果使用了 okhttp 库,只要看一看 okhttp 的文档,新手和老手写出来的代码估计差不多,性能和效果也差不多,这就是框架做出的最大的贡献。在这些框架的基础上,P5 写的代码可能和 P6、P7 区别不会多大。然而,这些框架总要有人开发,开源的框架往往不能满足公司业务的需求,需要自研基础框架。尤其是 BAT、TMD 六家公司,移动端框架有大部分都是自研的,越来越多的公司也开始自研,所以如果是在这个方向有经验的移动开发者,在 APP 被淘汰之前,应该都不会被淘汰。这方面对移动开发者的知识深度和广度都要求相对较高,需要沉淀和学习。

    Android 工具类应用

    这个就比较特殊了,这类应用我举个例子:360 手机助手。对于 Android 用户来说,清理内存、清理垃圾等已经成为了一种习惯,这方面应用的开发自然是不可少的,而且非常考验对 Android 知识的深度,你们懂得。

    结语

    上面六个(七个)移动端开发方向,是我总结出来的有潜力有前景的方向,各位移动开发同学可以参考,可以选择一个方向进行深挖,相信一定会有收获。嘴上焦虑是没有意义的,最好的办法就是付出行动。积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。

    作者:美团立成
    转载声明:本文转载自「InterestDriven」

    第一时间获取技术文章请关注微信公众号!

    开发者技术前线

    展开全文
  • 移动端开发视频

    2019-07-22 22:07:46
    资源名称:移动端开发视频资源目录:移动端实战系列视频教程移动前端开发视频下载学习视频软件必看 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
  • mvc 移动端开发

    2016-08-29 15:18:26
    这是一个移动端backbone框架 MVC的开发例子,运行环境需要IIS或nginx
  • Vue--移动端开发

    2020-08-23 14:56:01
    移动端开发 我们现在关注的点还在移动M站上,或者我们可以叫做webapp,其实就是运行在移动端浏览器中的web网站。 app:application应用程序。 手机软件:主要指安装在智能手机上的软件,完善原始系统的不足与个性化。 ...

    移动端开发

    我们现在关注的点还在移动M站上,或者我们可以叫做webapp,其实就是运行在移动端浏览器中的web网站。

    app:application应用程序。

    手机软件:主要指安装在智能手机上的软件,完善原始系统的不足与个性化。

    移动端开发是与PC端肯定是有很大不同的,所以我们需要学习如何在移动设备上开发完美适配的app

    开发移动端应用我们需要学习的知识点可以分成如下几个:

    1. 移动端布局适配

    2. 移动端事件

    3. 移动端交互效果

    4. 移动端前端框架

    5. 移动端调试

    移动端布局适配

    从屏幕尺寸、屏幕类型等方面来看的话,移动设备和PC设备大有不同,所以从布局、适配等方面都需要我们考虑到

    Viewport视口的作用 (在移动端浏览器上面用来显示网页的那一块区域)

    在很久以前,我们的设备还不是智能设备的时候,设备访问智能访问到网页的左上角(当时都是pc网站),查看全部内容需要通过滚动条

    慢慢的我们发现,我们的一个页面放到移动端中访问的时候,没有滚动条了,但是内容都缩小了

    这是因为我们有了一个叫做viewport的一个东西

    网页不是直接放入浏览器中的,而是先放入到viewport中,然后viewport在等比缩放到浏览器的宽度,放入浏览器,viewport在缩放的过程中,网页内容也被缩小了

    网页访问到的clientWidth其实是viewport的宽度

    这样的话我们需要做一些处理,其实问题的根源在于viewport的宽度和浏览器宽度不一样,如果我们能将其设置为一样的话,不会出现这样的问题了

    我们可以通过meta标签来设置viewport将其设置为浏览器的宽度,也就是设备的宽度,这样的话布局就会简单多了

    viewport的宽度

    当浏览器宽度小于980的时候,宽度就是980,当浏览器尺寸宽度大于980的时候,宽度和浏览器宽度一致

    通过meta标签来设置viewport
    标签提供关于 HTML 文档的元数据。它不会显示在页面上,但是对于机器是可读的。可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 web 服务。

    meta标签大全

    meta viewport 的6个属性:

    width设置layout viewport 的宽度,为一个正整数,或字符串"width-device"
    initial-scale设置页面的初始缩放值,为一个数字,可以带小数
    minimum-scale设置页面的最小缩放值,为一个数字,可以带小数
    maximum-scale允许用户的最大缩放值,为一个数字,可以带小数
    height设置layout viewport 的高度,这个属性并不重要,很少使用
    user-scalable是否允许用户进行缩放,值为"no"或"yes", no 代表不允许,yes代表允许

    移动端布局方式与设计图

    现有的布局方式:

    1. 固定布局,每一个元素都是固定的尺寸,内容区域居中在浏览器中间

      内容区域的尺寸:980,1000,1100,1200

    2. 响应式布局,利用媒体查询来实现不同尺寸的浏览器显示结构不一样 @media 根据浏览器分辨率大小进行适配

      一般会有三张设计图,PC,平板,手机

    3. 自适应布局,属于响应式里的一种,利用rem、百分比、vwvh等布局单位来实现

      设计图一般只有一张,640、750居多

    移动端布局

    移动的屏幕和PC的屏幕有一个很大的区别,移动端是视网膜高清屏(Retina)

    retina屏幕有一个属性叫DPR(设备像素缩放比) = 物理像素/逻辑像素

    例如,iphone 6手机商宣传手机的尺寸是:750宽,这个值就是物理像素,而从开发者眼里我们所指的其实是375px(逻辑像素)

    在dpr为2的手机中,我们的一个逻辑像素会从横纵两个方向分别以2个像素点来渲染

    如果不管dpr的话,其实我们布局依然可以,因为我们设置一个像素宽高的东西的话,在手机上看见的基本也就是这么大,至于手机设备用多少个物理像素去渲染,大小还是不会变化的

    设计师出图都是2倍的,是因为,在页面中除了字体(矢量图)大部分都是位图,也就是如果一个像素宽高的盒子里准备放入图片,如果图片的尺寸也是一个像素宽高的话,因为其实在移动端渲染的时候是用四个像素来渲染,图片会失真,但是如果我们给一像素宽高的盒子放入2像素宽高的图片的话,就不会失真

    布局单位

    因为我们的移动设备有很多种,所以我们的布局不可能是固定布局,所以我们要使用自适应布局

    我们在开发中可以选用很多自适应布局单位,这些单位必须满足一个条件

    1. %

      优点:简单,无需设置,兼容性好
      缺点:基于父元素的属性来设置,如果父元素没有宽高,设置无效

    2. vwvh

      一个vw等于viewport宽度的百分之一,一个vh等于viewport高度的百分之一
      vmax等于vw和vh中较大的那个 vmin等于vw和vh中较小的那个

      优点:简单,无需设置
      缺点:兼容性不好

    3. rem

      一个rem等于根元素(html)的字体大小,兼容性很好

      优点:兼容好,使用简单
      缺点:需要设置

    rem与适配

    当我们想使用一个自适应单位的时候,发现%有缺陷,vwvh兼容性差,弹性盒所针对的是元素排列的问题,只适用于某种情况,所以我们就想,能给我一个没啥上面的缺陷的单位,想到了rem

    rem的兼容性好一点,它也确实是一个布局单位,不受父子元素的影响,设置了rem之后,也不会对px、em等单位造成影响,它是一个理想的单位

    rem也有一个致命的问题,就是它不是一个自适应的单位,不会跟着设备尺寸不同而不同,但是没有关系,我们有万能的js,可以去动态的设置它

    方法1:

    我们可以将1rem设置成屏幕的某一个比例,比如将1rem设置成屏幕的十分之一

    假设我们的设计图是640宽的,我们拿到之后量了一下a的宽度为480px,得到比例a所占屏幕3/4,根据rem与屏幕的关系,最后设置成7.5rem

    就是说在设置元素的宽度是时候,会根据设定好的比例关系去进行换算

    方法2:

    如果设计图是640的图,这个时候我们知道它是照着i5来的,我们现在假设世界上所有的手机都是320的,也就是每一个人用的都是i5,在这个理想的情况下,因为手机都一样,尺寸都一样,和pc端的固定布局也就一样了

    假设有一个在640的图上我们量得的宽度是320,因为是二倍图,所以我们知道,它的实际宽度是160px,这样的话,我们直接给这个设置设置width:160px就可以了,这个时候,我们玩个花子,不要单纯的使用px来设置,用rem来设置,例如,我可以将rem设置为100px,这样的,刚才的盒子设置为width:1.6rem,算法就是 量的宽度/(dpr*100) = 要设置的rem值

    这样我们就可以开心的开发,量一个尺寸,除个2,再小数点推两位,设置就行了,但是我们也知道,手机的尺寸并不可能都是320,这样的话,没有关系,我们可以根据一个比例来算rem到底设置为多少

    在手机宽度为320的时候,我们设置的1rem=100px,所以有一个比例 b = 100/320

    那么在W宽度的手机上,1rem应该是多少呢?设为x 那么x/w = b

    得到x = w/3.2

    那么就不要写死html的fontsize为100了。而是用js去设置:

    document.documentElement.style.fontSize = document.documentElement.clientWidth/3.2 + 'px’

    这样,我们就可以得到一个自适应的rem

    常见的需要注意的问题
    1. 1px边框

      在移动端中,如果给元素设置一个像素的边框的话,那么在手机上看起来是会比一个像素粗的。

      解决方法:使用伪类元素模拟边框,使用transform缩放

    2. 响应式图片

      在移动端中,图片的处理应该是很谨慎的,假设有一张图片本身的尺寸是X宽,设置和包裹它的div一样宽,如果是div宽度小于图片宽度没有问题,但是如果div宽度大于图片的宽度,图片被拉伸失真

      解决方法:让图片最大只能是自己的宽度

        img{
            max-width: 100%;
            display: block;
            margin: 0 auto;
        }
    

    移动端事件

    移动端中的事件和PC的事件有一些是不同的,例如,mouse部分事件在移动端里没有了

    取而代之的是touch事件:

    touchstart/touchmove/touchend/touchcancel(玩游戏 忽然来电话)

    添加事件的时候可以用ontouchstart,但是有的时候很可能失效,建议使用addEventListener的方式

    touchcancel比较少见,在系统取消触摸的时候触发

    touch事件对象里面的属性和mouse的略有不同,例如在mouse事件里可以直接从事件对象里取出pageX,clientX,screenX

    touch事件对象里有touches,changedTouches,targetTouches三个属性,上面保存着关键的位置信息

    它们里面保存的是触发事件的手指的信息,但是要注意,虽然三个里面保存的信息看似都一样,但是在touchend事件里,只能使用changedTouches

    click的300ms延迟问题

    在移动端中,click事件是生效的,但是它有一个问题,点击之后会有300ms的延迟响应

    原因:safari是最早做出这个机制的,因为在移动端里,浏览器需要等待一段事件来判断此次用户操作是单击还是双击,所以就有click300ms的延迟机制,Android也很快就有了

    1. 不用click,用自定义事件tap

      tap是需要自定义的:如果用户执行了touchstart在很短的时间又触发了touchend,且两次的距离很小,而且不能触发touchmove

      使用zepto类库的时候,里面自带tap事件,,但是需要在zepto.js后面加上一段js

      zepto官网;Touch模块

      百度有一款touch.js的插件教程

      hammer.js也是一个手势事件库文档

    2. 引入fastclick库来解决

    点透bug的产生

    点透bug有一个特定的产生情况:

    当上层元素是tap事件,且tap后消失,下层元素是click事件。这个时候,tap上层元素的时候就会触发下层元素的click事件

    解决方式:

    1. 上下层都是tap事件,缺点:a标签等元素本身就是自带的click事件,更改为tap比较困难

    2. 缓动动画,让上层元素消失的时候不要瞬间消失,而是以动画的形式消失,事件超过300ms就可以了

    3. 使用中间层,添加一个透明的中间元素,给它添加click事件并消失,这个时候接收点透的是透明的中间层

    4. 使用fastclick

    移动端测试

    1. 使用chrome浏览器有移动设备模拟功能,在这里可以做一些模拟测试,但是要注意的是,毕竟不是真机,会有一些测试不到的问题

    2. 手机连接上电脑的无线,总之使其在同一个网络里,然后就可以通过ip访问

    需要测试的浏览器:

    chrome,firefox,UC,百度,QQ,微信,Android,safari

    移动端交互

    动画效果全部使用css3

    JQ生成二维码

    可以使用jquery.qrcode.js插件,可以快速的生成基于canvas绘制的二维码

    兼容查阅网站

    can i use ,在这里可以查看很多属性、api的兼容性

    展开全文
  • 比较几款跨平台移动端开发app框架hybrid app flutter React WeeX不看好这个 kotlin也不看好 cordova phoneGap ionic hbuilder(uni-app) HERO
  • 移动端开发工程师面试总结

    千次阅读 2019-02-28 13:55:28
    1. 什么是移动端开发工程师 目前流行的移动端开发包括android开发工程师,ios开发工程师 扩展的有:hybrid(混合开发)工程师,reactNative开发工程师 三方:微信小程序开发工程师,百度小程序开发工程师,三方工具...
  • 力软敏捷框架移动端开发环境安装说明,用于搭建力软敏捷框架移动端开发环境
  • 普通pc端开发与移动端开发区别

    千次阅读 2019-03-12 12:07:21
    1,普通pc端开发与移动端开发区别。 普通pc端开发,我理解就是你拿电脑打开的网页都算【这不是废话么】。 那么移动端前端开发工程师,说白了就很好理解了,做手机网页的前端开发工程师。 这么一比,是不是感觉,...
  • 移动端开发技术浅析

    千次阅读 2017-10-13 14:42:08
    移动端开发技术浅析目录 APK下载 概述 技术介绍 技术对比 参考资料 1. APK 下载百度云链接:https://pan.baidu.com/s/1pLp44Fh2. 概述“一次编码,处处运行” 永远是程序员们的理想乡。二十年前 Java 正是举着这...
  • 之前负责移动端基础架构相关的工作,并做了一段时间 ToB 的移动技术框架输出,所以对移动端的现状以及移动端开发这个行业有一定了解,与大家分享下。 移动端开发时代已结束? 过去两年里,移动端开发一直在被唱衰,...
  • 移动端开发脚手架 基于gulp的使用zepto,把手,sass和带移动端适配方案(flexible.js)的前端工作流,有助于帮助移动端项目的开发。 背景 在移动端项目的开发中,我们会遇到一些移动端技术选型,移动端适配,前置器...
  • 物联网工程应用开 3.2应用开发-移动端开发 发-智慧城市 2 0 1 1 2 0 1 2 手机操作系统市场占有率情况 物联网工程应用开 3.2应用开发-移动端开发 发-智慧城市 Symbian 系统简介 Symbian系统是塞班公司为手机而设计的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 136,961
精华内容 54,784
关键字:

移动端开发