日常站点开发常用到的几个JavaScript方法

获取图片原始宽高:

/**
*img: DOM图片对象
*fn: 回调方法
*fnErr: 图片错误回调
*/
function getImgNaturalDimensions(img, fn, fnErr) {
    if (img.naturalWidth !== undefined) {
        var nWidth = img.naturalWidth;
        var nHeight = img.naturalHeight;
        fn(nWidth, nHeight);
    } else {
        var _image = new window.Image();
        _image.onload = function() {
            if (typeof fn == "function") {
                fn(_image.width, _image.height);
            }
        };
        _image.onerror = function() {
            if (typeof fnErr == "function") {
                fnErr();
            }
        };
        _image.src = img.src;
    }
}

载入图片错误处理,通常用于当图片载入错误时显示默认图(需jQuery)

function loadIconError(el) {
    var src = $(el).attr("data-original-src");
    if (!src) {
        src = $(el).attr("src").replace(/_(\d)\d0x(\1)\d0/i, "");
    }
    var src404 = $(el).attr("data-404-src");
    if (!src404) {
        src404 = prefix + "css/v2/404/404-pic.png";
    }
    if ($(el).width() === $(el).height()) {
        src404 = prefix + "css/v2/404/404-pic-logo.png";
    }
    if (src) {
        var _image = new window.Image();
        _image.src = src;
        _image.onload = function() {
            $(el).attr("src", src);
        };
        _image.onerror = function() {
            $(el).removeAttr("onerror").attr("src", src404);
        };
    } else {
        var _image = new window.Image();
        _image.src = src404;
        _image.onload = function() {
            $(el).attr("src", src404);
        };
        _image.onerror = function() {
            $(el).removeAttr("onerror").attr("src", src404);
        };
    }
}

图片自适应盒子宽高(需jQuery),配合getImgNaturalDimensions一起使用。通常需要为image设置一个包裹容器,并且设置包裹容器的css(position:relative,overflow:hidden)。

function resizeImage(el) {
    // 延迟到DOMCONTENTLOADED后执行,修复无法获取到父元素宽高问题
    $(function() {
        var cssw = $(el).parent().width();
        var cssh = $(el).parent().height();
        (function(img, cssw, cssh) {
            getImgNaturalDimensions(img, function(rw, rh) {
                var ratio_w = cssw / rw;
                var ratio_h = cssh / rh;
                var ratio = 0,
                    aw = 0,
                    ah = 0;
                ratio = Math.max(ratio_w, ratio_h);
                aw = rw * ratio;
                ah = rh * ratio;
                var max_w = $(img).css("max-width");
                if (max_w != "none") {
                    max_w = parseFloat(max_w);
                    if (aw > max_w) {
                        aw = max_w;
                    }
                }
                var max_h = $(img).css("max-height");
                if (max_h != "none") {
                    max_h = parseFloat(max_h);
                    if (ah > max_h) {
                        ah = max_h;
                    }
                }
                var left = (aw - cssw) / 2;
                var top = (ah - cssh) / 2;
                var marginTop = -top + "px";
                var cssDisplay = "block";
                if ($(img).hasClass("imgfixhidden")) {
                    cssDisplay = "hidden";
                }
                $(img).css({
                    width: aw + "px",
                    height: ah + "px",
                    position: "absolute",
                    marginLeft: -left + "px",
                    marginTop: marginTop,
                    display: cssDisplay
                });
            });
        })(el, cssw, cssh);
    });
}

判断手机浏览器:

var ua = window.navigator.userAgent;
var browsers = {
baidu: ua.indexOf("baiduboxapp") > -1,//手机百度
qq: ua.indexOf('mqqbrowser') > -1,//QQ浏览器
uc: ua.indexOf('ucbrowser') > -1,//UC浏览器
safari: ua.indexOf('safari') > -1 &&ua.indexOf('mqqbrowser')==-1&&ua.indexOf('ucbrowser')==-1 && ua.indexOf('crios') === -1,//Safari浏览器
chrome: (ua.indexOf('chrome') > -1 || ua.indexOf('crios') > -1 ) &&ua.indexOf('mqqbrowser')==-1&&ua.indexOf('ucbrowser')==-1//chrome浏览器
}

判断浏览器平台:

window.browser = {
    versions: function() {
        var u = navigator.userAgent,
            app = navigator.appVersion;
        return { //移动终端浏览器版本信息 
            trident: u.indexOf('Trident') > -1, //IE内核
            presto: u.indexOf('Presto') > -1, //opera内核
            webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
            gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
            mobile: !!u.match(/AppleWebKit.*Mobile.*/) || !!u.match(/AppleWebKit/), //是否为移动终端
            ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
            android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器
            iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器
            iPad: u.indexOf('iPad') > -1, //是否iPad
            webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部
        };
    }(),
    language: (navigator.browserLanguage || navigator.language).toLowerCase()
};

浏览器滑动到底部,自动加载(需jQuery):

var scrollToBottom = (function() {
    var scrollCB = function scrollCB() {
        var scrollTop = $(window).scrollTop();
        var objBottom = $(this.myScroller).height() + $(this.myScroller).offset().top; //控件的高+控件距离
        var winHeight = window.innerHeight ? window.innerHeight : $(window).height();
        var scrollHeight = scrollTop + winHeight; //卷去的高度+浏览器的可视高度
        if (objBottom < scrollHeight + 50) {
            this.myScrollCb();
        }
    }

    var bindScroll = function bindScroll() {
        var self = this;
        $(window).on('scroll', function() { self.scrollCB() });
    }

    var unbindScroll = function unbindScroll() {
        $(window).unbind('scroll');
    }

    return {
        myScroller: '',
        myScrollCb: null,
        scrollCB: scrollCB,
        bindScroll: bindScroll,
        unbindScroll: unbindScroll,
        init: function(cb) {
            //this.myScroller = scroller;
            this.myScrollCb = cb;
            this.bindScroll();
        }
    }
})();
var scrollToBottom.init(function(){
    console.log('Comes to Bottom');
});

格式化日期:

/**
 * 格式化日期
 * yyyy MM dd hh mm ss
 * formatDate('yyyy-MM-dd hh:mm:ss')    ->  2017-07-04 12:13:20
 * @param  {String}   format        格式化字符串
 * [@param  {Number}   dateTimestamp 需要格式化的时间戳(可选)] 
 * @return {String}                 格式化后的日期
 */
function formatDate(format, dateTimestamp){
    var date = dateTimestamp ? new Date(dateTimestamp) : new Date();
    var fillZero = function(num){if (num<10) {return '0'+num}return num;}
    return format.replace(/yyyy/,date.getFullYear())
                    .replace(/MM/,fillZero(date.getMonth()+1))
                    .replace(/dd/,fillZero(date.getDate()))
                    .replace(/hh/,fillZero(date.getHours()))
                    .replace(/mm/,fillZero(date.getMinutes()))
                    .replace(/ss/,fillZero(date.getSeconds()));
}

获取到地址栏中的搜索字段:

function getSearch(name){
    var search = window.unescape(window.location.search.substr(1));
    var regExp = new RegExp(name+'=([^&]*)');
    var matches = regExp.exec(search);
    if(matches){
        console.log(matches);
        return matches[1];
    }
    return null;
}

除掉字符串两端空格:

function trim(str){
    return str.replace(/^\s+|\s+$/g,'');
}

复制文本

function selectTextToCopy(selector) {
    var text = document.querySelector(selector),
        range,
        selection;

    if (window.getSelection) { //Firefox Chrome Safari
        text.setAttribute("contenteditable", true);
        //获取Selection 对象,表示用户选择的文本范围或光标的当前位置。
        selection = window.getSelection();
        range = document.createRange();
        range.selectNodeContents(text);
        selection.removeAllRanges();
        selection.addRange(range);
        //IE9-不支持textContent
        makeSelection(0, text.firstChild.textContent.length, 0, text.firstChild);
    } else {
        return alert("浏览器不支持长按复制功能");
    }
}

function makeSelection(start, end, child, parent) {
    var range = document.createRange();
    range.setStart(parent.childNodes[child] || parent, start);
    range.setEnd(parent.childNodes[child] || parent, end);
    var sel = window.getSelection();
    sel.removeAllRanges();
    sel.addRange(range);
}

表单序列化

function serializeForm(form) {
    if (!form || form.nodeName.toUpperCase() !== 'FORM') {
        return;
    }
    var elements = form.elements,
        result = [];
    for (var i = 0; i < elements.length; i++) {
        var field = elements[i];
        var fieldName = field.name;
        var fieldType = field.type;
        if (field.disabled || !fieldName) {
            continue;
        }
        switch (fieldType) {
            case 'text':
            case 'password':
            case 'hidden':
            case 'textarea':
                result.push(fieldName+'='+field.value);
                break;
            case 'checkbox':
            case 'radio':
                if (field.checked) {
                    result.push(fieldName+'='+field.value)
                }
                break;
            case 'select-one':
            case 'select-multiple':
                var options = field.options;
                for(var j = 0;j<options.length;j++) {
                    if (options[j].selected) {
                        result.push(fieldName+'='+options[j].value)
                    }
                }
                break;
            case 'file':
            case 'submit': 
            default:
                break;
        }
    }
    return result.join('&');
}

DOM事件处理工具

var eventUtil = {
    getEvent: function(e) {
        return e || window.event;
    },
    getTarget: function(e) {
        return e.target || e.srcElement;
    },
    preventDefault: function(e) {
        if (e.preventDefault) {
            e.preventDefault();
        } else if ('returnValue' in e) {
            e.returnValue = false;
        }
    },
    stopPropagation: function(e) {
        if (e.stopPropagation) {
            e.stopPropagation();
        } else if('cancelBubble' in e) {
            e.cancelBubble = true;
        }
    },
    on: function(ele,type,handler) {
        if (ele.addEventListener) {
            ele.addEventListener(type,handler,false);
            return handler;
        } else if(ele.attachEvent) {
            function proxyHandler(e) {
                return handler.call(ele,e);
            }
            ele.attachEvent('on'+type,proxyHandler);
            return proxyHandler;
        }
    },
    off: function(ele,type,handler) {
        if (ele.removeEventListener) {
            ele.removeEventListener(type,handler,false);
            return handler;
        } else if(ele.detachEvent) {
            ele.detachEvent('on'+type,handler);
        }
    },
    once: function(ele,type,handler) {
        function proxyHandler(e) {
            handler.call(ele,e);
            eventUtil.off(ele,type,arguments.callee);
        }

        if (ele.addEventListener) {
            ele.addEventListener(type,proxyHandler,false);
            return proxyHandler;
        } else if(ele.attachEvent) {
            ele.attachEvent('on'+type,proxyHandler);
            return proxyHandler;
        }
    }
};

参考网址:
https://developer.mozilla.org/zh-CN/docs/Web/API/Window/getSelection
https://developer.mozilla.org/en-US/docs/Web/API/Range

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
73种网页常用js代码. 比如: 1、后退 前进 <input type="button" value="后退" onClick="history.go(-1)"> <input type="button" value="前进" onClick="history.go( 1 );return true;"> 2、返回 <form><input type="button" value="返回上一步" onClick="history.back(-1)"></form> 3、查看源码 <input type="button" name="view" value="查看源码" onClick="window.location="view-source:" +window.location.href"> 4、禁止查看源码 <body oncontextmenu="return false"></body> 5、刷新按钮一 <input type="button" value="刷新按钮一" onClick="ReloadButton()"> <script>function ReloadButton(){location.href="i001.htm";}</script> 刷新按钮二 <input type="button" value="刷新按钮二" onClick="history.go(0)"> 6、回首页按钮 <input type="button" value="首页" onClick="HomeButton()"> <script>function HomeButton(){location.href=http://www.winliuxq.com;}</script> 7、弹出警告框 <input type="button" value="弹出警告框" onClick="AlertButton()"> <script>function AlertButton(){window.alert("要多多光临呀!");}</script> 8、状态栏信息 <input type="button" value="状态栏信息" onClick="StatusButton()"> <script>function StatusButton(){window.status="要多多光临呀!";}</script> 9、背景色变换 <form><input type="button" value="背景色变换" onClick="BgButton()"></form> <script>function BgButton(){ if (document.bgColor=='#00ffff') {document.bgColor='#ffffff';} else{document.bgColor='#00ffff';} } </script> 10、打开新窗口 <input type="button" value="打开新窗口" onClick="NewWindow()"> <script>function NewWindow(){window.open("c01.htm","","height=240,width=340,status=no,location=no,toolbar=no,directories=no,menubar=no");} </script> 11、窗口最小化 <OBJECT id="min" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"><PARAM name="Command" value="Minimize"></OBJECT><button onClick="min.Click()">窗口最小化</button> 12、全屏代码 <input type="BUTTON" name="FullScreen" value="全屏显示" onClick="window.open(document.location, 'butong_net', 'fullscreen')"> 13、关闭窗口 <OBJECT id=closes type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"><param name="Command" value="Close"></object><input type="button" value="关闭窗口" onClick="closes.Click();"> 关闭窗口 <input type=button value=关闭窗口 onClick="javascript:self.close()"> 14、最大化 <object id=big classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"> <param name="Command" value="Maximize"></object><input type=button value=最大化 onClick=big.Click()> 15、关闭输入法 <input style="ime-mode:disabled" value=关闭输入法> 。。。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值