分享前端開發常用代碼片段

2021-03-02 前端大全

(點擊上方公眾號,可快速關注)

作者:WEBING

segmentfault.com/a/1190000014700549

一、預加載圖像

如果你的網頁中需要使用大量初始不可見的(例如,懸停的)圖像,那麼可以預加載這些圖像。

二、檢查圖像是否加載

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

你也可以使用 ID 或 CLASS 替換<img> 標籤來檢查某個特定的圖像是否被加載。

三、自動修復破壞的圖像

逐個替換已經破壞的圖像連結是非常痛苦的。不過,下面這段簡單的代碼可以幫助你。

四、懸停切換

當用戶滑鼠懸停在可點擊的元素上時,可添加類到元素中,反之則移除類。

只需要添加必要的 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:<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實現

$('#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實現

<body ontouchmove="event.preventDefault()" >

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實現

<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實現

<input type="text" id="showPwd" value="請輸入您的註冊密碼"/>

<input type="password" name="psw" 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 伺服器不能創建對象

            filesize = 'error'; // 無法獲取

        }

    }

    return filesize;

}

二十一、限制上傳文件類型


1、高版本瀏覽器

<input type="file" name="filePath" accept=".jpg,.jpeg,.doc,.docxs,.pdf"/>

2、限制圖片

<input type="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)$)/

 

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

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

 

//匹配中文字符

/[\u4e00-\u9fa5]/

 

//匹配雙字節字符(包括漢字)

/[^\x00-\xff]/

二十三、限制字符數

<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="發送驗證碼">

// JavaScript

var times = 60, // 時間設置60秒

 timer = null;

 

document.getElementById('send').onclick = function () {

 // 計時開始

 timer = setInterval(function () {

 times--;

 

 if (times <= 0) {

 send.value = '發送驗證碼';

 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('發送驗證碼');

            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('發送驗證碼');

            clearInterval(timer);

            $this.attr('disabled', false);

            times = 60;

        } else {

            $this.val(times + '秒後重試');

            $this.attr('disabled', true);

        }

    }, 1000);

});

二十六、倒計時跳轉

<div id="showtimes"></div>

// 設置倒計時秒數  

var t = 10;  

 

// 顯示倒計時秒數  

function showTime(){  

    t -= 1;  

    document.getElementById('showtimes').innerHTML= t;  

 

    if(t==0){  

        location.href='error404.asp';  

    }  

 

    //每秒執行一次 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));

二十八、當前日期

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調用錯誤處理


當 Ajax 調用返回 404 或 500 錯誤時,就執行錯誤處理程序。如果沒有定義處理程序,其他的 jQuery 代碼或會就此罷工。定義一個全局的 Ajax 錯誤處理程序

三十一、鏈式插件調用

jQuery 允許「鏈式」插件的方法調用,以減輕反覆查詢 DOM 並創建多個 jQuery 對象的過程。

通過使用鏈式,可以改善

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

鏈式和高速緩存的方法都是 jQuery 中可以讓代碼變得更短和更快的最佳做法。

本文在GitHub的地址 Common-code

閱讀更多

參考文章 『總結』web前端開發常用代碼整理(https://segmentfault.com/a/1190000011087315#articleHeader21)

覺得本文對你有幫助?請分享給更多人

關注「前端大全」,提升前端技能

相關焦點

  • 分享 前端開發 常用代碼片段
    四、懸停切換當用戶滑鼠懸停在可點擊的元素上時,可添加類到元素中,反之則移除類。如果沒有定義處理程序,其他的 jQuery 代碼或會就此罷工。定義一個全局的 Ajax 錯誤處理程序鏈式和高速緩存的方法都是 jQuery 中可以讓代碼變得更短和更快的最佳做法。
  • 常用的幾款前端開發編輯器對比
    這次選擇了五款前端常用的編輯器(有的稱ide也好)進行測評(順序無關)。優勢:內置了Git 版本控制功能,git面板非常友好的顯示代碼diff,直觀地回顧代碼更改過程,隨時修改和提交,提高效率。快速編碼特性。代碼補全(類似於 IntelliSense)、代碼片段、代碼重構等一應俱全。debug功能強大。單步、斷點調試,檢查與監視變量, 利用交互式解釋器和懸停來檢查上下文變量,在Nodejs調試中十分方便。
  • 分享前端開發常用代碼片段-值得收藏
    四、懸停切換當用戶滑鼠懸停在可點擊的元素上時,可添加類到元素中,反之則移除類。如果沒有定義處理程序,其他的 jQuery 代碼或會就此罷工。定義一個全局的 Ajax 錯誤處理程序鏈式和高速緩存的方法都是 jQuery 中可以讓代碼變得更短和更快的最佳做法。
  • 可信前端之路-代碼保護
    所以想要構造一個web系統中的TPM,首要問題就是需要保證輸入數據安全,打造一個相對可信的前端環境。但是由於web的開放特性,前端作為數據採集的最前線,js代碼始終暴露在外,在這種情況下,防止惡意偽造請求變得非常困難,可信前端也就成了無稽之談。在反覆對抗中,代碼保護也就是通常意義上的js代碼混淆的重要性逐漸彰顯出來。今天我就想和大家聊一聊js混淆的問題。
  • Gitlab-ci: 從零開始的前端自動化部署
    1.2 自動化部署給我們帶來的好處自動化部署的好處體現在幾個方面1.提高前端的開發效率和開發測試之間的協調效率Before如果按照傳統的流程,在項目上線前的測試階段,前端同學修復bug之後,要手動把代碼部署之後。
  • 【第849期】如何讓前端更安全?——XSS攻擊和防禦詳解
    對於不可信任的json數據。參與運算的動態變量,最好轉化為對應類型後再運算。如number型.如果是字符串操作,保證字符串被引號包裹。不能使用eval ,new fuction,settimeout執行動態字符串,因為這個字符串很可能就是一個xss代碼,如果無法避免,那麼也要轉義之後再參與運算。輸出到頁面上的數據必須使用相應方法轉義,前端可以考慮尋找js插件處理。
  • 分享一個前後端分離方案-前端angularjs+requirejs+dhtmlx 後端asp.net webapi
    一、前言    半年前左右折騰了一個前後端分離的架子,這幾天才想起來翻出來分享給大家。
  • 前端安全之 XSS 攻擊
    開發安全措施:1. 前端在顯示服務端數據時候,不僅是標籤內容需要過濾、轉義,就連屬性值也都可能需要。2. 後端接收請求時,驗證請求是否為攻擊請求,攻擊則屏蔽。PS:因為大部分文章是保存整個HTML內容的,前端顯示時候也不做過濾,就極可能出現這種情況。結論:後端儘可能對提交數據做過濾,在場景需求而不過濾的情況下,前端就需要做些處理了。開發安全措施:1. 首要是服務端要進行過濾,因為前端的校驗可以被繞過。
  • 前端開發:報錯Error in created hook:」SyntaxError:Unexpected token…」解決方法
    收錄於話題 #前端開發efeb:3142) at merged (vue.esm.js?efeb:3331) at createComponent (vue.esm.js?efeb:6033)通過對上述報錯的提示信息分析之後,得出該報錯是由於JSON.parse()在使用過程中沒有對數據源進行判斷處理。
  • 前端安全之XSS攻擊
    開發安全措施:1. 前端在顯示服務端數據時候,不僅是標籤內容需要過濾、轉義,就連屬性值也都可能需要。2. 後端接收請求時,驗證請求是否為攻擊請求,攻擊則屏蔽。結論:後端儘可能對提交數據做過濾,在場景需求而不過濾的情況下,前端就需要做些處理了。開發安全措施:1. 首要是服務端要進行過濾,因為前端的校驗可以被繞過。2.
  • 如何用前端防禦XSS及建立XSS報警機制
    的確是完整的XSS字符串,但是前端過濾了,導致此XSS沒有用武之地。所以前端開發人員只需要在網站的base.js代碼裡把過濾XSS的函數寫進去,再把每一個ajax傳過來的數據加上函數就可以了。前端代碼記得加密,防止攻擊者看出意圖從而導致繞過,不觸發報警。因為可能有些公司、個人網站已經有了自己的攻擊報警系統、智能日誌檢索系統,我也就不再寫了。把ajax發送的數據過濾後存到資料庫裡,再顯示就行了。可以根據自己現有的框架進行開發,思路上面已經了,不難理解,代碼也不難寫。如果你不會或者說是不想寫,可以等到我下一篇的文章。到時候裡面會有全部的原始碼。
  • 前端專題之npm包
    npm 出現之前:前端依賴項是保存到存儲庫中並手動下載的📁2012:npm 的使用量急劇增加——主要是由於 Browserifys 瀏覽器的支持🎉2012:npm 有了一個競爭對手 bower,它完全支持瀏覽器💻2012-2016:前端項目的依賴項數量成倍增加🤯2012-2016:構建和安裝前端應用變得越來越慢🐢2012-2016:大量(重複的)依賴項存儲在神奇的 node_modules
  • 我開發常用的類庫、Linux命令、SQL相關(一)
    趁著國慶節, 系統的整理了自己在開發的時候比較常用的類庫、Linux命令。有時候,「虛驚一場」這四個字是人世間最美好的成語,比起什麼興高採烈,五彩繽紛,一帆風順都要美好百倍。你可懂什麼叫失去。這些時間來,更覺如此。願悲傷恐懼能夠過去,事外之人更懂珍惜。
  • 前端離線化探索
    前端離線化幾種常用的方案Application CacheHTML5 最早提供一種了一種緩存機制,可以使web的應用程式離線運行。我們使用 Application Cache 接口設置瀏覽器應該緩存的資源,即配置manifest文件, 在用戶處於離線狀態時,點擊刷新按鈕,應用也能正常加載與工作。
  • 嵌入式開發中那些常用的工具軟體
    Eclipse 是一個開放原始碼的、基於Java的可擴展開發平臺。就其本身而言,它只是一個框架和一組服務,用於通過插件組件構建開發環境。幸運的是,Eclipse 附帶了一個標準的插件集,包括Java開發工具(Java Development Kit,JDK)。
  • UML常用圖的幾種關係的總結
    【代碼體現】:成員變量【箭頭及指向】:帶空心菱形的實心線,菱形指向整體【代碼表現】:局部變量、方法的參數或者對靜態方法的調用【箭頭及指向】:帶箭頭的虛線,指向被使用者 組合片段組合片段用來解決交互執行的條件及方式。 它允許在序列圖中直接表示邏輯組件,用於通過指定條件或子進程的應用區域,為任何生命線的任何部分定義特殊條件和子進程。常用的組合片段有:a.       抉擇(Alt)抉擇用來指明在兩個或更多的消息序列之間的互斥的選擇,相當於經典的if..else..。
  • 透徹分析:常見的前端架構風格和案例
    針對不同的端去編寫多套代碼的成本非常高,這種需求催生了Taro這類框架的誕生. 使用 Taro,我們可以只書寫一套代碼, 通過編譯工具可以輸出到不同的端:複製風格常用於網絡伺服器。瀏覽器和Node都有Worker的概念,但是一般都只推薦在CPU密集型的場景使用它們,因為瀏覽器或者NodeJS內置的異步操作已經非常高效。實際上前端應用CPU密集型場景並不多,或者目前階段不是特別實用。除此之外你還要權衡進程間通信的效率、Worker管理複雜度、異常處理等事情。有一個典型的CPU密集型的場景,即源文件轉譯.
  • 使用 Angular2+ 開發 Markdown 編輯器
    本文來自作者 孫亖 在 GitChat 上分享 「使用 Angular2+ 開發 Markdown
  • 有了這套前端數據可視化框架,人人都能快速上手!
    AntV這款前端可視化框架由螞蟻集團數據可視化團隊精心打造的數據可視化解決方案。統計圖表目前常用的幾款圖表庫有Highcharts、Echarts、amCharts等等,G2是螞蟻集團數據可視化團隊開源的一款圖表庫。
  • 前端工程師的一大神器——puppeteer
    (哈哈)本文主要講述一下Google出版並一直在不斷維護的神器puppeteer,通過學習本文你將了解其基本使用和常用功能。三、基本使用和常用功能該神器整體使用起來比較簡單,下面就開始我們的使用之路。3.1 啟動Browser核心函數就是異步調用puppeteer.launch()函數,根據相應的配置參數創建一個Browser實例。