美文网首页
分享前端开发常用的代码片段

分享前端开发常用的代码片段

作者: 小小_cfe6 | 来源:发表于2018-07-17 15:53 被阅读0次

    WEBING

    segmentfault.com/a/1190000014700549

    一、预加载图像

    如果你的网页中需要使用大量初始不可见的(例如,悬停的)图像,那么可以预加载这些图像。

    二、检查图像是否加载

    有时为了继续脚本,你可能需要检查图像是否全部加载完毕。

    三、自动修复破坏的图像

    逐个替换已经破坏的图像链接是非常痛苦的。不过,下面这段简单的代码可以帮助你。

    四、悬停切换

    当用户鼠标悬停在可点击的元素上时,可添加类到元素中,反之则移除类。

    只需要添加必要的 CSS 即可。更简单的方法是使用 toggleClass() 方法。

    五、鼠标滚轮

    $('#content').on("mousewheel DOMMouseScroll", function (event) {

        // chrome & ie || // firefox

        var delta = (event.originalEvent.wheelDelta && (event.originalEvent.wheelDelta > 0 ? 1 : -1)) ||

            (event.originalEvent.detail && (event.originalEvent.detail > 0 ? -1 : 1));  

        if (delta > 0) {

            console.log('mousewheel top');

        } else if (delta < 0) {

            console.log('mousewheel bottom');

        }

    });

    六、鼠标坐标

    1、JavaScript实现

    X: Y:

    function mousePosition(ev){

        if(ev.pageX || ev.pageY){

            return {x:ev.pageX, y:ev.pageY};

        }

        return {

            x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,

            y:ev.clientY + document.body.scrollTop - document.body.clientTop

        };

    }

    function mouseMove(ev){

        ev = ev || window.event;

        var mousePos = mousePosition(ev);

        document.getElementById('xxx').value = mousePos.x;

        document.getElementById('yyy').value = mousePos.y;

    }

    document.onmousemove = mouseMove;

    2、jQuery实现

    $('#ele').click(function(event){

        //获取鼠标在图片上的坐标

        console.log('X:' + event.offsetX+'\n Y:' + event.offsetY);

        //获取元素相对于页面的坐标

        console.log('X:'+$(this).offset().left+'\n Y:'+$(this).offset().top);

    });

    七、禁止移动端浏览器页面滚动

    1、HTML实现

    2、JavaScript实现

    document.addEventListener('touchmove', function(event) {

        event.preventDefault();

    });

    八、阻止默认行为

    // JavaScript

    document.getElementById('btn').addEventListener('click', function (event) {

        event = event || window.event;

        if (event.preventDefault){

            // W3C

            event.preventDefault();

        } else{

            // IE

            event.returnValue = false;

        }

    }, false);

    // jQuery

    $('#btn').on('click', function (event) {

        event.preventDefault();

    });

    九、阻止冒泡

    // JavaScript

    document.getElementById('btn').addEventListener('click', function (event) {

        event = event || window.event;

        if (event.stopPropagation){

            // W3C

            event.stopPropagation();

        } else{

            // IE

            event.cancelBubble = true;

        }

    }, false);

    // jQuery

    $('#btn').on('click', function (event) {

        event.stopPropagation();

    });

    十、检测浏览器是否支持svg

    function isSupportSVG() {

        var SVG_NS = 'http://www.w3.org/2000/svg';

        return !!document.createElementNS &&!!document.createElementNS(SVG_NS,'svg').createSVGRect;

    }

    console.log(isSupportSVG());

    十一、检测浏览器是否支持canvas

    function isSupportCanvas() {

        if(document.createElement('canvas').getContext){

            return true;

        }else{

            return false;

        }

    }

    console.log(isSupportCanvas());

    十二、检测是否是微信浏览器

    function isWeiXinClient() {

        var ua = navigator.userAgent.toLowerCase();

        if (ua.match(/MicroMessenger/i)=="micromessenger") {

            return true;

        } else {

            return false;

        }

    }

    alert(isWeiXinClient());

    十三、检测是否移动端及浏览器内核

    var browser = {

        versions: function() {

            var u = navigator.userAgent;

            return {

                trident: u.indexOf('Trident') > -1, //IE内核

                presto: u.indexOf('Presto') > -1, //opera内核

                webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核

                gecko: u.indexOf('Firefox') > -1, //火狐内核Gecko

                mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否移动终端

                ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios

                android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android

                iPhone: u.indexOf('iPhone') > -1 , //iPhone

                iPad: u.indexOf('iPad') > -1, //iPad

                webApp: u.indexOf('Safari') > -1 //Safari

            };

        }

    }

    if (browser.versions.mobile() || browser.versions.ios() || browser.versions.android() ||browser.versions.iPhone() || browser.versions.iPad()) {

        alert('移动端');

    }

    十四、检测是否电脑端/移动端

    var browser={

        versions:function(){

            var u = navigator.userAgent, app = navigator.appVersion;

            var sUserAgent = navigator.userAgent;

            return {

            trident: u.indexOf('Trident') > -1,

            presto: u.indexOf('Presto') > -1,

            isChrome: u.indexOf("chrome") > -1,

            isSafari: !u.indexOf("chrome") > -1 && (/webkit|khtml/).test(u),

            isSafari3: !u.indexOf("chrome") > -1 && (/webkit|khtml/).test(u) &&u.indexOf('webkit/5') != -1,

            webKit: u.indexOf('AppleWebKit') > -1,

            gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,

            mobile: !!u.match(/AppleWebKit.*Mobile.*/),

            ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),

            android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1,

            iPhone: u.indexOf('iPhone') > -1,

            iPad: u.indexOf('iPad') > -1,

            iWinPhone: u.indexOf('Windows Phone') > -1

            };

        }()

    }

    if(browser.versions.mobile || browser.versions.iWinPhone){

        window.location = "http:/www.baidu.com/m/";

    }

    十五、检测浏览器内核

    function getInternet(){    

        if(navigator.userAgent.indexOf("MSIE")>0) {    

          return "MSIE"; //IE浏览器  

        }  

        if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){    

          return "Firefox"; //Firefox浏览器  

        }  

        if(isSafari=navigator.userAgent.indexOf("Safari")>0) {    

          return "Safari";      //Safan浏览器  

        }  

        if(isCamino=navigator.userAgent.indexOf("Camino")>0){    

          return "Camino"; //Camino浏览器  

        }  

        if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0){    

          return "Gecko";    //Gecko浏览器  

        }    

    }

    十六、强制移动端页面横屏显示

    $( window ).on( "orientationchange", function( event ) {

        if (event.orientation=='portrait') {

            $('body').css('transform', 'rotate(90deg)');

        } else {

            $('body').css('transform', 'rotate(0deg)');

        }

    });

    $( window ).orientationchange();

    十七、电脑端页面全屏显示

    function fullscreen(element) {

        if (element.requestFullscreen) {

            element.requestFullscreen();

        } else if (element.mozRequestFullScreen) {

            element.mozRequestFullScreen();

        } else if (element.webkitRequestFullscreen) {

            element.webkitRequestFullscreen();

        } else if (element.msRequestFullscreen) {

            element.msRequestFullscreen();

        }

    }

    fullscreen(document.documentElement);

    十八、获得/失去焦点

    1、JavaScript实现

    // JavaScript

    window.onload = function(){

        var oIpt = document.getElementById("i_input");

        if(oIpt.value == "会员卡号/手机号"){

            oIpt.style.color = "#888";

        }else{

            oIpt.style.color = "#000";

        };

        oIpt.onfocus = function(){

            if(this.value == "会员卡号/手机号"){

                this.value="";

                this.style.color = "#000";

                this.type = "password";

            }else{

                this.style.color = "#000";

            }

        };

        oIpt.onblur = function(){

            if(this.value == ""){

                this.value="会员卡号/手机号";

                this.style.color = "#888";

                this.type = "text";

            }

        };

    }

    十九、正则表达式

    //验证邮箱

    /^\w+@([0-9a-zA-Z]+[.])+[a-z]{2,4}$/

    //验证手机号

    /^1[3|5|8|7]\d{9}$/

    //验证URL

    /^http:\/\/.+\./

    //验证身份证号码

    /(^\d{15}$)|(^\d{17}([0-9]|X|x)$)/

    //匹配字母、数字、中文字符

    /^([A-Za-z0-9]|[\u4e00-\u9fa5])*$/

    //匹配中文字符

    /[\u4e00-\u9fa5]/

    //匹配双字节字符(包括汉字)

    /[^\x00-\xff]/

    二十、限制字符数

    //字符串截取

    function getByteVal(val, max) {

        var returnValue = '';

        var byteValLen = 0;

        for (var i = 0; i < val.length; i++) { if (val[i].match(/[^\x00-\xff]/ig) != null) byteValLen+= 2; else byteValLen += 1; if (byteValLen > max) break;

            returnValue += val[i];

        }

        return returnValue;

    }

    $('#txt').on('keyup', function () {

        var val = this.value;

        if (val.replace(/[^\x00-\xff]/g, "**").length > 14) {

            this.value = getByteVal(val, 14);

        }

    });

    二十一、AJAX调用错误处理

    当 Ajax 调用返回 404 或 500 错误时,就执行错误处理程序。如果没有定义处理程序,其他的 jQuery 代码或会就此罢工。定义一个全局的 Ajax 错误处理程序

    二十二、链式插件调用

    jQuery 允许“链式”插件的方法调用,以减轻反复查询 DOM 并创建多个 jQuery 对象的过程。

    通过使用链式,可以改善

    还有一种方法是在(前缀$)变量中高速缓存元素

    链式和高速缓存的方法都是 jQuery 中可以让代码变得更短和更快的最佳做法。

    本文在GitHub的地址 Common-code

    阅读更多

    参考文章 『总结』web前端开发常用代码整理(https://segmentfault.com/a/1190000011087315#articleHeader21)

    相关文章

      网友评论

          本文标题:分享前端开发常用的代码片段

          本文链接:https://www.haomeiwen.com/subject/zgfgpftx.html