精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲三级黄色在线观看| 欧美性xxxx极品hd欧美风情| 91精品天堂| 日韩欧美激情视频| 久久99影视| 91精品午夜视频| 久久国产精品网| 经典三级在线| 国产呦精品一区二区三区网站| 欧美丰满少妇xxxx| 一卡二卡三卡四卡| 久久久久久久久久久久电影| 午夜欧美大尺度福利影院在线看| 日韩欧美电影一区二区| www三级免费| 美女诱惑黄网站一区| 超碰日本道色综合久久综合| 亚洲欧美日韩色| 另类中文字幕国产精品| 夜色激情一区二区| 亚洲一区二区三区加勒比 | 欧美日韩蜜桃| 一区二区三欧美| 在线观看一区二区三区四区| 97成人超碰| 精品久久久视频| 久久av秘一区二区三区| 手机福利小视频在线播放| 国内一区二区视频| 国产精品久久久久久久久久久久久 | 国产精品亚洲综合在线观看 | 国产原创popny丨九色| 免费黄色网址在线观看| 国产亚洲欧美中文| 国产一区在线免费观看| www.av导航| 久久99精品国产.久久久久久| 91超碰中文字幕久久精品| 国产av 一区二区三区| 欧美军人男男激情gay| 亚洲精品福利视频| 国产免费a级片| 国产专区精品| 在线不卡免费欧美| 91国产精品视频在线观看| 涩涩涩在线视频| 亚洲一区二区综合| 国产一级片91| 超碰电影在线播放| 1024亚洲合集| 亚洲日本欧美在线| 视频一区二区三区不卡| 中文字幕乱码久久午夜不卡| 清纯唯美一区二区三区| 秋霞av在线| 91麻豆.com| 久久久久久久久四区三区| 欧美视频一二区| 成人免费视频视频在线观看免费| 7777奇米亚洲综合久久| 国产成年妇视频| 国产一区二区在线观看视频| 91在线观看免费| 99er热精品视频| 国产成人综合网| 国产成人一区二区三区免费看| 精品二区在线观看| 成人教育av在线| 国产伦精品一区| 亚洲三区在线播放| 91啦中文在线观看| 日本不卡在线播放| 日本在线视频网| 亚洲精品乱码久久久久久黑人| 91嫩草国产丨精品入口麻豆| 黑人精品视频| 疯狂欧美牲乱大交777| 欧美一级在线看| 三上悠亚一区二区| 欧美三区免费完整视频在线观看| 黄色一级片免费的| 91在线一区| 日韩精品免费视频| av在线播放中文字幕| 一区二区国产在线| 97香蕉久久超级碰碰高清版| 在线免费一区二区| 国产一区二区三区四| 含羞草久久爱69一区| 国产视频二区在线观看| 中文字幕视频一区二区三区久| 91看片淫黄大片91| 美女av在线免费看| 欧美日韩三级在线| 一级少妇精品久久久久久久| 欧美亚洲激情| 久久久久免费精品国产| 亚洲男人天堂网址| 国产91丝袜在线18| 日韩精品一区二区三区外面| 影音先锋中文在线视频| 欧美最猛黑人xxxxx猛交| 在线观看免费看片| 国内亚洲精品| 欧美激情视频一区| 这里只有久久精品视频| 国产91精品在线观看| 视频二区一区| 98色花堂精品视频在线观看| 欧美日韩在线不卡| 30一40一50老女人毛片| 欧美成人精品| 国产日韩专区在线| 色综合888| 亚洲自拍偷拍九九九| 亚洲综合日韩欧美| 自拍偷拍欧美一区| 久久久天堂国产精品女人| 在线免费a视频| 精品国产中文字幕第一页| 国产不卡的av| 欧洲精品久久久久毛片完整版| 日韩一区二区三区三四区视频在线观看| 男女无套免费视频网站动漫| 粉嫩精品导航导航| 日韩在线观看免费网站 | 一区二区成人精品| 69av.com| 精品亚洲成a人| 免费日韩av电影| 中文字幕在线播放网址| 91传媒视频在线播放| 色诱av手机版| 日韩在线观看| 欧美日本亚洲视频| 国产精品视频无码| 国产欧美日本一区二区三区| 搞av.com| 精品国产亚洲一区二区三区大结局| 亚洲美女性生活视频| 免费一级肉体全黄毛片| 国产一区啦啦啦在线观看| 少妇免费毛片久久久久久久久 | 青青草精品毛片| 亚洲风情第一页| 一区二区三区在线免费| 男人的天堂最新网址| 国产91久久精品一区二区| 久久免费精品日本久久中文字幕| 国产精品自偷自拍| 国产精品乱子久久久久| 亚洲欧美另类动漫| 欧美日韩xxxx| 2019最新中文字幕| 日日夜夜精品免费| 洋洋av久久久久久久一区| 女人高潮一级片| 色综合色综合| 国产精品老牛影院在线观看 | 亚洲国产古装精品网站| 欧美黄色免费在线观看| 久久69国产一区二区蜜臀| 一区二区精品国产| 成人1区2区| 中文国产成人精品久久一| 日韩精品在线一区二区三区| 久久精品一区八戒影视| 久久精品一区二| 国产欧美一区| 国产精品视频一区二区三区四| 国产青青草在线| 欧美中文字幕一区二区三区亚洲| 亚洲欧洲久久久| 日韩精品电影在线| 欧美一二三区| 久久xxx视频| 啊v视频在线一区二区三区 | 玖玖在线精品| 鲁丝一区鲁丝二区鲁丝三区| 高清不卡av| 国产丝袜视频一区| 中文字幕一区二区人妻| 国产精品久久久99| 午夜免费视频网站| 国产精品va| 精品国产一区二区三区麻豆小说 | 农民人伦一区二区三区| 欧美久久香蕉| 国产福利精品在线| 99久久精品免费观看国产| 日韩精品一区二区三区视频在线观看| 国产亚洲精品码| 久久综合久久鬼色中文字| 黄色高清无遮挡| 91精品国产91久久久久久密臀| 国产手机精品在线| 少妇一区视频| 久久精品免费电影| 色哟哟国产精品色哟哟| 在线观看一区日韩| 国产真实夫妇交换视频| 久久久国际精品| 视频区 图片区 小说区| 99精品国产一区二区青青牛奶 | 日本黄色的视频| 国产综合自拍| 日韩videos| 亚洲精品国产九九九| 国产精品444| 在线xxxx| 中文字幕精品av| 狠狠综合久久av一区二区| 色婷婷激情久久| 中文字幕在线观看二区| 91小视频在线免费看| 尤物国产在线观看| 99精品欧美| 伊人久久大香线蕉av一区| 欧美日韩看看2015永久免费 | 青草影院在线观看| 国产亚洲综合色| 成人做爰69片免费| 日本不卡视频一二三区| 亚洲 欧美 综合 另类 中字| 日韩精品一区二区久久| 六月婷婷久久| 久久国产精品免费精品3p| 91久久国产精品91久久性色| 久久青草伊人| 欧美区二区三区| 成人高清免费观看mv| 欧美变态tickle挠乳网站| 懂色av蜜臀av粉嫩av喷吹| 亚洲成人激情av| 欧美色图一区二区| 中文字幕免费一区| 玖玖爱在线观看| 91亚洲精品久久久蜜桃| 特黄特色免费视频| 激情av综合网| 天天干在线影院| 久久亚洲视频| 久久精品午夜福利| 一本久道久久综合婷婷鲸鱼| 国产女主播av| 99久久99热这里只有精品| 日韩精彩视频| 欧美亚洲在线日韩| 欧美日韩在线高清| 日韩影视在线观看| 国产麻豆乱码精品一区二区三区 | 成人亚洲性情网站www在线观看| 日韩欧美国产午夜精品| 国产精品一区二区av白丝下载| 欧美性受xxxx黑人xyx性爽| 天堂在线免费观看视频| 天天综合日日夜夜精品| 91aaa在线观看| 亚洲妇女屁股眼交7| 成人免费视频网站入口::| 日韩美女久久久| 永久免费看片视频教学| 中文字幕中文字幕一区| 成年人一级黄色片| 亚洲欧美一区二区三区孕妇| 多男操一女视频| 亚洲欧洲性图库| 极品美妇后花庭翘臀娇吟小说| 亚洲美女免费视频| 久久精品一区二区三| 洋洋av久久久久久久一区| 精品少妇久久久久久888优播| 一区二区三区四区国产精品| 久久久久久久久久久久国产| 亚洲国产精品人人做人人爽| 日韩av男人天堂| 欧美小视频在线| 亚洲图片欧美在线| 欧美一区二区三区四区五区| www.xxx国产| 亚洲国产私拍精品国模在线观看| 天堂网在线观看视频| 亚洲社区在线观看| 在线激情免费视频| 欧美精品在线免费播放| 丁香花在线影院| 91av国产在线| 天天综合91| 国产福利久久精品| 伊人久久大香线蕉综合网蜜芽| 欧美在线日韩精品| 久久99高清| 国产精品国三级国产av| 亚洲色成人www永久网站| 亚洲国产网站| 免费在线激情视频| 日韩电影在线一区二区三区| 男女视频在线观看网站| 成人国产精品视频| 久久国产柳州莫菁门| 亚洲卡通欧美制服中文| 在线观看污污网站| 56国语精品自产拍在线观看| 欧美 日韩 国产 精品| 国产一区二区三区免费视频| 免费av在线播放| 97av视频在线| 成人短视频软件网站大全app| 国产精品手机视频| 成人羞羞网站| 国产精品久久久久9999爆乳| 老司机精品视频网站| 俄罗斯黄色录像| 中文字幕的久久| 久久精品女人毛片国产| 欧美日韩极品在线观看一区| 亚洲av成人精品日韩在线播放| 日韩有码在线播放| 天堂av在线网| 91精品视频专区| 婷婷精品在线| 农民人伦一区二区三区| 久久99久久精品| 亚洲国产无码精品| 一区二区三区.www| 国产精品久久久国产盗摄| 亚洲激情视频在线播放| 久操视频在线播放| 日本高清视频一区| 欧美欧美在线| 亚洲精品日韩在线观看| 亚洲免费综合| 污污免费在线观看| 国产精品视频免费| 老熟妇仑乱一区二区av| 日韩精品一区二区三区四区视频| 免费一级片在线观看| 欧美啪啪一区| 中日韩av在线播放| 久久新电视剧免费观看| 国产亚洲精品女人久久久久久| 在线看国产一区| 久久免费看视频| 性色av一区二区三区红粉影视| 精品一区二区三区中文字幕视频 | 国产一级在线免费观看| 欧美一级艳片视频免费观看| 啊v在线视频| 日韩av高清不卡| 日韩av黄色在线| 精品国产一区三区| 国产精品一区二区你懂的| 久久免费手机视频| 在线亚洲欧美专区二区| wwwww在线观看免费视频| 国产成人精品视频在线| 亚洲图区在线| 一本色道无码道dvd在线观看| 国产午夜亚洲精品理论片色戒| 在线天堂中文字幕| 亚洲精选在线观看| 亚洲最大网站| 精品亚洲欧美日韩| 国产精品亚洲欧美| av网在线播放| 欧美性做爰猛烈叫床潮| 日韩大片在线永久免费观看网站| 国产精品一区二区久久久久| 亚洲老妇激情| 91大神免费观看| 亚洲国产视频一区二区| 成人毛片在线精品国产| 2019av中文字幕| 自拍亚洲一区| 亚洲少妇久久久| 国产视频一区在线播放| 国产精品欧美久久久久天天影视| 久久综合伊人77777蜜臀| 亚洲综合色婷婷在线观看| 99久久免费观看| 久久亚洲免费视频| 波多野结衣一区二区三区在线| 中文字幕久久亚洲| 欧美aaaaaa| 日韩av新片网| 91麻豆免费观看| 中文字幕一区二区三区人妻四季| 欧美成人一区在线| 黑人久久a级毛片免费观看| www黄色日本| 欧美激情一区二区三区在线| 性一交一乱一色一视频麻豆| 韩国v欧美v日本v亚洲| 国产精品一区二区av交换| 色播五月综合网| 亚洲国产精品天堂| 国产高清av在线| 91日韩在线播放| 性色一区二区| 亚洲少妇xxx|