• 移动端开发的一些技巧总结(2)


    总结一下一些知识。

    1.利用CSS穿透

    常见发生场景:假如我们需要通过input,type=‘file’来上传文件,而这个input的默认样式,可以说是非常地“不人道”。所以我们希望通过一张图片,与这个input大小一样,位置一致地盖在上面。这个时候,显然,这个时候点击图片,input是不会起作用的。就是因为img隔绝了click的穿透,而我们希望的是,这个img只是视觉上遮挡了input的样式,但是点击的时候还是点击到input。所以,只要让img可穿透即可。
    css代码如下:
    img{pointer-events: none;}
    
    2.实现自定义原生select控件的样式
    由于select移动端原生样式很丑,但是原生弹出效果是符合我们设计的原则。直接修改select的样式的时候,一个奇怪的现象出现了,在chrome上调试的时候,自己定义的样式起了作用,在Android手机上也起了作用,但是到了ios手机上就不行了,典型的不兼容问题,这个时候禁用原生的样式即可。
    css代码如下:
    select{-webkit-appearance: none;}
    

    3.文本溢出处理

    移动设备相对来说页面较小,很多时候显示的一些信息都需要省略部分。最常见的是单行标题溢出省略,多行详情介绍溢出省略。

    css代码如下:

    //单行
    .single{
       overflow:hidden;
       white-space:nowrap;
       text-overflow:ellipsis;
    }
    //多行
    .more{
        display:-webkit-box !important;
        overflow:hidden;
        text-overflow:ellipsis;
        work-break;break-all;
        -webkit-box-orient:vertical;
        -webkit-line-clamp:2; //指定行数
    } 
    

    4.300毫秒的故事

      移动设备访问的web页面都是pc上的页面。在默认的viewport(980px)的页面往往都是需要“双击”或“捏开”放大页面来看清页面。而正是为了确认用户是“双击”还是“单击”。safari需要个300ms的延迟来判断。而后来的iphone也一直沿用这样的设计,再后来android也沿用了这样的设计。于是,“300ms的延迟”就成了一道规范。

    处理方法:

    使用自定义Tap事件代替click事件。 原理:在touchstart、touchend时记录时间、手指位置,在touchend时进行比较,如果手指位置为同一位置(或允许移动一个非常小的位移值)且时间间隔较短(一般认为是200ms),且过程中未曾触发过touchmove,即可认为触发了手持设备上的click,一般称它为“tap”。  

    5.Tag透传的解决方案

    ①.使用缓动动画,过渡300ms的延迟。

    ②.中间层dom元素加入,让中间层接受这个“穿透”事件,稍后隐藏。

    ③.“上下”都使用tap事件,原理上解决tap透传事件(但不可避免原生标签的click事件)。

    ④.改用Fastclick的库。

    6.开启弹性滚动

    css代码如下:
    body{
       overflow:scroll;
       -webkit-overflow-scrolling:touch;
    }
    

    注意:Android不支持原生的弹性滚动,但可以借助第三方库iScroll来实现。

    7.点击不灵敏

    起因:由于使用touch触发自定义tap事件,提速约200ms,但是touch事件对点击区域要求更大,偶有不触发。

    解决方案:

    ①同时使用touchend和click触发tap事件,如果touchend已经处理,则click不处理。

    ②全局捕获click事件,如果click事件和tap事件的点击坐标一致,且相差不到1s。则在捕获阶段阻止事件默认行为的同时取消冒泡。

    8.chrome调试快捷键

    ①ctrl+shift+f  全文查找

    ②ctrl+o  查找文件名

    ③ctrl+shift+o 查找js函数名  

    9.弹性图片

    主要用在百分比布局中,用一个父标签包裹img标签,父元素的宽度用媒体查询来改变。

    css代码如下:

    img{
      max-100%;
    }
    

    10.一像素边框设置

    很多时候,想保持边框的大小在任何设置上都是1px,但是因为1px使用2dp渲染,也就是说会显示为2px大小。所以,要采用css3缩放一下。

    css代码如下:

    .folder li{
       position:relative;
        padding:5px;
    }
    .folder li+li:before{
        position:absolute;
        top:-1px;
        left:0;
        content:' ';
        100%;
        height:1px;
        border-top:1px solid #ccc;
        -webkit-transform:scaleY(0.5);
    }
    

      

    努力学习。。。

      

  • 相关阅读:
    A1047 Student List for Course [unordered_map]
    .net 事务处理的三种方法
    SQline安装
    LeetCode 21 _ 合并两个有序链表
    LeetCode 191 _ 位1的个数
    LeetCode 268 _ 缺失数字
    LeetCode 190 _ 位运算
    LeetCode 136 _ 位运算
    LeetCode 461 _ 位运算
    LeetCode 125 _ 字符串
  • 原文地址:https://www.cnblogs.com/LuckyWinty/p/6078455.html
Copyright © 2020-2023  润新知