美文网首页
2018-01-19

2018-01-19

作者: peng凯 | 来源:发表于2018-01-19 13:49 被阅读31次

    为什么要学移动app ?

    1 .用户需求
    2.企业需求
    3.It 公司解决需求
    4. 用户基础大

    相对于pc端的网站、

    1.随时随地使用
    2.用户量大  
    3.浏览器的版本比较高 

    相对于移动app 

    1. 学习成本比较低
     2 .发布简单  不需要审核 如苹果app审核比较繁琐 
     3.用户安装简单  只需要浏览器 
     4. 一次编码 多个平台使用,而且可以通过工具 打包成不同平台的app

    分辨率

    逻辑分辨率 
          概念:设备的宽度*高度 单位px

    设备分辨率
         概念  : 屏幕上共有物理像素点的个数
                        图片的最小单位是指物理像素点
                        同样大小的设备 分辨率也高 越清晰

    设备像素比 devicePixelRatio

    对角线  一般手机的屏幕尺寸都是以对角线衡量

    ppI 像素密度比  1 inch  里面拥有像素点的个数

    srcset图片便签的属性  可以根据不同屏幕的清晰度加载不同的图片

    失真: 
            图片的清晰度跟设备的清晰度不一致
            或者说 图片的像素点跟设备的物理像素点不一致

    对于失真解决的关键代码
       设备的像素比
        srcset 图片标签的属性 

    在工作中如何解决失真问题
       1 不处理 忍受模糊
       2 统一使用高清图片
        3 根据设备像素比  srcset图片标签的属性

    视口
        概念 : 在设备屏幕上所看到的网页区域

    布局视口    
        概念  : 手机厂商设置980px的视口   为了兼容旧的网站 给用户更好的体验
        出现问题:使用绝对长度单位的元素  宽度跟高度都会被缩放
                            视口的大小是980px
    理想视口:
        视口和屏幕的宽度等大  并且使用绝对长度单位元素的宽度不会被缩放
        不是标准写法:

    标准写法:

    理想视口的参数理解
        meta: 标签用来描述设置一个HTML网页文档的属性

    content要设置或者的描述内容
    width 设置视口的宽度device-width等于屏幕的宽度
    initial-scale 页面打开的时候视口放大的倍数

    user-scalable 是否允许用户缩放页面

    maximum-scale 如果允许放大的话 最大可以放大多少倍

    minimum-scale 如果允许放大的话 最小可以放大多少倍

    css预处理器
        有一套提高编写css代码的技术

    基本css预处理器

        styles
        less
        sass

     less的执行过程

    编写符合less语法的less文件
    使用工具将less文件编译成css文件
    页面中引用编译好的css文件

    less语法
        变量 @color:red
        函数 .chang(){}    
        嵌套
        导入@import "base.css"
        注释 //这种不会编译到css中去
                /**/会被编译到css中去
        

    增大背景图片的响应区域
        1.设置元素box-sizing:border-box
        2.background-origin:content-box
            background-clip:content-box
        3.动态增大padding
    图片的默认3px
        display:block

    在保留标签的同时 设置标签之间的间隙

    1.给父元素加fontsize:0
    2.再给标签单独加fontsize

    图片标签浮动的时候容器出现的bug

    固定定位和绝对定位

    固定定位是相对于屏幕进行定位

    绝对定位是现对于已经定位了的父元素进行定位

    div设置固定或者绝对定位后,会导致 没有了宽度.所以 需要手动设置宽度或者由子元素撑开宽度

    父元素加padding,一个子元素绝对定位 另外i一个子元素宽度加100%


    尾部

    如果尾部导航是用图片撑开并且 加了固定定位的话, 导致被它遮挡的高度不固定

    解决:直接再加一个尾部导航的标签就可以了(不要加定位了)

    触屏事件

        为什么需要触屏事件
            因为click事件不能满足多指触控事件的需求    

        概念
            手指在屏幕上所放生的一些事件

    click 在移动端出现延迟

            机制:当你点击屏幕的时候 click 并不是马上触发  而是等待一段时间后  判断时候有第二次点击  如果有的话 就放大页面  如果没有就触发当前事件  
            造成的原因
                手机厂商设置的  为了用户更方便放大页面

    注意: 1. 触发事件不能在pc端触发

    2. 在绑定触屏事件的时候 建议使用div.addEventLister("触屏事件",function(){})  不推荐使用  div.ontouchstart() 因为一些旧版本的浏览器不支持

    自己封装tap事件

    1.封装手指的个数不能超过1个

    2.手指按下的时间不能太长300ms

    a.记录开始时间

    b.end计算总时间

    3.手指的滑动的距离不能太长

    判断距离

    封装移动端滑动事件

    1.判断手指的个数不能超过1个

    2.手指按下的时间不能太长 800ms

    a.start记录时间

    b.end 计算总时间

    3.手指的滑动的距离不能太小 15px

    a.判断距离

    a 再判断方向

    b.距离不满足条件直接return

    c.start 开始坐标

    d.end拿到结束坐标

    e.计算距离和方向

     一些触屏事件类型

            touchstart 手指触摸到屏幕的事件    相当于 onmousedown
            touchmove 手指在屏幕上滑动触发的事件  相当于 onmusemove
            touchend 手指离开屏幕触发的事件
        相当于onmouseup

        触屏事件源的4个属性

        touches 屏幕上的所有触摸点的集合
        targetTouches 目标元素上的所哟触摸点的集合
        changeTouches 目标元素状态所发生改变(进入  移动  离开) 触摸点的集合       
        target   事件源

    触摸点对象的3个对位置属性

        clientX/Y 相当于视口的坐标
        pageX/Y相对于页面的坐标      
        screenX/Y 相对于屏幕的坐标(谷歌正常/火狐跟clientX/Y一样)

    响应式布局    

        是一套代码  可以页面在不同宽度设备上进行显示,让用户有更好的体验

    核心原理

        媒体查询

    媒体查询

        一种css的语法 ,可以在不同屏幕宽度下,加载不同的css代码

    媒体查询的类型    

    all 所有屏幕screen和print

    screen 正常显示的屏幕

    print 打印机

    媒体查询的特性

    width/height 宽度/高度
    max-width/max-hieght 最大宽高
    min-width/min-hieght、最小宽高
    aspect-ratio 视口的宽高比
    min-aspect-ratio 最少宽高比
    max-aspect-ratio 最大宽高比

    媒体查询的关键字

        or  有,好体现

        and  和

        only 只有

        not 取反

    媒体查询的使用方式

    1.在css中media常用
    2.link中 media 当做属性
    3.style中media使用  当做属性

        css 引入方式

        内嵌 @media screen and (width:800px){

          body{

            background-color: red;

          }

        行内-->

    <style media="screen and (width:800px)"></style>

        外联

    <link  media="screen and (width:800px)">

        媒体查询的引入方式:

          1 直接在css中写 -> 是普通的样式代码 同层级  用得最多

          2 直接在style标签中 通过属性的方式写的  一般不用

          3 在link标签中 通过属性的方式写的  一般不用

    boostrap基本模板讲解

    忽略。。。

    栅格系统

    把屏幕分为4中 分为12份  每一列占一份

    4种宽度不同的屏幕

    极小屏幕 xs 小于等于768px 手机设备

    小屏幕 sm 768px ~992px 平板电脑

    中等(普通)屏幕 md 992px~1200px - 老旧的电脑显示器

    大屏 lg 大于1200px 大的电脑显示器

     

    列偏移  col-lg-offset-3

    列嵌套

    列排序

     # 京东分类页面

    ##1.静态布局的注意细节

    父元素加pdding一个子元素级绝对定位,另一个子元素的宽度和高度为100%

    body并没有高度  但可以显示背景颜色 

                可以设置 body,html{

                  height:100%

                }

    ##2.左侧的原生js实现的菜单栏的滚动条

    1.手动拖拽

    分析

    ###1 手动拖动

                        a translateY 

                        b 用到的事件 touchstart touchmove

                          touchstart

                            0 验证手指的个数

                            1 记录按下的坐标

                          touchmove

                            0 验证手指的个数

                            1 记录移动的坐标

                            2 计算距离

                            3 距离设置给ul标签

                            4 需要加上以前已经移动了的距离

                              a 如何获取  加一个touchend事件 获取离开的坐endY

                              b 获取上一次的距离  preDis=endY-startY

                              c preDis用在touchmove中

                5 用哪个触摸点数组(targetTouches和c页面hangedTouches)  都可以!

                      2 弹簧效果

                      3 点击菜单置顶效果

                    ### 2、弹簧效果

                      a.自定义弹簧的高度

                      b touchmove 判断 不让ul继续往下移动

                      c touchend 判断 反弹

                          1 用preDis 和0 比较

                          2 满足条件 反弹

                            a 需要加上过渡

                            b 设置ul标签的translateY(0)

                    ### 3 点击菜单置顶效果

                      a 先引用插件 绑定tap事件

                        b 获取被点击的li标签的索引

                          1 添加了自定义属性

                          2 获取被点击的li标签

                          3 通过e.target获取被点击的dom元素

                        c 向上移动的值 =索引*li标签的高度

                    ### 拓展

                    可以来回滚动

                    kai(left_box).tap(function (e) {

                              var adom = e.target;

                              var lidom = adom.parentNode

                              var IndexLi = lidom.dataset.index;

                var middle = parseInt((document.querySelector(".container").offsetHeight) / 40) / 2;

                              //计算可视区的高度 除去li的个数取整 再除去2

                            var height = -(IndexLi - middle) * lidom.offsetHeight;//当前的索引减去中间那个

                              if (IndexLi <= middle) {  //如果索引小于中间的索引  高度为0

                                      height = 0;

                              }

                              if (IndexLi > lis.length - middle) {//当索引大于li的个数设置高度为最大高度

                                  height = left_ul_Hight;

                              }

                              preValue = height;  //记录上一次的距离

                              left_box.style.transition = "transform .5s";

                              left_box.style.transform = "translateY(" + height + "px)";

                              active(IndexLi - 1)    })

    ##3 右侧内容滚动条

    IScroll.js

    父元素的第一个子元素才可以滚动

    #zepto.js

    特点

    轻量级

    模块化

    语法和jq类似

    偏向于移动端

    内置了常见的触屏事件

    #响应式布局

    概念:

    一套可以在不同宽度设备上运行,可以提供给客户良好的体验

    核心原理

    媒体查询

    css的语法 

     根据设备的不同加载对应的css的代码

    @media 声明一个媒体查询

    其他的知识点

    媒体类型:

    all包含screen和print

    screen带正常屏幕的设备

    print打印机

    媒体的特性

    width-宽度

                          min-width 最少宽度

                          max-width 最大宽度

                          height 高度

                          min-height 最少高度

                          max-height 最大高度

                          aspect-ratio 视口的宽高比

                          min-aspect-ratio 最少宽高比

                          max-aspect-ratio 最大宽高比

        媒体关键字

        and

        or 逗号体现 在代码中

        not

        noly

        引入方式

            1.在css中直接写  层级一样  最常用

            2.在style标签上通过属性的方式

            3.在link标签上通过属性的方式

          注意的细节

          1.要加上理想的视口

          2 要注意空格的部分  and ()  and ()

      @media screen and(min-width:400px) and (max-width:600px){

        body{

          background-color: green;

        }

      }

    #boostrap的基本模板解析

      如果使用ie浏览器访问该网站的话 默认使用最高版本的内核渲染

      但是有时候不起作用 ie自身出现了bug

      理想视口

              标准写法 

    html5让ie8兼容h5的标签

    respond.min.js 让ie8识别媒体查询  只能够一服务器的形式大剋 才能工作

        条件注释

        lt  less than

        ie8以及 以下的时候 会自己下载这两个文件

        其他 浏览器 忽略 不会下载

    #栅格系统

    栅格系统把所有的屏幕分成4种-屏幕的宽度  分为12份 每一列占一份

    宽度不同的屏幕

    极小屏幕 xs  小于768px 手机设备

    小屏幕  sm  大于768px  小于 992px  平板电脑

    中等屏幕 md  992px ~1200px  老旧的电脑显示器

    大屏 lg 大于1200px的电脑显示器

    container 版心宽度

    container-fluid的全屏 流式  百分比

    col 行

    列偏移

    ​ col-lg-offset-1

      编写快捷

                function whatScreen() {

              var width = document.querySelector("html").offsetWidth;

                  var title = document.querySelector("title");

                  if (width <= 768) {

                    title.innerHTML = "极小屏幕-" + width;

                  } else if (width > 768 && width <= 992) {

                    title.innerHTML = "小屏幕-" + width;

                  } else if (width > 992 && width <= 1200) {

                    title.innerHTML = "普通屏幕-" + width;

                  } else if (width > 1200) {

                    title.innerHTML = "大屏幕-" + width;

                  }

          }

    #布局

    流式布局  百分比布局  自适应

    代表  京东商城

    ##响应式布局

    比如宽度要到某个范围之后页面才会发生改变

    ###rem+媒体查询

    1. 字体大小会随着发生改变

    2. 容器或者元素的大小也会发生改变

    3.优惠卷

    ##工作中如何选择解决方案

    1.从项目需求出发

    2.如果是响应式    boostrap实现

    还要字体大小发生改变的话  rem+媒体查询

    3.基本的移动端  如果没让文字大小发生改变的需求 流式布局(百分比布局)自试应

    #rem+媒体查询做屏幕适配

    1.  px是绝对长度单位

    2.  em 相对长度单位 相对于自身的fontsize

    1.谷歌浏览器默认最小的字体12px

    2.谷歌默认的字体为16px

    3.  rem  相对长度单位  相对于html标签的fontsize

    补充:基础值和设计稿等宽的媒体查询里面的html标签fontsize的大小  100px

    公式fontsize=基础值* 要适配的屏幕的宽度/设计稿的宽度

    设计稿改变之后 一样可以使用这套方案

    可以用js代替媒体查询的工作 (不建议)

    pc端滚动条占宽度  移动端不占宽度(建议在移动端上测试)

    在线标注工具

    标你妹

    在线px转rem的工具

    #click  和 tap  的比较 

    其实在2015 年底  谷歌浏览器和safari 浏览器 检测是否有理想视口

    如果有 把click 的点击延迟  取消

    如果没有  click  延迟 还是存在

    其他的浏览器 没有做这个设置 那么不管有没有理想视口  click还是有延迟 tap 比click  要快

    火狐 就是一般浏览器的代表 

    在火狐下 tap  先执行  click 后执行

    2000ms  click再触发

    解决方案

    统一使用click  (意味忍受延迟)

    2.fastclick.js  click比tap  还要快!

    不需要使用整个页面的单击都是click

    在页面中 有tap 只是其中一个手势事件

    swipe  longtap

    在工作中为最好的兼容性  还是用zepto.js

    万一点透了

    再加载fastclick ->把出现bug的事件  改成click 就可以了

    其他地方哪个时间都可以click 或者 tap

    什么是点透  如何解决

    1.一般浏览器tap  比 click 要快

        等待2000ms  过后 click  在触发

    click 触发的时候  触发到了a 标签

    a 标签就发生了跳转行为

    2 a 都使用了click  不解决(忍受)

    b  使用  fastclick  click比tap  再在遮罩层 使用click 就可以看

    相关文章

      网友评论

          本文标题:2018-01-19

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