移动端适配、移动端事件,理想视口

来源:互联网 发布:电表数据丢失 编辑:程序博客网 时间:2024/06/16 16:59


禁止滚动条

取消滚动条的默认样式:html{height:100%;overflow:hidden;}                   body{height:100%;overflow:hidden;}并在js中写入:document.addEventListener('touchstart',function(event){                             event.preventDefault();})

移动端事件

changedTouches   触发当前事件手指的列表(默认是一个)【经常使用】     (当前事件)   targetTouches    触发当前目标元素上的手指列表(可以是多个)     (当前元素)touches          当前屏幕上的手指列表(可以是多个)     (屏幕上的手指数) 使用时使用的是 changedTouches[0];      eg. 获取event事件中的clientX属性__    event.changedTouches[0].clientX
在移动端操作必做的步骤:    1. <meta name="viewport" content="width=device-width,initial-scale=1.0 />    2. * {margin:0; padding:0;}    (某些Chrome不能取消默认行为时   *{action-touch:none;})       html,body{height:100%; overflow:hidden;}    3. document.addEventListener('touchstart',function(event){                                         event.preventDefault;})

meta

<meta name="viewport" content="" />    width [pixel_value | device-width] width     -- 直接去设置具体数值大部分的安卓手机是不支持的 但是IOS支持    initial-scale 初始缩放比例    user-scalable 是否允许缩放 (no||yes),默认允许    minimum-scale 允许缩放的最小比例    maximum-scale 允许缩放的最大比例     target-densitydpi         -- dpi_value 70–400 //每英寸像素点的个数        -- device-dpi 设备默认像素密度2        -- high-dpi 高像素密度           -- medium-dpi 中等像素密度        -- low-dpi 低像素密度        -- webkit内核不再支持了    height完整的meta标签:<meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,target-densitydpi=device-dpi" />  width就是用来控制布局视口的大小的,width=device-width会使布局视口的大小变成理想视口的大小                                            (即独立设备像素代表的大小) inital-scale缩放是根据理想视口来计算的,这个缩放不同于我们用户的缩放,它会使布局视口跟随着我们的视觉视口一起转变所以只设置inital-scale=1其实等同于只设置width=device-width当width与initial-scale的设置发生冲突时,谁大听谁的(本质上这两个操作的功能是一样的,  不同的浏览器解析方式不同,可能只识别其中的一个)

适配

  • em:参照元素自身字体的大小(font-size是可继承的属性)
  • rem:参照html字体的大小    (html{ }中写的font-size大小)
  • 实质:一个css像素在不同设备上包含的物理像素不同,适配是为了实现等比效果

rem适配

(设计图大,需要缩小操作时使用)

<style type="text/css">        *{            margin: 0;            padding: 0;        }        #box{            width: 1rem;            height: 1rem;            background-color: plum;        }    </style></head><body>    <div id="box">        hc    </div>    <script type="text/javascript">(function(){        var width=document.documentElement.clientWidth;        var styleNode=document.createElement('style');        styleNode.innerHTML='html{font-size:'+ width+'px!important;}';        document.head.appendChild(styleNode);    })();本质:操作html字体大小优点:使用meta标签    等比效果    图片失真不明显缺点:    计算复杂
vw:

viewpoint适配

(设计图小,需要放大操作时使用)

<style type="text/css">        *{            margin: 0;            padding: 0;        }        #box1{            width: 200px;            height: 200px;            background-color: plum;        }    </style></head><body>    <div id="box1">    </div>    <script type="text/javascript">        var width=document.documentElement.clientWidth;        var targetM=320;        var scale=width/targetM;        var metaDom=document.querySelector('meta[name="viewport"]');        metaDom.setAttribute('content','initial-scale=' + scale);    </script>本质:改变initial-scale的值优点:    等比效果    没有复杂的计算缺点:    没有meta标签    图片失真明显






initial-scale=1.0
缩放是根据理想视口来计算的
页面有个布局视图,
布局视图在没有设置初始化缩放比例的情况下,
会默认将整个页面缩放到视觉视图,这时就有缩放,
如果设置默认缩放比例为1,则不会产生缩放,滚动条出现

禁止滚动条

取消滚动条的默认样式:html{height:100%;overflow:hidden;}                   body{height:100%;overflow:hidden;}并在js中写入:document.addEventListener('touchstart',function(event){                             event.preventDefault();})

移动端事件

changedTouches   触发当前事件手指的列表(默认是一个)【经常使用】     (当前事件)   targetTouches    触发当前目标元素上的手指列表(可以是多个)     (当前元素)touches          当前屏幕上的手指列表(可以是多个)     (屏幕上的手指数) 使用时使用的是 changedTouches[0];      eg. 获取event事件中的clientX属性__    event.changedTouches[0].clientX
在移动端操作必做的步骤:    1. <meta name="viewport" content="width=device-width,initial-scale=1.0 />    2. * {margin:0; padding:0;}    (某些Chrome不能取消默认行为时   *{action-touch:none;})       html,body{height:100%; overflow:hidden;}    3. document.addEventListener('touchstart',function(event){                                         event.preventDefault;})

meta

<meta name="viewport" content="" />    width [pixel_value | device-width] width     -- 直接去设置具体数值大部分的安卓手机是不支持的 但是IOS支持    initial-scale 初始缩放比例    user-scalable 是否允许缩放 (no||yes),默认允许    minimum-scale 允许缩放的最小比例    maximum-scale 允许缩放的最大比例     target-densitydpi         -- dpi_value 70–400 //每英寸像素点的个数        -- device-dpi 设备默认像素密度2        -- high-dpi 高像素密度           -- medium-dpi 中等像素密度        -- low-dpi 低像素密度        -- webkit内核不再支持了    height完整的meta标签:<meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,target-densitydpi=device-dpi" />  width就是用来控制布局视口的大小的,width=device-width会使布局视口的大小变成理想视口的大小                                            (即独立设备像素代表的大小) inital-scale缩放是根据理想视口来计算的,这个缩放不同于我们用户的缩放,它会使布局视口跟随着我们的视觉视口一起转变所以只设置inital-scale=1其实等同于只设置width=device-width当width与initial-scale的设置发生冲突时,谁大听谁的(本质上这两个操作的功能是一样的,  不同的浏览器解析方式不同,可能只识别其中的一个)

适配

  • em:参照元素自身字体的大小(font-size是可继承的属性)
  • rem:参照html字体的大小    (html{ }中写的font-size大小)
  • 实质:一个css像素在不同设备上包含的物理像素不同,适配是为了实现等比效果

rem适配

(设计图大,需要缩小操作时使用)

<style type="text/css">        *{            margin: 0;            padding: 0;        }        #box{            width: 1rem;            height: 1rem;            background-color: plum;        }    </style></head><body>    <div id="box">        hc    </div>    <script type="text/javascript">(function(){        var width=document.documentElement.clientWidth;        var styleNode=document.createElement('style');        styleNode.innerHTML='html{font-size:'+ width+'px!important;}';        document.head.appendChild(styleNode);    })();本质:操作html字体大小优点:使用meta标签    等比效果    图片失真不明显缺点:    计算复杂
vw:

viewpoint适配

(设计图小,需要放大操作时使用)

<style type="text/css">        *{            margin: 0;            padding: 0;        }        #box1{            width: 200px;            height: 200px;            background-color: plum;        }    </style></head><body>    <div id="box1">    </div>    <script type="text/javascript">        var width=document.documentElement.clientWidth;        var targetM=320;        var scale=width/targetM;        var metaDom=document.querySelector('meta[name="viewport"]');        metaDom.setAttribute('content','initial-scale=' + scale);    </script>本质:改变initial-scale的值优点:    等比效果    没有复杂的计算缺点:    没有meta标签    图片失真明显






initial-scale=1.0
缩放是根据理想视口来计算的
页面有个布局视图,
布局视图在没有设置初始化缩放比例的情况下,
会默认将整个页面缩放到视觉视图,这时就有缩放,
如果设置默认缩放比例为1,则不会产生缩放,滚动条出现