移动web开发

一、屏幕适配问题

解决方案

流式布局

:就是百分比布局,非固定像素,内容像两侧填充,理解成流动的布局,称为流式布局。

viewport视口(主流的适配方案)

       :移动端特有,是一个虚拟的区域,承载网页的。

<meta name="viewport" content="width=device-width,initial-scale=1,maximun-scale=1,minimum-scale=1,user-scalable=0" />

承载的关系: 浏览器->viewport->网页

  3. 非主流适配(淘宝:目前看已经改为主流,已淘汰)

:根据物理像素放大当前的页面(2或者3倍)

二、移动端常设置盒子的类型为边框盒

box-sizing: border-box;

三、去除/增加高亮

-webkit-tap-highlight-color: transparent;

遇到的问题

2倍背景图失真问题(通过设置背景图片缩小一倍来实现background-size: x/2px y/2px; 对应的获取单个图标元素的时候background-position: x/2 y/2 也要是原来的一半)

图片和文字基线问题

解决办法3种

1. 设置字体大小

body {

    font-size: 0; //明显不合适

}

2. 设置图片的样式

img {

    display: block;

}

3. 设置图片的基准

img {

    vertical-align: middle; // 另外的值也可以

}

附:京东移动端百分比布局

四、移动端触摸事件

touch是移动端的触摸事件,而且是一组事件

touchstart:当手指触摸屏幕的时候触发

touchmove:当手指在屏幕来回的滑动时候触发

touchend:当手指离开屏幕的时候触发

touchcancel:当被迫终止滑动的时候触发(来电,弹消息)

注:利用touch相关事件实现移动端常见滑动效果和移动端常见的手势事件

1. touchstart

touchList

触摸点(一个手指触摸就是一个触发点,和屏幕的接触点的个数)的集合,changedTouches 改变后的触摸点集合,targetTouches 当前元素的触发点集合,touches 页面上所有触发点集合

2. touchmove

3. touchend

通过上面的打印可以看到 changedTouches 每个事件都会记录, targetTouches、touches在离开屏幕touchend的时候无法记录触摸点

上面打印的分别是:

clientX clientY 基于浏览器窗口(视口)

pageX pageY 基于页面(视口)

screenX screenY 基于屏幕

4. 模拟手势事件

<script type="text/javascript">

      function isSlider(dom, leftFunc, rightFunc)

      {

        let isMove  = false;

        let start    = 0;

        let distance = 0;

        dom.addEventListener('touchstart', function (e) {

          start = e.touches[0].clientX;

        }, false);

        dom.addEventListener('touchmove', function (e) {

          distance = e.touches[0].clientX - start;

          isMove  = true;

        }, false);

        dom.addEventListener('touchend', function (e) {

          if (isMove && Math.abs(distance) >= 50) {

            if (distance > 0) {

              rightFunc && rightFunc.call(this, e);

            } else {

              leftFunc && leftFunc.call(this, e);

            }

          }

          isMove  = false;

          start    = 0;

          distance = 0;

        }, false);

      }

      let divDom = document.querySelector('.box');

      function left(e)

      {

        console.log('move left');

        console.log(e);

      }

      function right(e)

      {

        console.log('move right');

        console.log(e);

      }

      isSlider(divDom, left, right);

    </script>

5. 模拟tap事件

移动端也是有点击事件的,不过延迟了300ms(为了区分是触摸还是点击),所以可以利用上面的3个事件,计算开始到结束的时间差,如果小于300ms,默认为点击,否则就是滑动事件

<script type="text/javascript">

      // 不加viewport标签,可以看到双底放大的效果,很明星!!!双击可以测试!!!

      let tapFunc = function(dom, callback) {

        let isMove  = false;

        let diffTime = 0;

        let start    = 0;

        dom.addEventListener('touchstart', function (e) {

          start = Date.now();

        });

        dom.addEventListener('touchmove', function (e) {

          isMove = true

          diffTime = Date.now() - start;

        });

        dom.addEventListener('touchend', function (e) {

          if (!isMove && diffTime < 150) {

            callback && callback.call(this, e);

          }

        });

      }

      tapFunc(document.querySelector('.box'), function (e) {

        console.log(e)

        console.log('tap')

      });

    </script>

五、Bootstrap布局

这里就不做过多的介绍了,详细的可以参考官网。

六、rem布局

1. less认识

1. css预处理语言

2. less无法在浏览器端直接使用,浏览器不识别,必须解析成css代码

3. 通过less解析插件(javascript)

4. 引入less文件需要加上 type="text/less"

5. less.watch(); 无刷新预览样式

6. 以http形式打开网页预览

demo:

...

<!--书写less样式的代码-->

<link rel="stylesheet" type="text/less" href="../less/test.less">

<script src="../lib/less/less.min.js"></script>

<script>less.watch();</script>

....

2.rem认识

1. rem是相对单位,大小是基于html元素的字体大小

2. em也是相对单位,但大小是基于父元素的字体大小

⚠️注意:浏览器默认的字体大小是16px

百分比布局不能解决高度自适应的问题,rem布局可以设置高度和宽度都是rem单位,做到宽度和高度都是自适应。

...

<style>

        /*假设的设备  320px 414px 640px */

        @media (min-width: 320px) {

            html{

                font-size: 50px;

            }

        }

        @media (min-width: 414px) {

            html{

                font-size: 64.6875px;

            }

        }

        @media (min-width: 640px) {

            html{

                font-size: 100px;

            }

        }

        body{

            margin: 0;

            padding: 0;

            font-size: 14px;

        }

        /*流式容器*/

        header{

            width: 100%;

            height: 1rem;

            line-height: 1rem;

            font-size: 0.32rem;

            text-align: center;

            background: green;

            color: #fff;

        }

    </style>

...

<!--1.伸缩布局  flex -->

<!--2.流式布局  百分比 -->

<!--3.响应布局  媒体查询 (超小屏设备的时候:流式布局)-->

<!--共同点:元素只能做宽度的适配(排除图片)-->

<!--适配方案rem:宽度和高度都能做到适配(等比缩放)-->

<!--4.rem布局-->

<!--通过控制html上的字体大小去控制页面上所有已rem为单位的基准值控制尺寸-->

<!--4.1 把页面上px单位转换成rem单位-->

<!--4.2 页面制作的时候 psd 上的量取的px转成rem使用-->

<!--4.3 怎么换算???预设一个基准值 方便计算 100px -->

<!--4.4 适配的时候设置基准值  320px  50px 怎么算:(640px 100px ===320px 50px)-->

<!--4.5 换算公式:当前rem基准值 = 预设的基准值 / 设计稿宽度 * 当前设备的宽度 -->

<!--4.6 怎么去改变 (js换算,媒体查询推荐)-->

附:苏宁rem布局

移动端适配-Rem 布局篇

七、现在移动端布局

1. Flex

2. Grid

3. vw、vh、vmin、vmax4个视口单位

vw : 1vw 等于视口宽度的1%

vh : 1vh 等于视口高度的1%

vmin : 选取 vw 和 vh 中最小的那个

vmax : 选取 vw 和 vh 中最大的那个

有兴趣的可以自己去了解,本文旨在记录自己学习移动端开发的记录。

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