【建议收藏】90%的前端都会踩的坑,你中了吗?(中)

简介: 移动开发时代,前端同学刚刚送别了让人头秃的IE浏览器,却发现憧憬已久的移动互联网时代并不是想象中那般美好。各种棘手的系统兼容问题和浏览器兼容问题怎么也让人高兴不起来。作为一名工作不足3年的前端程序媛,始终相信好记性不如烂笔头。每次在项目开发过程中踩到的坑,都习惯性地记录了下来。昨日一瞥竟积少成多,稍感诧异。因此分享出来,希望对大家能有所帮助。

兼容问题


1、iconfont 字体在钉钉应用里面加载不出来(或者是乱码)的问题引入iconfont字体的时候,需要按照顺序把字体依次引入。正确的顺序如下:


@font-face {
    font-family: "djicon";
    src: url('./iconfont.eot'); /* IE9*/
    src: url('./iconfont.svg#iconfont') format('svg'), /* iOS 4.1- */
    url('./iconfont.woff') format('woff'), /* chrome、firefox */
    url('./iconfont.ttf') format('truetype'); /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
}
// 参考文档:https://www.cnblogs.com/Megasu/p/4305116.html


2、PC端ueditor 编辑的文案及图片拉伸问题,背景是 后端返回是html片段


node - cheerio模块,操作dom字符串比较方便,实际案例:


解决了 PC端图片在移动端展示的问题参考文档:


www.jianshu.com/p/e6d73d8fa…


www.npmjs.com/package/che…


width: number = 784 代表pc端宽度 
regHtml(str: string){
    // 参数是html片段 
    let _this = this; 
    const $ = cheerio.load(str);
    $('img').each(function(index,element){
        let attr = element.attribs //元素的属性 
        // 屏幕宽度 
        let docEl = document.documentElement 
        let clientWidth = docEl.clientWidth
        if(attr.width){ //如果设置了宽
            // 图片宽度/屏幕宽度的比例 
            let rate = attr.width /_this.width 
            //图片的宽高比例 
            let wh = attr.width/attr.height 
            $(element).attr('height', _this.rate*clientWidth/wh)
            $(element).attr('width', _this.rate*clientWidth)
            $(element).attr('style', '') 
            $(element).attr('class', 'img-skew') 
        } 
    }) 
    return $.html() 
}


3、IOS 点击input不聚焦问题。


ios系统中点击Input输入框,没有反应,无法聚集光标,调不起键盘。


解决方案:强制性给加上点击事件,点击后给input框聚集光标。


cilckTextarea(){
    document.getElementsByClassName('cont-inp')[0].focus();
},


4、上传图片,iPhone7 iPhone7p在上传图片的时候,传不过去图片的name


解决方案:手动添加图片name


let data = new FormData();
data.append("fileName", file[0],file[0].name); 


5、ios微信打开网页键盘弹起后页面上滑,导致弹框里的按钮响应区域错位


解决方案:手动把滚动条滚到底部写一个自定义指令。


import Vue from 'vue';
Vue.directive('blur', {
    'bind'(el) {
        el.addEventListener("click", function(){
            window.scrollTo(0,0);
        })
    }
}); 
//在点击页面提交按钮的时候,把滚动条滚到底部就OK了


6、微信浏览器调整字体后,页面错位。


解决方案:阻止页面字体自动调整大小


// 安卓:
(function() {
  if (typeof WeixinJSBridge == "object" && typeof WeixinJSBridge.invoke == "function") {
    handleFontSize();
  } else {
    if (document.addEventListener) {
      document.addEventListener("WeixinJSBridgeReady", handleFontSize, false);
    } else if (document.attachEvent) {
      //IE浏览器,非W3C规范
      document.attachEvent("onWeixinJSBridgeReady", handleFontSize);
    }
  }
  function handleFontSize() {
    // 设置网页字体为默认大小
    WeixinJSBridge.invoke('setFontSizeCallback', { 'fontSize' : 0 });
    // 重写设置网页字体大小的事件
    WeixinJSBridge.on('menu:setfont', function() {
      WeixinJSBridge.invoke('setFontSizeCallback', { 'fontSize' : 0 });
    });
  }
})();
//iOS:
// ios使用-webkit-text-size-adjust禁止调整字体大小
body{-webkit-text-size-adjust: 100%!important;}


7、关于移动端样式兼容的问题


  • 设置meta标签viewport属性,使其无视设备的真实分辨率,直接通过dpi,在物理尺寸和浏览器之间重设分辨率,从而达到能有统一的分辨率的效果。并且禁止掉用户缩放


<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />


  • 使用rem进行屏幕适配,设置好root元素的font-size大小,然后在开发的时候,所有与像素有关的布局统一换成rem单位。


8、iOS下取消input在输入的时候英文首字母的默认大写


<input type="text" autocapitalize="none">


9、禁止 iOS 识别长串数字为电话


<meta name="format-detection" content="telephone=no" />


10、禁止ios和android用户选中文字


-webkit-user-select: none;


11、一些情况下对非可点击元素如(label,span)监听click事件,ios下不会触发


只需要对不触发click事件的元素添加一行css代码即可:


cursor: pointer;


相关文章
|
3月前
|
前端开发 小程序
零基础学前端系列教程 | 和前端谈恋爱的第001天——你好,前端
零基础学前端系列教程 | 和前端谈恋爱的第001天——你好,前端
22 0
|
3月前
|
存储 编解码 移动开发
零基础学前端系列教程 | 和前端谈恋爱的第003天——电影海报
零基础学前端系列教程 | 和前端谈恋爱的第003天——电影海报
29 0
|
3月前
|
存储 前端开发 C++
零基础学前端系列教程 | 和前端谈恋爱的第004天——打扮漂亮
零基础学前端系列教程 | 和前端谈恋爱的第004天——打扮漂亮
27 0
|
程序员
程序员创业踩过的10个坑
我在之前的文章《程序员如何行稳致远》和《程序员是否适合创业》中跟朋友们提过,程序员要早点积累自己的生产资料,尽早尝试轻创业。但是创业有很多坑,我总结了这些年自己踩过的10个坑,希望对你有帮助。
|
Shell Python
这些年,你们一起踩过的坑(2)
上次我们踩坑总结文章 这些年,你们一起踩过的坑(1) 受到了不少同学的认可。我也确信文中所涉及的问题是非常具有普遍性的,对绝大多数初学者都会有帮助。
|
12月前
|
安全 程序员 测试技术
【程序员有哪些绝对不能踩的坑】
【程序员有哪些绝对不能踩的坑】
|
人工智能
小白也可以做智慧大屏?我来帮你踩踩坑!
小白也可以做智慧大屏?我来帮你踩踩坑!
144 0
小白也可以做智慧大屏?我来帮你踩踩坑!
|
IDE Shell 开发工具
这些年,你们一起踩过的坑(1)
今天就把平常被提问频率较高的一些问题整理出来,再次统一回答。基本都是非常早期阶段的问题,其中一定有你遇到过或将会遇到的。已经有一定基础的同学也可以对照下,这些问题涉及的概念,自己是否都已清楚。
|
存储 移动开发 前端开发
别踩白块_前端H5游戏毕设
别踩白块_前端H5游戏毕设
|
存储 移动开发 前端开发
别踩白块_前端H5游戏毕设(下)
别踩白块_前端H5游戏毕设
下一篇
无影云桌面