工作中踩过的坑

踩过的坑:

1.input实现maxlength且字符长度识别中英文【jquery】:

function getstrlen(arr) {
            var len = 0;
            var lenn={
                truelen:0,
                truen:0
            };
            for (var i=0; i<arr.length; i++) {
                if (arr.charCodeAt(i)>127 || arr.charCodeAt(i)==94) {
                    len += 2;
                } else {
                    len ++;
                }
            }
            lenn.truelen=len;
            return lenn;
        }
        function limitmax(str,maxnum){
            var strlen=getstrlen(str);
            var n=maxnum;
            var res="";
            if(strlen.truelen >= maxnum ){
                for (var i=0; i<maxnum; i++) {
                    if (str.charCodeAt(i)>127 || str.charCodeAt(i)==94) {
                        n--
                    }
                }
                res=str.substr(0,n);
            }else{
                res=str;
            }
            return res;
        }
        var isInputZh = false;

        $("input[name='username']")[0].addEventListener('compositionstart', function (e) {
            isInputZh = true;
        }, false);
        $("input[name='username']")[0].addEventListener('compositionend', function (e) {
            isInputZh = false;
            var con=limitmax($("input[name='username']").val(),25);
            $("input[name='username']").val(con);
        }, false);
        $("input[name='username']")[0].addEventListener("input",function(e){
            if (isInputZh) return;
            var con=limitmax($("input[name='username']").val(),25);
            $("input[name='username']").val(con);
        });

2,截取指定字节长度的字符串

/* 
     * 截取指定字节长度的字符串 
     * 注:半角长度为1,全角长度为2
     * str:字符串 
     * len:截取长度
     * return: 截取后的字符串及是否截取的标记(扩展用)code=1 字符串截断   code=0  字符串未截断
     */  
    function cutStrByte(str, len){
        //校验参数
        if(!str || !len){
            return {"cutStr":"","code":0};
        }
        var code = "1",// 默认返回code值,已截断
            strLen = str.length,// 原字符串长度
            cutStr;
        //如果字符串长度小于截取长度的一半,则返回全部字符串
        if (strLen <= len/2){  
            cutStr = str;
            code = "0";
        }else{
            //遍历字符串
            var strByteCount = 0;
            for (var i = 0; i < strLen ; i++ ){
                //中文字符字节加2  否则加1
                strByteCount += getByteLen(str.charAt(i));
                //i从0开始 截断时大于len 只截断到第i个
                if(strByteCount > len){
                    cutStr = str.substring(0, i);
                    break;
                }else if(strByteCount == len){
                    cutStr = str.substring(0, i + 1);
                    break;  
                }
            }
        }
        //cutstr为空,没有截断字符串
        if (!cutStr){
            cutStr = str;
            code = "0";
        }
        return {"cutStr":cutStr, "code":code};
    }
    
    /**
     * 获取字节长度,全角字符两个单位长度,半角字符1个单位长度
     */
     function getByteLen(val) {
        var len = 0;
        if(!val){
            return len;
        }
        for (var i = 0; i < val.length; i++) {
            if(!val[i]){
                continue;
            }
             // 全角
            if (val[i].match(/[^\x00-\xff]/ig) != null){
                len += 2;
            }else{
                len += 1;
            }
        }
        return len;
    };

3.css改变radio样式问题

HTML部分:

<label class="radiostyle">
                <div class="bankinfo">
                    <span class="banklogo"><img src="img/minsheng.png"></span>
                    <span class="bankname">民生银行信用卡</span>
                </div>
                <input class="bankradio" type="radio" name="bankradio"/>
                <span class="b-radio"></span>
 </label>


主要CSS部分:

.bankradio{
    display: none;
}
.b-radio{
    display: inline-block;
    border:1px solid #ccc;
    width:16px;
    height: 16px;
    border-radius:2px;
    vertical-align: middle;
    margin-right: 5px;
    position: relative;
}
.b-radio:before{
    content: '';
    font-size: 0;
    width: 10px;
    height: 10px;
    background: rgb(143, 188, 238);
    position: absolute;
    left:50%;
    top:50%;
    margin-left: -5px;
    margin-top: -5px;
    border-radius: 2px;
    display: none;
}
.bankradio:checked~.b-radio:before{
    display: block;
}


   效果:

4,移动端rem适配问题引入js

 <script>
                (function(win,lib){var doc=win.document;var docEl=doc.documentElement;var metaEl=doc.querySelector('meta[name="viewport"]');var flexibleEl=doc.querySelector('meta[name="flexible"]');var dpr=0;var scale=0;var tid;var flexible=lib.flexible||(lib.flexible={});if(metaEl){var match=metaEl.getAttribute("content").match(/initial\-scale=([\d\.]+)/);if(match){scale=parseFloat(match[1]);dpr=parseInt(1/scale)}}else{if(flexibleEl){var content=flexibleEl.getAttribute("content");if(content){var initialDpr=content.match(/initial\-dpr=([\d\.]+)/);var maximumDpr=content.match(/maximum\-dpr=([\d\.]+)/);if(initialDpr){dpr=parseFloat(initialDpr[1]);scale=parseFloat((1/dpr).toFixed(2))}if(maximumDpr){dpr=parseFloat(maximumDpr[1]);scale=parseFloat((1/dpr).toFixed(2))}}}}if(!dpr&&!scale){var isAndroid=win.navigator.appVersion.match(/android/gi);var isIPhone=win.navigator.appVersion.match(/iphone/gi);var devicePixelRatio=win.devicePixelRatio;if(isIPhone){if(devicePixelRatio>=3&&(!dpr||dpr>=3)){dpr=3}else{if(devicePixelRatio>=2&&(!dpr||dpr>=2)){dpr=2}else{dpr=1}}}else{dpr=1}scale=1/dpr}docEl.setAttribute("data-dpr",dpr);if(!metaEl){metaEl=doc.createElement("meta");metaEl.setAttribute("name","viewport");metaEl.setAttribute("content","initial-scale="+scale+", maximum-scale="+scale+", minimum-scale="+scale+", user-scalable=no");if(docEl.firstElementChild){docEl.firstElementChild.appendChild(metaEl)}else{var wrap=doc.createElement("div");wrap.appendChild(metaEl);doc.write(wrap.innerHTML)}}function refreshRem(){var width=docEl.getBoundingClientRect().width;if(width/dpr>540){width=540*dpr}var rem=width/10;docEl.style.fontSize=rem+"px";flexible.rem=win.rem=rem}win.addEventListener("resize",function(){clearTimeout(tid);tid=setTimeout(refreshRem,300)},false);win.addEventListener("pageshow",function(e){if(e.persisted){clearTimeout(tid);tid=setTimeout(refreshRem,300)}},false);if(doc.readyState==="complete"){doc.body.style.fontSize=12*dpr+"px"}else{doc.addEventListener("DOMContentLoaded",function(e){doc.body.style.fontSize=12*dpr+"px"},false)}refreshRem();flexible.dpr=win.dpr=dpr;flexible.refreshRem=refreshRem;flexible.rem2px=function(d){var val=parseFloat(d)*this.rem;if(typeof d==="string"&&d.match(/rem$/)){val+="px"}return val};flexible.px2rem=function(d){var val=parseFloat(d)/this.rem;if(typeof d==="string"&&d.match(/px$/)){val+="rem"}return val}})(window,window["lib"]||(window["lib"]={}));

    </script>

5,ios低版本,H5设置mete标签,页面仍可以向右拖动

html{width:100%;overflow-x:hidden;}

猜你喜欢

转载自blog.csdn.net/GQ_cyan/article/details/82735642