分享前端開發(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();
- });
九、阻止默認行為
- // 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 中可以讓代碼變得更短和更快的最佳做法。