웹 페이지 는 핸드폰 화면 에 적합 하고 웹 페이지 는 핸드폰 에 적응 합 니 다.

27785 단어 page
오늘 은 동료 앞 에 있 는 큰 소 알 렉 스 가 js 파일 두 개 를 써 서 이미 쓴 웹 페이지 에서 갑자기 휴대 전 화 를 지원 하 는 것 을 발견 했다. 예 를 들 어 한 페이지 의 모든 너비 가 640 px 인 데 이 두 개의 js 파일 을 도입 한 후에 당신 의 페이지 에 한 마디 를 쓸 수 있다.
 
 
		$(document).ready(function(){
			sun.md.setViewPortContent({ 
				initWidth : 640
			});
		});

 
 
그 후에 핸드폰 으로 볼 수 있 습 니 다. 일반적인 상황 은 아주 작은 조정 만 하면 됩 니 다. 그러나 특수 한 상황 이 적용 되 지 않 을 수도 있 습 니 다. bug 가 댓 글 을 통 해 피드백 하 는 것 을 환영 합 니 다.
 
만약 에 사용 하 는 상황 이 특수 하 다 면 setView Port Content 라 는 방법 을 볼 수 있 습 니 다. 주로 핸드폰 유형 에 따라 view port 의 속성 을 설정 하 는 것 입 니 다. 그 안에 정 의 된 js 상용 방법 도 많이 있 습 니 다.
 
 
이 js 파일 로 bug 등 문제 가 발생 하면 이익 손실 은 일체 책임 지지 않 습 니 다.
다음은 js 코드 도입 순서 가 있어 야 sun. js 를 먼저 도입 한 다음 sun. md. js 를 도입 합 니 다. (이 두 파일 을 jquery 에서 썼 기 때문에 jquery 가 가장 먼저 도입 해 야 합 니 다)
 
sun.js
 
var sun = sun || {};

/**
 * it is for alex to shortcut method
 * delete before online
 */
(function shortCut() {
    tojs = function(vmodel) {
        return ko.mapping.toJS(vmodel)
    };
    log = function (){
        console.log(arguments)
    };
    write = function(txt){
        var p = document.createElement('p');
        var hr = document.createElement('hr');

        p.innerHTML = txt;
        document.body.appendChild(hr);
        document.body.appendChild(p);
    };
    
})()

sun.ajax = function() {
    var mime = {
        html: 'html',
        js: 'script',
        json: 'json',
        xml: 'xml',
        txt: 'text'
    }

    var _stringifyData = function(sType, oData) {
        var _data = oData;

        if ((sType.toUpperCase() === 'POST') && ( !! oData)) {
            _data = JSON.stringify(oData);
        }

        return _data;
    };

    base = function(sUrl, sType, sDataType, oData, fnCallBack, isShlowLoading, isAsync) {
        var _data = oData,
            _isAsync = typeof isAsync === 'boolean' ? isAsync : true;

        if (sUrl.indexOf('?') === -1){
            sUrl = sUrl + '?t=' + Math.random();
        }else {
            sUrl = sUrl + '&t=' + Math.random();
        }

        $.ajax({
            async: _isAsync,
            type: sType,
            url: sUrl,
            data: _stringifyData(sType, oData),
            contentType: 'application/json',
            dataType: sDataType,
            beforeSend: function(XMLHttpRequest) {
                if (!!isShlowLoading) {
                    
                }
            },
            success: function(data, textStatus) {
                if (!!isShlowLoading) {
                    
                }
                if(!_isAsync && (typeof fnCallBack === 'function')){
                    fnCallBack(data, textStatus);
                };
                _data = data;
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                if (!!isShlowLoading) {
                    
                }
                
                _data = errorThrown;
            }
        }).done(function(data, textStatus, _self) {
            if (!!isShlowLoading) {
                    
            }

            if (!!_isAsync && (typeof fnCallBack === 'function')) {
                fnCallBack(data, textStatus);
            }
        });;

        return _data;
    };

    return {
        post: function(sPageUrl, oData, fnCallBack, isAsync) {
            if ((typeof oData === 'function') && (!fnCallBack)) {
                fnCallBack = oData;
                oData = null;
            }

            return base(sPageUrl, 'POST', mime.json, oData, fnCallBack, false, isAsync);
        },
        getJSON: function(sPageUrl, oData, fnCallBack, isAsync) {
            if ((typeof oData === 'function') && (!fnCallBack)) {
                fnCallBack = oData;
                oData = null;
            }

            return base(sPageUrl, 'get', mime.json, oData, fnCallBack, false, isAsync);
        }
    }
}();

sun.$ = function(query) {
    return document.querySelectorAll(query);
};


// var __readyFuns = [];   
// function DOMReady(){   
//     for(var i=0,l=readyFuns.length;i<l;i++){   
//       readyFun();   
//     }   
//     readyFuns = null;   
//     document.removeEventListener('DOMContentLoaded',DOMReady,false);   
// };
// sun.ready = function(fn){
//     if(readyFuns.length == 0){   
//        document.addEventListener('DOMContentLoaded',DOMReady,false);   
//     }   
//     readyFuns.push(fn);   
// }  


sun.context = sun.context || {};

sun.context.getQueryStringByName = function(name) {
    var result = location.search.match(new RegExp("[\?\&]" + name + "=([^\&]+)", "i"));

    if (result == null || result.length < 1) {
        return "";
    }

    return result[1];
};

sun.context.cookie = sun.context.cookie || {};
// article detail http://www.cnblogs.com/Darren_code/archive/2011/11/24/Cookie.html
sun.context.cookie.setExpires = function (name,value,expiresValue){
    var Days = expiresValue; 
    var exp  = new Date();    //new Date("December 31, 9998");
    
    exp.setTime(exp.getTime() + Days*24*60*60*1000);
    document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
};
sun.context.cookie.set = function (name,value){
    var Days = 30; //  cookie      30  
    
    this.setExpires(name, value, Days);
};
sun.context.cookie.get = function (name){
    var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));

    if(arr != null) {
        return unescape(arr[2]);
    }
    return null;
};
sun.context.cookie.del = function (name){
    var exp = new Date();
    var cval= this.get(name);

    exp.setTime(exp.getTime() - 1);
    if(cval!=null) {
        document.cookie= name + "="+cval+";expires="+exp.toGMTString();
    }
};

sun.context.localStorage = sun.context.localStorage || {};
sun.context.localStorage._ls = window.localStorage;
sun.context.localStorage.set = function(name, value) {
    this._ls.setItem(name,value.toString())
};
sun.context.localStorage.get  = function() {
    return this._ls.getItem(name);
};
sun.context.localStorage.del = function(name) {
    var val = this.get(name);

    if (!!val) {
        this.__ls.removeItem("c");
    }
};
sun.context.localStorage.clearAll = function() {
    window.localStorage.clear()
};

//-----------------------------  undealed  -----------------------------------
function addEvent (type, element, fun) {
    if (element.addEventListener) {
        addEvent = function (type, element, fun) {
            element.addEventListener(type, fun, false);
        }
    }
    else if(element.attachEvent){
        addEvent = function (type, element, fun) {
            element.attachEvent('on' + type, fun);
        }
    }
    else{
        addEvent = function (type, element, fun) {
            element['on' + type] = fun;
        }
    }
    return addEvent(type, element, fun);
}


sun.util = sun.util || {};

sun.util.array = sun.util.array || {};

/**
 * @param => ([1,2,32,4])
 * return [1, 2, 4, 32]
 *
 * @param => ([1,2,32,4], false)
 * return [32, 4, 2, 1]
 * 
 */
sun.util.array.sort = function(arrayList, isAsc) {
    if (typeof isAsc != 'boolean') {
        isAsc = true;
    }

    function sortNumber(a, b)
    {
        if (!!isAsc) {
            return a - b
        } else {
            return b - a
        }
    }

    return arrayList.sort(sortNumber);
};

/**
 * @param => ([0,1,2,3,4,5,6,7,8,9], 6)
 * return [0, 1, 2, 3, 4, 5, 7, 8, 9]
 * 
 * @param => ([0,1,2,3,4,5,6,7,8,9], [2,6,8])
 * return [0, 1, 3, 4, 5, 7, 9]
 * 
 */
sun.util.array.remove = function(arrayList, n) {
    //prototype     ,                 。
    if ( n < 0 || typeof n === 'undefined') {
        return arrayList;
    } else if (sun.util.isArray(n)) {
        var _tmp = null;

        n = this.sort(n, false);

        for(index in n) {
            arrayList = this.remove(arrayList, n[index]);
        }

        return arrayList;
    } else {
        return arrayList.slice(0,n).concat(arrayList.slice(n+1,arrayList.length));
    }
        /*
          concat  :       ,                   。
                            arrayList.slice(0,n)/arrayList.slice(n+1,arrayList.length)
                           ,   ,     n 。
          slice  :          ,    ,            。
        */
};


/**
 * format number
 * e.g. 12000 => 1,2000
 * @param amtStr number
 * @return string
 */
sun.util.formatIntNum = function (amtStr) {
    var isInt = function (num) {
        return (num % 1 === 0)
    };
    var amtStr = (isInt(amtStr)) ? amtStr : Number(amtStr).toFixed(0);
    amtStr = "" + amtStr;
    var a, renum = '';
    var j = 0;
    var a1 = '', a2 = '', a3 = '';
    var tes = /^-/;
    var isCurrency = (typeof (isCurrency) != 'undefined') ? isCurrency : true;

    a = amtStr.replace(/,/g, "");
    a = a.replace(/[^-\.,0-9]/g, "");
    a = a.replace(/(^\s*)|(\s*$)/g, "");
    if (tes.test(a))
        a1 = '-';
    else
        a1 = '';
    a = a.replace(/-/g, "");
    if (a != "0" && a.substr(0, 2) != "0.")
        a = a.replace(/^0*/g, "");
    j = a.indexOf('.');
    if (j < 0)
        j = a.length;
    a2 = a.substr(0, j);
    a3 = a.substr(j);
    j = 0;
    for (i = a2.length; i > 3; i = i - 3) {
        renum = "," + a2.substr(i - 3, 3) + renum;
        j++;
    }

    renum = a1 + a2.substr(0, a2.length - j * 3) + renum + a3;

    return renum;
}

/**
 * format number of money.
 * e.g. 12000.235 => 12,000.24
 * @param amtStr number
 * @return string
 */
sun.util.formatFloat = function (amtStr, isCurrency) {
    var isInt = function (num) {
        return (num % 1 === 0);
    };
    var amtStr = (isInt(amtStr)) ? amtStr : Number(amtStr).toFixed(2);
    amtStr = "" + amtStr;
    var a, renum = '';
    var j = 0;
    var a1 = '', a2 = '', a3 = '';
    var tes = /^-/;
    var isCurrency = (typeof (isCurrency) != 'undefined') ? isCurrency : true;
    var subfix = (isInt(amtStr) && isCurrency) ? '.00' : '';
    a = amtStr.replace(/,/g, "");
    a = a.replace(/[^-\.,0-9]/g, "");
    a = a.replace(/(^\s*)|(\s*$)/g, "");
    if (tes.test(a))
        a1 = '-';
    else
        a1 = '';
    a = a.replace(/-/g, "");
    if (a != "0" && a.substr(0, 2) != "0.")
        a = a.replace(/^0*/g, "");
    j = a.indexOf('.');
    if (j < 0)
        j = a.length;
    a2 = a.substr(0, j);
    a3 = a.substr(j);
    j = 0;
    for (i = a2.length; i > 3; i = i - 3) {
        renum = "," + a2.substr(i - 3, 3) + renum;
        j++;
    }

    renum = a1 + a2.substr(0, a2.length - j * 3) + renum + a3 + subfix;

    return renum;
}

sun.util.isEven = function(num) {
    return num % 2 == 0 ? true : false;
};

/**
 * @param => ([])
 * return true
 *
 * * @param => ({})
 * return false
 * 
 */
sun.util.isArray = function(arg) {
    // first way:
    return Object.prototype.toString.call(arg) === '[object Array]';

    // second way:
    //return (arr instanceof Array);
};

/**
 * 
 * eg. format = 'yyyy-MM-dd hh:mm:ss'
 * 
 */
sun.util.getCurrentTime = function(format) {
    var _this = new Date();
    var o = {
        "M+": _this.getMonth() + 1, //month
        "d+": _this.getDate(), //day
        "h+": _this.getHours(), //hour
        "m+": _this.getMinutes(), //minute
        "s+": _this.getSeconds(), //second
        "q+": Math.floor((_this.getMonth() + 3) / 3), //quarter
        "S": _this.getMilliseconds() //millisecond
    }

    if(!format) {
        format = "yyyy-MM-dd hh:mm:ss";
    }

    if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (_this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(format))
            format = format.replace(RegExp.$1,
                RegExp.$1.length == 1 ? o[k] :
                ("00" + o[k]).substr(("" + o[k]).length));
    return format;
};

/**
 * 
 * @param  '<span>I am Hero!</span>'
 * @return '<span>I am Hero!</span>'
 */
sun.util.htmlDecode = function(html) {
    var a = document.createElement( 'a' ); a.innerHTML = html;
    return a.textContent;
};
/**
 * 
 * @param  '<span>I am Hero!</span>'
 * @return '<span>I am Hero!</span>'
 */
sun.util.htmlEncode = function ( html ) {
    return document.createElement( 'a' ).appendChild( 
        document.createTextNode( html ) ).parentNode.innerHTML;
};

sun.util.parseToInt = function(obj, defaultNum, radix){
    var _t = 0;
    if (typeof radix != 'number'){
        radix = 10;
    }

    _t = parseInt(obj, radix);

    if (!_t){
        _t = defaultNum;
    }
    return _t;
};

/**
 * @param => ('I am a boy', 'boy', 'girl')
 * return 'I am a girl'
 * enhance replace
 * @param oString string
 * @param AFindText string
 * @param ARepText string
 * @return string
 */
sun.util.replaceAll = function (oString, AFindText, ARepText) {
    var raRegExp = new RegExp(AFindText.replace(/([\(\)\[\]\{\}\^\$\+\-\*\?\.\"\'\|\/\\])/g, "\\$1"), "ig");
    return oString.replace(raRegExp, ARepText);
};

/**
 * @param => ('best {0} for {1}', 'wish', 'you')
 * return 'best wish for you'
 */
sun.util.stringFormat = function(txt) {
    var arg = arguments,
        matchResult,
        matLength,
        str = txt,
        reg = /\{\d+?\}/gmi,
        i;

    matchResult = str.match(reg);
    if (matchResult) {
        matLength = matchResult.length;
        if (arg.length >= matLength) {
            for (i = 0; i < matLength; i++) {
                str = str.replace(matchResult[i], arg[i + 1]);
            }
        }
    }

    return str;
};

sun.util.transforTime = function (time) {
    var date = parseInt(time);
    var weekdays = ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"];
    var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"];
    var result = "";
    result += weekdays[new Date(date).getDay()];
    result += " ";
    result += months[new Date(date).getMonth()];
    result += " ";
    result += new Date(date).getDate();
    result += " ";
    result += new Date(date).getFullYear();
    result += " ";
    result += new Date(date).getHours();
    result += ":";
    result += new Date(date).getMinutes();
    return result;
};


 
 
 
sun.md.js
 
sun = sun || {};

sun.md = (function(global){
    var self,
        _userAgent = navigator.userAgent,
        _rWins = /Windows/i,
        _rWP = /IEMobile/i,
        _rAndroid = /Android/i,
        _rIPhone = /iPhone/i;

    androidScreenPixelRatio = {
        pr : null,
        screenHeight : null,
        getScreenHeight : function() {
            var that = this;
            if (null == that.screenHeight) {
                that.screenHeight = (screen.width < screen.height) ? screen.height : screen.width;
            }
            return that.screenHeight;
        },
        getDpi : function() {
            var that = this, dpi = 320;
            if (1200 <= that.getScreenHeight()) {
                dpi = "device-dpi";
            }
            return dpi;
        },
        getPixelRatio : function() {
            var that = this;
            if (null == that.pr) {
                that.pr = window.devicePixelRatio;
            }
            return that.pr;
        },
        judgePixelRatio : function(pr) {
            var that = this;
            return (pr === that.getPixelRatio());
        },
        isLdpi : function() {
            var that = this;
            return that.judgePixelRatio(0.75);
        },
        isMdpi : function() {
            var that = this;
            return that.judgePixelRatio(1);
        },
        isHdpi : function() {
            var that = this;
            return that.judgePixelRatio(1.5);
        }
    };

    BOMHeight = function() {
        var pageHeight = window.innerHeight;
        if(typeof pageHeight != "number"){
            if(document.compatMode == "CSS1Compat"){
                pageHeight = document.documentElement.clientHeight;
            }else{
                pageHeight = document.body.clientHeight;
            }
        }
        return pageHeight;
    };

    _parseViewPortContent = function(initWidth, initHeight, isUserScale, initScale, minScale, maxScale, isIntelligence) {
        var w = !!initWidth ? initWidth : "100%",
            h = !!initHeight ? initHeight : BOMHeight(),
            isUserScale = !!isUserScale ? 'yes' : 'no',
            initScale = !!initScale ? initScale : 1.0,     //      1.69
            minScale = !!minScale ? minScale : 0.1,
            maxScale = !!maxScale ? maxScale : 1.0,
            domeMeta = '',
            targetDensitydpi = 'device-dpi',      // [dpi_value(70 - 400) | device-dpi | high-dpi | medium-dpi | low-dpi]
            clientW = document.documentElement.clientWidth,
            screenW = window.screen.width;

        if (w === '100%') {
            w = "device-width";
            initScale = 1.0;
            targetDensitydpi = 'device-dpi';

            if (!!isIntelligence) {
                initScale = (screenW/clientW).toFixed(4);

                if(self.isAndroid()) {
                    targetDensitydpi = 'device-dpi';
                }
            }
        }

        if (typeof w === 'number') {
            if (!!isIntelligence) {
                w = Math.max(w, screenW);
            }

            initScale = (screenW/w).toFixed(4);
            
            if(self.isAndroid()) {
                initScale = 1;
                targetDensitydpi = (w/2.25714).toFixed(4);
                if (targetDensitydpi < 70) {
                    targetDensitydpi = 70;
                }
                if (targetDensitydpi > 400) {
                    targetDensitydpi = 400;
                }
            }
        }

        domeMeta = 
            'width=' + w + 
            //', height=' + h + 
            ', minimum-scale=' + minScale + 
            ', maximum-scale=' + maxScale + 
            ', initial-scale=' + initScale + 
            ', user-scalable=' + isUserScale +
            ', target-densitydpi=' + targetDensitydpi;

        return domeMeta.trim();
    };

    _getScreen =  function(){
        // detail information to  http://www.cnblogs.com/tearer/archive/2010/09/06/1819471.html
        // window.devicePixelRatio =      / dips
        // window.screen.width = Android           ,IOS =》 dips 

        var s = "       :" +       document.body.clientWidth + "
"; s += " :" + document.body.clientHeight + "
"; s += " :" + document.body.offsetWidth + " ( )" + "
"; s += " :" + document.body.offsetHeight + " ( )" + "
"; s += " :" + document.body.scrollWidth + "
"; s += " :" + document.body.scrollHeight + "
"; s += " (ff):" + document.body.scrollTop + "
"; s += " (ie):" + document.documentElement.scrollTop + "
"; s += " :" + document.body.scrollLeft + "
"; s += " :" + window.screenTop + "
"; s += " :" + window.screenLeft + "
"; s += " :" + window.screen.height + "
"; s += " :" + window.screen.width + "
"; s += " :" + window.screen.availHeight + "
"; s += " :" + window.screen.availWidth + "
"; s += " " + window.screen.colorDepth + " " + "
"; s += " / : " + window.devicePixelRatio + " / " + "
"; s += " " + window.screen.deviceXDPI + " / " + "
"; return s; }; self = {}; self.userAgent = _userAgent; //self.screen = _getScreen(); self.getViewPortContent = function() { var domeMeta = document.getElementsByName('viewport')[0]; return domeMeta.content; }; // var options = { // initWidth: null, // initHeight: null, // isUserScale: null, // initScale: null, // minScale: null, // maxScale: null, // isIntelligence: bool /default null // } // default options likes: { initWidth : '100%' } or { initWidth : 540 } // <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0"> self.setViewPortContent = function (options) { var DOM_meta = document.getElementsByName('viewport')[0], _content = ''; if (!DOM_meta) { DOM_meta = document.createElement('meta'); DOM_meta.name = 'viewport'; document.head.appendChild(DOM_meta); } if (typeof options === 'string'){ _content = _content; } else if (typeof options === 'object') { _content = _parseViewPortContent(options.initWidth, options.initHeight, options.isUserScale, options.initScale, options.minScale, options.maxScale, options.isIntelligence); } else { _content = _parseViewPortContent(); } DOM_meta.content = _content; }; self.isAndroid = function () { var me = this, result = false; if((_userAgent.match(_rAndroid))&& (_userAgent.match(_rAndroid).length > 0)) { result = true; } return result; }; self.isWindows = function () { var me = this, result = false; if((_userAgent.match(_rWins)) && (_userAgent.match(_rWins).length > 0)) { result = true; } return result; }; self.isWinPhone = function () { var me = this, result = false; if((_userAgent.match(_rWP)) && (_userAgent.match(_rWP).length > 0)) { result = true; } return result; }; self.isIOS = function () { var me = this, result = false; if((_userAgent.match(_rIPhone))&& (_userAgent.match(_rIPhone).length > 0)) { result = true; } return result; }; return self; })(this);

좋은 웹페이지 즐겨찾기