精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

18 個高級工程師必須會的強大JavaScript 技巧

開發 前端
今天我們一起來聊一聊18 個高級工程師必須會的強大JavaScript 技巧都有哪些吧。

瀏覽器

01、實現全屏當您需要將當前屏幕顯示為全屏時

function fullScreen() {  
    const el = document.documentElement
    const rfs = 
    el.requestFullScreen || 
    el.webkitRequestFullScreen || 
    el.mozRequestFullScreen || 
    el.msRequestFullscreen
    if(typeof rfs != "undefined" && rfs) {
        rfs.call(el)
    }
}
fullScreen()

02、退出全屏

當您需要退出全屏時

function exitScreen() {
    if (document.exitFullscreen) { 
        document.exitFullscreen()
    } 
    else if (document.mozCancelFullScreen) { 
        document.mozCancelFullScreen()
    } 
    else if (document.webkitCancelFullScreen) { 
        document.webkitCancelFullScreen()
    } 
    else if (document.msExitFullscreen) { 
        document.msExitFullscreen()
    } 
    if(typeof cfs != "undefined" && cfs) {
        cfs.call(el)
    }
}
exitScreen()

03、頁面打印

當您需要打印當前頁面時

window.print()

04、打印內容風格變更

當需要打印出當前頁面,但需要修改當前布局時

<style>
/* Use @media print to adjust the print style you need */
@media print {
    .noprint {
        display: none;
    }
}
</style>
<div class="print">print</div>
<div class="noprint">noprint</div>

05、阻止關閉事件

當需要阻止用戶刷新或關閉瀏覽器時,可以選擇觸發beforeunload事件,有些瀏覽器無法自定義文本內容

window.onbeforeunload = function(){
    return 'Are you sure you want to leave the haorooms blog?';
};

06、屏幕錄制

當您需要錄制當前屏幕并上傳或下載屏幕錄制時

const streamPromise = navigator.mediaDevices.getDisplayMedia()
streamPromise.then(stream => {
    var recordedChunks = [];// recorded video data
var options = { mimeType: "video/webm; codecs=vp9" };// Set the encoding format
    var mediaRecorder = new MediaRecorder(stream, options);// Initialize the MediaRecorder instance
    mediaRecorder.ondataavailable = handleDataAvailable;// Set the callback when data is available (end of screen recording)
    mediaRecorder.start();
    // Video Fragmentation
    function handleDataAvailable(event) {
        if (event.data.size > 0) {
            recordedChunks.push(event.data);// Add data, event.data is a BLOB object
            download();// Encapsulate into a BLOB object and download
        }
    }
// file download
    function download() {
        var blob = new Blob(recordedChunks, {
            type: "video/webm"
        });
        // Videos can be uploaded to the backend here
        var url = URL.createObjectURL(blob);
        var a = document.createElement("a");
        document.body.appendChild(a);
        a.style = "display: none";
        a.href = url;
        a.download = "test.webm";
        a.click();
        window.URL.revokeObjectURL(url);
    }
})

07、判斷橫屏和豎屏

當您需要判斷手機橫屏或豎屏狀態時

const streamPromise = navigator.mediaDevices.getDisplayMedia()
streamPromise.then(stream => {
    var recordedChunks = [];// recorded video data
var options = { mimeType: "video/webm; codecs=vp9" };// Set the encoding format
    var mediaRecorder = new MediaRecorder(stream, options);// Initialize the MediaRecorder instance
    mediaRecorder.ondataavailable = handleDataAvailable;// Set the callback when data is available (end of screen recording)
    mediaRecorder.start();
    // Video Fragmentation
    function handleDataAvailable(event) {
        if (event.data.size > 0) {
            recordedChunks.push(event.data);// Add data, event.data is a BLOB object
            download();// Encapsulate into a BLOB object and download
        }
    }
// file download
    function download() {
        var blob = new Blob(recordedChunks, {
            type: "video/webm"
        });
        // Videos can be uploaded to the backend here
        var url = URL.createObjectURL(blob);
        var a = document.createElement("a");
        document.body.appendChild(a);
        a.style = "display: none";
        a.href = url;
        a.download = "test.webm";
        a.click();
        window.URL.revokeObjectURL(url);
    }
})

08、改變橫豎屏樣式

當你需要為橫豎屏設置不同的樣式時

<style>
@media all and (orientation : landscape) {
    body {
        background-color: #ff0000;
    }
}
@media all and (orientation : portrait) {
    body {
        background-color: #00ff00;
    }
}
</style>

09、標簽頁隱藏

當需要監聽tab顯示和隱藏事件時

const {hidden, visibilityChange} = (() => {
    let hidden, visibilityChange;
    if (typeof document.hidden !== "undefined") {
      // Opera 12.10 and Firefox 18 and later support
      hidden = "hidden";
      visibilityChange = "visibilitychange";
    } else if (typeof document.msHidden !== "undefined") {
      hidden = "msHidden";
      visibilityChange = "msvisibilitychange";
    } else if (typeof document.webkitHidden !== "undefined") {
      hidden = "webkitHidden";
      visibilityChange = "webkitvisibilitychange";
    }
    return {
      hidden,
      visibilityChange
    }
})();

const handleVisibilityChange = () => {
    console.log("currently hidden", document[hidden]);
};
document.addEventListener(
    visibilityChange,
    handleVisibilityChange,
    false
);

圖片

10、本地圖片預覽

當您從客戶端獲取圖片但無法立即上傳到服務器,但需要預覽時

<div class="test">
    <input type="file" name="" id="">
    <img src="" alt="">
</div>
<script>
const getObjectURL = (file) => {
    let url = null;
    if (window.createObjectURL != undefined) { // basic
        url = window.createObjectURL(file);
    } else if (window.URL != undefined) { // webkit or chrome
        url = window.URL.createObjectURL(file);
    } else if (window.URL != undefined) { // mozilla(firefox)
        url = window.URL.createObjectURL(file);
    }
    return url;
}
document.querySelector('input').addEventListener('change', (event) => {
    document.querySelector('img').src = getObjectURL(event.target.files[0])
})
</script>

11、圖片預加載

當圖片較多時,需要預加載圖片以避免白屏

const images = []
function preloader(args) {
    for (let i = 0, len = args.length; i < len; i++) {  
        images[i] = new Image()  
        images[i].src = args[i]
    } 
}  
preloader(['1.png', '2.jpg'])

JavaScript

12、字符串腳本

當需要將一串字符串轉換為JavaScript腳本時,該方法存在xss漏洞,請謹慎使用

const obj = eval('({ name: "jack" })')
// obj will be converted to object{ name: "jack" }
const v = eval('obj')
// v will become the variable obj

13、遞歸函數名解耦

當需要編寫遞歸函數時,聲明了函數名,但是每次修改函數名時,總是忘記修改內部函數名。argument是函數的內部對象,包括傳入函數的所有參數,arguments.callee代表函數名。

// This is a basic Fibonacci sequence
function fibonacci (n) {
    const fn = arguments.callee
    if (n <= 1) return 1
    return fn(n - 1) + fn(n - 2)
}

DOM 元素

14、隱性判斷

當需要判斷某個dom元素當前是否出現在頁面視圖中時,可以嘗試使用IntersectionObserver來判斷。

<style>
.item {
    height: 350px;
}
</style>

<div class="container">
  <div class="item" data-id="1">Invisible</div>
  <div class="item" data-id="2">Invisible</div>
  <div class="item" data-id="3">Invisible</div>
</div>
<script>
  if (window?.IntersectionObserver) {
    let items = [...document.getElementsByClassName("item")]; // parses as a true array, also available Array.prototype.slice.call()
let io = new IntersectionObserver(
      (entries) => {
        entries.forEach((item) => {
          item.target.innerHTML =
            item.intersectionRatio === 1 // The display ratio of the element, when it is 1, it is completely visible, and when it is 0, it is completely invisible
              ? `Element is fully visible`
              : `Element is partially invisible`;
        });
      },
      {
        root: null,
        rootMargin: "0px 0px",
        threshold: 1, // The threshold is set to 1, and the callback function is triggered only when the ratio reaches 1
      }
    );
    items.forEach((item) => io.observe(item));
  }
</script>

15、元素可編輯

當你需要編輯一個dom元素時,讓它像文本區域一樣點擊。

<div contenteditable="true">here can be edited</div>

16、元素屬性監控

<div id="test">test</div>
<button onclick="handleClick()">OK</button>

<script>
  const el = document.getElementById("test");
  let n = 1;
  const observe = new MutationObserver((mutations) => {
    console.log("attribute is changede", mutations);
  })
  observe.observe(el, {
    attributes: true
  });
  function handleClick() {
    el.setAttribute("style", "color: red");
    el.setAttribute("data-name", n++);
  }
  setTimeout(() => {
    observe.disconnect(); // stop watch
  }, 5000);
</script>

17、打印 dom 元素

當開發過程中需要打印dom元素時,使用console.log往往只能打印出整個dom元素,而無法查看dom元素的內部屬性。你可以嘗試使用 console.dir

console.dir(document.body)

其他

18、激活應用程序

當你在移動端開發時,你需要打開其他應用程序。還可以通過location.href賦值來操作以下方法

<a href="tel:12345678910">phone</a>
<a href="sms:12345678910,12345678911?body=hello">android message</a> 
<a href="sms:/open?addresses=12345678910,12345678911&body=hello">ios message</a>
<a href="wx://">ios message</a>

總結

以上就是我今天想與你分享的全部內容,希望對你有所幫助,最后,感謝你的閱讀,祝編程愉快!

責任編輯:華軒 來源: web前端開發
相關推薦

2023-05-29 16:09:22

JavaScript技能瀏覽器

2022-08-23 08:00:00

高級工程師軟件工程師代碼庫

2020-12-18 11:55:27

編程面試

2025-11-05 02:00:11

2015-05-11 09:38:42

.NET高級工程師面試題

2018-09-20 10:55:38

數據庫順豐高級工程師

2019-09-20 21:30:32

前端工程師JavaScript

2010-12-24 10:47:48

網絡規劃設計師

2011-01-04 11:48:04

系統分析師

2010-12-24 10:50:43

系統架構設計師

2012-04-23 09:21:11

NetflixAmazonQCon

2010-12-29 11:15:51

信息系統項目管理師

2020-12-07 08:01:59

JavaScript入門技巧

2009-04-16 09:47:29

2019-12-20 14:32:55

JavaScript函數開發

2020-12-23 08:03:01

JavaScript開發代碼

2018-09-21 16:30:55

2015-08-14 09:45:10

Webnode.jsH5

2023-12-27 14:12:40

JavaScrip技巧
點贊
收藏

51CTO技術棧公眾號

欧美精品a∨在线观看不卡| 乌克兰美女av| 天堂av在线免费| 一区二区三区导航| 在线观看视频99| 无码人妻少妇色欲av一区二区| 国产传媒av在线| 国产精品系列在线| 国产精品视频一区二区三区经| 亚洲精品中文字幕乱码三区91| 久久理论电影| 亚洲成人久久网| 国产成人精品无码播放| 中文字幕中文字幕在线中高清免费版| 99久久精品国产一区| 国产精品99免视看9| 免费视频网站www| 红桃成人av在线播放| 日韩欧美高清一区| 国产精品久久久久9999小说| 色呦呦在线看| 中文字幕亚洲综合久久菠萝蜜| 国产视频一区二区三区四区| 国产精品高潮呻吟AV无码| 在线综合视频| 欧美黄色成人网| 国内毛片毛片毛片毛片毛片| 国产精品欧美三级在线观看| 亚洲成人精品视频在线观看| 四川一级毛毛片| 欧美视频第一| 欧美在线观看一二区| 大肉大捧一进一出好爽视频| av在线免费网址| 国产精品久久网站| 日韩欧美激情一区二区| 日韩欧美亚洲系列| av爱爱亚洲一区| 亚洲一区中文字幕在线观看| 在线播放成人av| 久久久精品网| 欧美在线视频一区| 久久久久久久久久久久久av| 欧美日韩亚洲一区三区| xxx一区二区| 久久久国产一级片| 成人av国产| 伊人一区二区三区久久精品| aaaaa级少妇高潮大片免费看| 精品国内亚洲2022精品成人| 精品国产乱码久久久久久1区2区| 日韩av加勒比| 高清一区二区| 欧美一区二区久久| 性一交一黄一片| julia中文字幕一区二区99在线| 日韩一二三区视频| 久久av一区二区三| 澳门久久精品| 国产视频精品va久久久久久| 国产全是老熟女太爽了| 国产成人av| 丝袜情趣国产精品| 希岛爱理中文字幕| 欧美午夜视频| 97超碰蝌蚪网人人做人人爽| 一级黄色免费网站| 老妇喷水一区二区三区| 国产久一一精品| 国产精品无码专区av免费播放| 国产精品自产自拍| 国产女人水真多18毛片18精品| 手机在线不卡av| 国产亚洲精品aa| 国产日韩视频在线播放| 久草在线资源站资源站| 日韩欧美aaa| www.亚洲高清| 欧美a级大片在线| 亚洲经典中文字幕| 国产成人一区二区在线观看| 亚洲成av人片乱码色午夜| 色综合久久悠悠| 国产无人区码熟妇毛片多| 青椒成人免费视频| 成人三级在线| 青青色在线视频| 成人免费在线播放视频| 无码中文字幕色专区| 国产电影一区二区三区爱妃记| 91精品国产91久久综合桃花| 欧洲一级黄色片| 爽成人777777婷婷| 97精品在线观看| 亚洲一区二区人妻| 成人av中文字幕| 亚洲精品日韩精品| 超碰在线cao| 欧美日韩精品专区| 亚洲永久无码7777kkk| 91久久久精品国产| 日本一区二区三区在线播放| 国产乱叫456在线| 久久久国产精品不卡| 中文字幕日韩一区二区三区不卡| 女厕盗摄一区二区三区| 6080亚洲精品一区二区| 色欲av无码一区二区三区| 欧美在线亚洲综合一区| 天天亚洲美女在线视频| 亚洲爱爱爱爱爱| 3d动漫精品啪啪一区二区下载| 国产精品国产一区| 欧美性视频精品| 精品国产亚洲av麻豆| 中文字幕精品一区二区精品绿巨人| www.xxx麻豆| 亚洲欧美专区| 亚洲三级av在线| 国产精品第一页在线观看| 九九热在线视频观看这里只有精品| 久久久精品国产一区二区三区| caopeng在线| 欧美撒尿777hd撒尿| 大黑人交xxx极品hd| 欧美午夜不卡| 91精品视频一区| aaa在线免费观看| 色偷偷成人一区二区三区91 | 久久精品丝袜高跟鞋| 老司机福利在线视频| 在线观看不卡视频| 中文字幕av网址| 亚洲高清毛片| 粉嫩av四季av绯色av第一区| 黄网页在线观看| 欧美喷水一区二区| 在线观看免费黄色网址| 久久精品xxxxx| 在线日本成人| 国产精品久久久久久久久| 四虎影视精品成人| 狠狠躁夜夜躁久久躁别揉| 国产亚洲精品成人a| 欧美在线免费| 春色成人在线视频| 欧美理论片在线播放| 日韩视频永久免费| 免费一级全黄少妇性色生活片| 国产在线精品一区在线观看麻豆| 亚洲砖区区免费| 国产精品久久久久久久久久辛辛| 日韩综合视频在线观看| 国产又粗又猛又爽又黄91| 中文字幕乱码一区二区免费| 牛夜精品久久久久久久| 久久婷婷蜜乳一本欲蜜臀| 国产精品爽爽ⅴa在线观看| 成人午夜在线观看视频| 欧美日韩国产bt| 国产大片免费看| 国产精品亚洲视频| 精品人妻少妇一区二区| 精品在线网站观看| 日韩免费视频在线观看| 成人jjav| 欧美一级片在线看| 国产精品第二十页| 久久精品视频在线免费观看| caoporn超碰97| 888久久久| 国产一区二区无遮挡| 成人片免费看| 久久久精品美女| 欧美一级免费片| 色哟哟一区二区| 婷婷伊人五月天| heyzo一本久久综合| 嫩草av久久伊人妇女超级a| 欧美电影免费播放| 成人免费在线看片| 亚洲伦乱视频| 欧美日韩爱爱视频| 日韩三级电影网| 91精品国产综合久久久久久久| 久久无码精品丰满人妻| 国产调教视频一区| 99久久综合网| 日韩不卡一二三区| 中文精品无码中文字幕无码专区| 一区二区小说| 91色视频在线观看| 成人影院大全| 欧美激情在线观看| 99精品老司机免费视频| 亚洲精品在线观看视频| 中文字幕 人妻熟女| 玉足女爽爽91| 日韩精品电影一区二区三区| 成人污污视频在线观看| 天天色综合天天色| 国产欧美91| 蜜桃视频成人在线观看| 精品一区免费| 国产伦精品一区二区| 久久精品超碰| 日本aⅴ大伊香蕉精品视频| 中文字幕在线三区| 一本色道久久88综合亚洲精品ⅰ| 人妻无码一区二区三区久久99| 欧美日韩国产另类不卡| 波多野结衣一区二区在线| 亚洲国产精品一区二区尤物区| 青青操在线播放| 久久综合九色综合97_久久久| 午夜免费视频网站| 蜜桃精品在线观看| 成人免费观看视频在线观看| 欧美日韩国产色综合一二三四| 午夜一区二区三区| 欧美人与动xxxxz0oz| 亚洲影院色在线观看免费| 精品欧美日韩精品| 欧美在线视频免费| 免费在线看污片| 九九精品在线播放| 国产区在线观看| 日韩一中文字幕| 99视频在线观看地址| 周于希免费高清在线观看 | 色欲久久久天天天综合网 | 亚洲一级片av| 热久久一区二区| 成人在线观看黄| 亚洲毛片视频| 国产毛片视频网站| 黄色成人av网站| 日日噜噜夜夜狠狠久久丁香五月| 成人区精品一区二区婷婷| 欧美一区二区三区精美影视| 久久porn| 精品中文字幕人| 香蕉久久精品日日躁夜夜躁| 国产综合色一区二区三区| 亚洲网一区二区三区| 亚洲影视九九影院在线观看| 国产一区二区在线观| 亚洲自拍欧美色图| 欧美影院视频| 超碰国产精品久久国产精品99| 成人黄色理论片| 97人人澡人人爽| 伊人久久影院| 精品欧美国产| 亚洲性视频大全| 日韩精品伦理第一区| 成人免费在线观看av| 一区二区三区四区不卡| 婷婷伊人综合| 久久亚洲a v| 一本久道久久综合狠狠爱| 国产美女网站在线观看| 激情五月色婷婷| 久久蜜臀精品av| 欧美做受xxxxxⅹ性视频| 国产精品嫩草99a| 亚洲色婷婷一区二区三区| 亚洲高清在线视频| 三级视频在线观看| 欧美日韩国产综合视频在线观看| 国产乱人乱偷精品视频| 欧美成人欧美edvon| 深夜福利在线视频| 最近中文字幕2019免费| 中文字幕在线观看播放| 欧美中文字幕第一页| 国产成人精品一区二区三区视频| 亚洲自拍偷拍福利| 日韩高清影视在线观看| 天天综合狠狠精品| 国产一区美女| 中文字幕无码不卡免费视频| 久久精品国产一区二区| 无码av免费精品一区二区三区| 91在线精品秘密一区二区| 任我爽在线视频| 亚洲午夜一区二区| 国产精品午夜一区二区| 日韩无一区二区| 久久久久久女乱国产| 久久久国产成人精品| 毛片电影在线| 成人夜晚看av| 日韩电影不卡一区| 午夜探花在线观看| 免费精品视频| 在线观看欧美一区二区| 日本一区二区三区久久久久久久久不 | wwwwww.欧美系列| 91香蕉视频在线播放| 日韩欧美精品免费在线| 精品国产一级片| 国产一区二区三区视频免费| 日韩伦理av| 国产欧美 在线欧美| 日韩在线你懂的| 国产成人亚洲综合无码| 美女脱光内衣内裤视频久久影院| 日本天堂在线播放| 亚洲欧洲精品一区二区三区不卡| 成人免费a视频| 欧美r级在线观看| 五月天婷婷在线视频| 日本三级韩国三级久久| 久久99精品国产自在现线| 日本精品福利视频| 美女任你摸久久 | 亚洲精品成人区在线观看| 色av吧综合网| 香蕉视频亚洲一级| 久久99导航| 亚洲国内自拍| 韩国黄色一级片| 亚洲欧美日韩国产另类专区| 中文在线观看av| 亚洲深夜福利视频| 午夜伦理福利在线| 久久免费视频1| 亚洲私人影院| 特级特黄刘亦菲aaa级| 亚洲精品美腿丝袜| а√天堂资源在线| 久久精品视频网站| 日日夜夜综合| 亚洲一区二区在| 狠狠色丁香婷婷综合| 999久久久国产| 欧美日本一区二区三区四区| www.黄在线观看| 国产极品精品在线观看| 自拍视频一区| 日韩精品一区中文字幕| 国产欧美一区二区精品婷婷| av毛片在线免费观看| 亚洲欧洲xxxx| 成人av色网站| 在线看成人av电影| 国产一区不卡在线| 91嫩草|国产丨精品入口| 正在播放亚洲一区| 丝袜美女在线观看| 国产精品乱码视频| 另类天堂av| 人妻精品久久久久中文| 欧美日韩国产免费| 国产在线激情| 国产精品手机在线| 午夜在线一区| 欧美激情视频二区| 欧美麻豆精品久久久久久| a黄色片在线观看| 国产精品一区二区a| 国产美女诱惑一区二区| 免费在线观看a视频| 欧美放荡的少妇| 怡红院av在线| 蜜桃臀一区二区三区| 免费美女久久99| 激情小说中文字幕| 亚洲精品在线观看www| 亚洲精品555| 久久av高潮av| 久久―日本道色综合久久| 久久久久久av无码免费看大片| 久久综合亚洲社区| 鲁大师精品99久久久| www.日本xxxx| 亚洲午夜在线电影| 福利片在线看| 成人三级视频在线观看一区二区| 亚洲专区欧美专区| 亚洲波多野结衣| 日韩av在线免费播放| 日韩有码欧美| 国产精品333| 亚洲免费三区一区二区| 污污的视频网站在线观看| 国产精品午夜国产小视频| 国产精品成人一区二区网站软件| 丰满少妇在线观看资源站| 7777精品伊人久久久大香线蕉的 | 国产在线麻豆精品观看| 黄色片网站在线免费观看| 久久精品国产亚洲精品| 亚洲自拍电影| 一级黄色大片免费看| 欧美优质美女网站| heyzo高清中文字幕在线| 一区二区精品国产| 久久综合99re88久久爱|