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

牧云@^-^@ 提交于 2019-12-08 02:09:10


禁止滚动条

取消滚动条的默认样式: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,则不会产生缩放,滚动条出现
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!