分享前端開發(fā)常用代碼片段
一、預(yù)加載圖像
如果你的網(wǎng)頁中需要使用大量初始不可見的(例如,懸停的)圖像,那么可以預(yù)加載這些圖像。

二、檢查圖像是否加載
有時為了繼續(xù)腳本,你可能需要檢查圖像是否全部加載完畢。

你也可以使用 ID 或 CLASS 替換<img> 標(biāo)簽來檢查某個特定的圖像是否被加載。
三、自動修復(fù)破壞的圖像
逐個替換已經(jīng)破壞的圖像鏈接是非常痛苦的。不過,下面這段簡單的代碼可以幫助你。

四、懸停切換
當(dāng)用戶鼠標(biāo)懸停在可點擊的元素上時,可添加類到元素中,反之則移除類。

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

五、淡入淡出/顯示隱藏

六、鼠標(biāo)滾輪
- $('#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');
 - }
 - });
 
七、鼠標(biāo)坐標(biāo)
1、JavaScript實現(xiàn)
- X:<input id="xxx" type="text" /> Y:<input id="yyy" type="text" />
 - 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實現(xiàn)
- $('#ele').click(function(event){
 - //獲取鼠標(biāo)在圖片上的坐標(biāo)
 - console.log('X:' + event.offsetX+'\n Y:' + event.offsetY);
 - //獲取元素相對于頁面的坐標(biāo)
 - console.log('X:'+$(this).offset().left+'\n Y:'+$(this).offset().top);
 - });
 
八、禁止移動端瀏覽器頁面滾動
1、HTML實現(xiàn)
- <body ontouchmove="event.preventDefault()" >
 
2、JavaScript實現(xiàn)
- document.addEventListener('touchmove', function(event) {
 - event.preventDefault();
 - });
 
九、阻止默認(rèn)行為
- // 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());
 
十四、檢測是否移動端及瀏覽器內(nèi)核
- var browser = {
 - versions: function() {
 - var u = navigator.userAgent;
 - return {
 - trident: u.indexOf('Trident') > -1, //IE內(nèi)核
 - presto: u.indexOf('Presto') > -1, //opera內(nèi)核
 - webKit: u.indexOf('AppleWebKit') > -1, //蘋果、谷歌內(nèi)核
 - gecko: u.indexOf('Firefox') > -1, //火狐內(nèi)核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/";
 - }
 
十六、檢測瀏覽器內(nèi)核
- 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實現(xiàn)
- <input id="i_input" type="text" value="會員卡號/手機號"/>
 - // 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";
 - }
 - };
 - }
 
2、jQuery實現(xiàn)
- <input type="text" class="oldpsw" id="showPwd" value="請輸入您的注冊密碼"/>
 - <input type="password" name="psw" class="oldpsw" id="password" value="" style="display:none;"/>
 - // jQuery
 - $("#showPwd").focus(function() {
 - var text_value=$(this).val();
 - if (text_value =='請輸入您的注冊密碼') {
 - $("#showPwd").hide();
 - $("#password").show().focus();
 - }
 - });
 - $("#password").blur(function() {
 - var text_value = $(this).val();
 - if (text_value == "") {
 - $("#showPwd").show();
 - $("#password").hide();
 - }
 - });
 
二十、獲取上傳文件大小
- <input type="file" id="filePath" onchange="getFileSize(this)"/>
 - // 兼容IE9低版本
 - function getFileSize(obj){
 - var filesize;
 - if(obj.files){
 - filesize = obj.files[0].size;
 - }else{
 - try{
 - var path,fso;
 - path = document.getElementById('filePath').value;
 - fso = new ActiveXObject("Scripting.FileSystemObject");
 - filesize = fso.GetFile(path).size;
 - }
 - catch(e){
 - // 在IE9及低版本瀏覽器,如果不容許ActiveX控件與頁面交互,點擊了否,就無法獲取size
 - console.log(e.message); // Automation 服務(wù)器不能創(chuàng)建對象
 - filesize = 'error'; // 無法獲取
 - }
 - }
 - return filesize;
 - }
 
二十一、限制上傳文件類型
1、高版本瀏覽器
- <input type="file" name="filePath" accept=".jpg,.jpeg,.doc,.docxs,.pdf"/>
 
2、限制圖片
- <input type="file" class="file" value="上傳" accept="image/*">
 
3、低版本瀏覽器
- <input type="file" id="filePath" onchange="limitTypes()">
 - /* 通過擴展名,檢驗文件格式。
 - * @parma filePath{string} 文件路徑
 - * @parma acceptFormat{Array} 允許的文件類型
 - * @result 返回值{Boolen}:true or false
 - */
 - function checkFormat(filePath,acceptFormat){
 - var resultBool= false,
 - ex = filePath.substring(filePath.lastIndexOf('.') + 1);
 - ex = ex.toLowerCase();
 - for(var i = 0; i < acceptFormat.length; i++){
 - if(acceptFormat[i] == ex){
 - resultBool = true;
 - break;
 - }
 - }
 - return resultBool;
 - };
 - function limitTypes(){
 - var obj = document.getElementById('filePath');
 - var path = obj.value;
 - var result = checkFormat(path,['bmp','jpg','jpeg','png']);
 - if(!result){
 - alert('上傳類型錯誤,請重新上傳');
 - obj.value = '';
 - }
 - }
 
二十二、正則表達式
- //驗證郵箱
 - /^\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)$)/
 - //匹配字母、數(shù)字、中文字符
 - /^([A-Za-z0-9]|[\u4e00-\u9fa5])*$/
 - //匹配中文字符
 - /[\u4e00-\u9fa5]/
 - //匹配雙字節(jié)字符(包括漢字)
 - /[^\x00-\xff]/
 
二十三、限制字符數(shù)
- <input id="txt" type="text">
 - //字符串截取
 - 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);
 - }
 - });
 
二十四、驗證碼倒計時
- <input id="send" type="button" value="發(fā)送驗證碼">
 - // JavaScript
 - var times = 60, // 時間設(shè)置60秒
 - timer = null;
 - document.getElementById('send').onclick = function () {
 - // 計時開始
 - timer = setInterval(function () {
 - times--;
 - if (times <= 0) {
 - send.value = '發(fā)送驗證碼';
 - clearInterval(timer);
 - send.disabled = false;
 - times = 60;
 - } else {
 - send.value = times + '秒后重試';
 - send.disabled = true;
 - }
 - }, 1000);
 - }
 - var times = 60,
 - timer = null;
 - $('#send').on('click', function () {
 - var $this = $(this);
 - // 計時開始
 - timer = setInterval(function () {
 - times--;
 - if (times <= 0) {
 - $this.val('發(fā)送驗證碼');
 - clearInterval(timer);
 - $this.attr('disabled', false);
 - times = 60;
 - } else {
 - $this.val(times + '秒后重試');
 - $this.attr('disabled', true);
 - }
 - }, 1000);
 - });
 
二十五、時間倒計時
- <p id="_lefttime"></p>
 - var times = 60,
 - timer = null;
 - $('#send').on('click', function () {
 - var $this = $(this);
 - // 計時開始
 - timer = setInterval(function () {
 - times--;
 - if (times <= 0) {
 - $this.val('發(fā)送驗證碼');
 - clearInterval(timer);
 - $this.attr('disabled', false);
 - times = 60;
 - } else {
 - $this.val(times + '秒后重試');
 - $this.attr('disabled', true);
 - }
 - }, 1000);
 - });
 
二十六、倒計時跳轉(zhuǎn)
- <div id="showtimes"></div>
 - // 設(shè)置倒計時秒數(shù)
 - var t = 10;
 - // 顯示倒計時秒數(shù)
 - function showTime(){
 - t -= 1;
 - document.getElementById('showtimes').innerHTML= t;
 - if(t==0){
 - location.href='error404.asp';
 - }
 - //每秒執(zhí)行一次 showTime()
 - setTimeout("showTime()",1000);
 - }
 - showTime();
 
二十七、時間戳、毫秒格式化
- function formatDate(now) {
 - var y = now.getFullYear();
 - var m = now.getMonth() + 1; // 注意 JavaScript 月份+1
 - var d = now.getDate();
 - var h = now.getHours();
 - var m = now.getMinutes();
 - var s = now.getSeconds();
 - return y + "-" + m + "-" + d + " " + h + ":" + m + ":" + s;
 - }
 - var nowDate = new Date(1442978789184);
 - alert(formatDate(nowDate));
 
二十八、當(dāng)前日期
- var calculateDate = function(){
 - var date = new Date();
 - var weeks = ["日","一","二","三","四","五","六"];
 - return date.getFullYear()+"年"+(date.getMonth()+1)+"月"+
 - date.getDate()+"日 星期"+weeks[date.getDay()];
 - }
 - $(function(){
 - $("#dateSpan").html(calculateDate());
 - });
 
二十九、判斷周六/周日
- <p id="text"></p>
 - function time(y,m){
 - var tempTime = new Date(y,m,0);
 - var time = new Date();
 - var saturday = new Array();
 - var sunday = new Array();
 - for(var i=1;i<=tempTime.getDate();i++){
 - time.setFullYear(y,m-1,i);
 - var day = time.getDay();
 - if(day == 6){
 - saturday.push(i);
 - }else if(day == 0){
 - sunday.push(i);
 - }
 - }
 - var text = y+"年"+m+"月份"+"<br />"
 - +"周六:"+saturday.toString()+"<br />"
 - +"周日:"+sunday.toString();
 - document.getElementById("text").innerHTML = text;
 - }
 - time(2018,5);
 
三十、AJAX調(diào)用錯誤處理
當(dāng) Ajax 調(diào)用返回 404 或 500 錯誤時,就執(zhí)行錯誤處理程序。如果沒有定義處理程序,其他的 jQuery 代碼或會就此罷工。定義一個全局的 Ajax 錯誤處理程序

三十一、鏈?zhǔn)讲寮{(diào)用
jQuery 允許“鏈?zhǔn)?rdquo;插件的方法調(diào)用,以減輕反復(fù)查詢 DOM 并創(chuàng)建多個 jQuery 對象的過程。

通過使用鏈?zhǔn)?,可以改?/p>

還有一種方法是在(前綴$)變量中高速緩存元素

鏈?zhǔn)胶透咚倬彺娴姆椒ǘ际?jQuery 中可以讓代碼變得更短和更快的最佳做法。
















 
 
 










 
 
 
 