成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

前端不為人知的一面:前端冷知識集錦

開發 前端
今天看到Quora上一個帖子,瞬間又GET了好多前端技能,一些屬于技巧,一些則是聞所未聞的冷知識,一時間還消化不過來。現分類整理出來分享給大家,也補充了一些平時的積累和擴展了一些內容。

前端已經被玩兒壞了!像console.log()可以向控制臺輸出圖片等炫酷的玩意已經不是什么新聞了,像用||操作符給變量賦默認值也是人盡皆知的舊聞了,今天看到Quora上一個帖子,瞬間又GET了好多前端技能,一些屬于技巧,一些則是聞所未聞的冷知識,一時間還消化不過來。現分類整理出來分享給大家,也補充了一些平時的積累和擴展了一些內容。

HTML篇

瀏覽器地址欄運行JavaScript代碼

這個很多人應該還是知道的,在瀏覽器地址欄可以直接運行JavaScript代碼,做法是以javascript:開頭后跟要執行的語句。比如:

  1. javascript:alert('hello from address bar :)'); 

將以上代碼貼到瀏覽器地址欄回車后alert正常執行,一個彈窗神現。

需要注意的是如果是通過copy paste代碼到瀏覽器地址欄的話,IE及Chrome會自動去掉代碼開頭的javascript:,所以需要手動添加起來才能正確執行,而Firefox中雖然不會自動去掉,但它根本就不支持在地址欄運行JS代碼,sigh~

這一技術在我的另一篇博文《讓Chrome 接管郵件連接,收發郵件更方便了》中有使用到,利用在瀏覽器地址欄中執行JavaScript代碼將Gmail設置為系統的郵件接管程序。

瀏覽器地址欄運行HTML代碼

如果說上面那條小秘密知道的人還算多的話,這條秘笈知道的人就要少一些了,在非IE內核的瀏覽器地址欄可以直接運行HTML代碼!

比如在地址欄輸入以下代碼然后回車運行,會出現指定的頁面內容。

  1. data:text/html,<h1>Hello, world!</h1> 

[[111401]]

你造么,可以把瀏覽器當編輯器

還是瀏覽器地址欄上做文章,將以下代碼貼到地址欄運行后瀏覽器變成了一個原始而簡單的編輯器,與Windows自帶的notepad一樣,吼吼。

  1. data:text/html, <html contenteditable> 

歸根結底多虧了HTML5中新加的contenteditable屬性,當元素指定了該屬性后,元素的內容成為可編輯狀態。

推而廣之,將以下代碼放到console執行后,整個頁面將變得可編輯,隨意踐踏吧~

  1. document.body.contentEditable='true';  

利用a標簽自動解析URL

很多時候我們有從一個URL中提取域名,查詢關鍵字,變量參數值等的需要,而萬萬沒想到可以讓瀏覽器方便地幫我們完成這一任務而不用我們寫正則去抓取。方法就在JS代碼里先創建一個a標簽然后將需要解析的URL賦值給ahref屬性,然后就得到了一切我們想要的了。

  1. var a = document.createElement('a');  
  2.  a.href = 'http://www.cnblogs.com/wayou/p/';  
  3.  console.log(a.host);  

利用這一原理,稍微擴展一下,就得到了一個更加健壯的解析URL各部分的通用方法了。下面代碼來自James的博客

  1. function parseURL(url) {  
  2.     var a =  document.createElement('a');  
  3.     a.href = url;  
  4.     return {  
  5.         source: url,  
  6.         protocol: a.protocol.replace(':',''),  
  7.         host: a.hostname,  
  8.         port: a.port,  
  9.         query: a.search,  
  10.         params: (function(){  
  11.             var ret = {},  
  12.                 seg = a.search.replace(/^\?/,'').split('&'),  
  13.                 len = seg.length, i = 0, s;  
  14.             for (;i<len;i++) {  
  15.                 if (!seg[i]) { continue; }  
  16.                 s = seg[i].split('=');  
  17.                 ret[s[0]] = s[1];  
  18.             }  
  19.             return ret;  
  20.         })(),  
  21.         file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],  
  22.         hash: a.hash.replace('#',''),  
  23.         path: a.pathname.replace(/^([^\/])/,'/$1'),  
  24.         relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [,''])[1],  
  25.         segments: a.pathname.replace(/^\//,'').split('/')  
  26.     };  
  27. }  

頁面擁有ID的元素會創建全局變量

在一張HTML頁面中,所有設置了ID屬性的元素會在JavaScript的執行環境中創建對應的全局變量,這意味著document.getElementByID像人的闌尾一樣顯得多余了。但實際項目中最好老老實實該怎么寫就怎么寫,畢竟常規代碼出亂子的機會要小得多。

  1. <div id="sample"></div> 
  2. <script type="text/javascript"> 
  3.         console.log(sample);  
  4. </script> 

[[111402]]

加載CDN文件時,可以省掉HTTP標識

現在很流行的CDN即從專門的服務器加載一些通用的JS和CSS文件,出于安全考慮有的CDN服務器使用HTTPS方式連接,而有的是傳統的HTTP,其實我們在使用時可以忽略掉這個,將它從URL中省去。

  1. <script src="//domain.com/path/to/script.js"></script> 

這一點在之前一篇譯文博客《jQuery編程最佳實踐》中也有提到。

利用script標簽保存任意信息

將script標簽設置為type='text'然后可以在里面保存任意信息,之后可以在JavaScript代碼中很方便地獲取。

  1. <script type="text" id="template"> 
  2.     <h1>This won't display</h1> 
  3. </script> 
  1. var text = document.getElementById('template').innerHTML 

CSS篇

關于CSS的惡作劇

相信你看完以下代碼后能夠預料到會出現什么效果。

  1. *{  
  2.     cursornone!important;  
  3. }  

[[111403]]

簡單的文字模糊效果

以下兩行簡單的CSS3代碼可達到將文字模糊化處理的目的,出來的效果有點像使用PS的濾鏡,so cool!

  1. p {  
  2.     colortransparent;  
  3.     text-shadow#111 0 0 5px;  

垂直居中

有好多次博主都有這樣的需求,垂直居中顯示某個DIV,我們知道CSS中天然有水平居中的樣式text-align:center。唯獨這個垂直居中無解。

當然你可以將容器設置為display:table,然后將子元素也就是要垂直居中顯示的元素設置為display:table-cell,然后加上vertical-align:middle來實現,但此種實現往往會因為display:table而破壞整體布局,那還不如直接用table標簽了呢。

下面這個樣式利用了translate來巧妙實現了垂直居中樣式,需IE9+。

  1. .center-vertical {  
  2.     positionrelative;  
  3.     top: 50%;  
  4.     transform: translateY(-50%);  

相比而言,水平居中要簡單得多,像上面提到的text-align:center,經常用到的技巧還有margin:0 auto。但對于margin大法也只在子元素寬度小于容器寬度時管用,當子元素寬度大于容器寬度時此法失效。

如法炮制,利用left和transform同樣可實現水平居中,不過意義不大,畢竟text-align和margin差不多滿足需求了。

  1. .center-horizontal {  
  2.     positionrelative;  
  3.     left: 50%;  
  4.     transform: translateX(-50%);   
  5. }  

多重邊框

利用重復指定box-shadow來達到多個邊框的效果

在線演示

  1. /*CSS Border with Box-Shadow Example*/ 
  2. div {  
  3.     box-shadow: 0 0 0 6px rgba(0000.2), 0 0 0 12px rgba(0000.2), 0 0 0 18px rgba(0000.2), 0 0 0 24px rgba(0000.2);  
  4.     height200px;  
  5.     margin50px auto;  
  6.     width400px 
  7. }  

 

[[111404]]

實時編輯CSS

通過設置style標簽的display:block樣式可以讓頁面的style標簽顯示出來,并且加上contentEditable屬性后可以讓樣式成為可編輯狀態,更改后的樣式效果也是實時更新呈現的。此技巧在IE下無效。擁有此技能者,逆天也!

  1. <!DOCTYPE html> 
  2. <html> 
  3.     <body> 
  4.         <style style="display:block" contentEditable> 
  5.             body { color: blue }  
  6.         </style> 
  7.     </body> 
  8. </html> 

創建長寬比固定的元素

通過設置父級窗口的padding-bottom可以達到讓容器保持一定的長度比的目的,這在響應式頁面設計中比較有用,能夠保持元素不變形。

  1. <div style="width: 100%; position: relative; padding-bottom: 20%;"> 
  2.     <div style="position: absolute; left: 0; top: 0; right: 0; bottom: 0;background-color:yellow;"> 
  3.         this content will have a constant aspect ratio that varies based on the width.  
  4.     </div> 
  5. </div> 

 

CSS中也可以做簡單運算

通過CSS中的calc方法可以進行一些簡單的運算,從而達到動態指定元素樣式的目的。

  1. .container{  
  2.     background-position: calc(100% - 50px) calc(100% - 20px);  
  3. }  

#p#

JavaScript篇

生成隨機字符串

利用Math.randomtoString生成隨機字符串,來自前一陣子看到的一篇博文。這里的技巧是利用了toString方法可以接收一個基數作為參數的原理,這個基數從2到36封頂。如果不指定,默認基數是10進制。略屌! 

  1. function generateRandomAlphaNum(len) {  
  2.     var rdmString = "";  
  3.     for (; rdmString.length < len; rdmString += Math.random().toString(36).substr(2));  
  4.     return rdmString.substr(0, len);  

整數的操作

JavaScript中是沒有整型概念的,但利用好位操作符可以輕松處理,同時獲得效率上的提升。

|0~~是很好的一個例子,使用這兩者可以將浮點轉成整型且效率方面要比同類的parseInt,Math.round 要快。在處理像素及動畫位移等效果的時候會很有用。性能比較見此

  1. var foo = (12.4 / 4.13) | 0;//結果為3  
  2. var bar = ~~(12.4 / 4.13);//結果為3 

順便說句,!!將一個值方便快速轉化為布爾值 !!window===true

重寫原生瀏覽器方法以實現新功能

下載的代碼通過重寫瀏覽器的alert讓它可以記錄彈窗的次數。

  1. (function() {  
  2.     var oldAlert = window.alert,  
  3.         count = 0;  
  4.     window.alert = function(a) {  
  5.         count++;  
  6.         oldAlert(a + "\n You've called alert " + count + " times now. Stop, it's evil!");  
  7.     };  
  8. })();  
  9. alert("Hello World"); 

關于console的惡作劇

關于重寫原生方法,這里有個惡作劇大家可以拿去尋開心。Chrome的console.log是支持對文字添加樣式的,甚至log圖片都可以。于是可以重寫掉默認的log方法,把將要log的文字應用到CSS的模糊效果,這樣當有人試圖調用console.log()的時候,出來的是模糊不清的文字。好冷,我表示沒有笑。

是從這篇G+帖子的評論里看到的。使用之后的效果是再次調用log會輸出字跡模糊不清的文字。

  1. var _log = console.log;  
  2. console.log = function() {  
  3.   _log.call(console, '%c' + [].slice.call(arguments).join(' '), 'color:transparent;text-shadow:0 0 2px rgba(0,0,0,.5);');  
  4. };  

不聲明第三個變量的值交換

我們都知道交換兩個變量值的常規做法,那就是聲明一個中間變量來暫存。但鮮有人去挑戰不聲明中間變量的情況,下面的代碼給出了這種實現。蠻有創意 的。

  1. var a=1,b=2;a=[b,b=a][0]; 

萬物皆對象

在JavaScript的世界,萬物皆對象。除了nullundefined,其他基本類型數字,字符串和布爾值都有對應有包裝對象。對象的一個特征是你可以在它身上直接調用方法。對于數字基本類型,當試圖在其身上調用toString方法會失敗,但用括號括起來后再調用就不會失敗了,內部實現是用相應的包裝對象將基本類型轉為對象。所以(1).toString()相當于new Number(1).toString()。因此,你的確可以把基本類型數字,字符串,布爾等當對象使用的,只是注意語法要得體。

同時我們注意到,JavaScript中數字是不分浮點和整形的,所有數字其實均是浮點類型,只是把小數點省略了而以,比如你看到的1可以寫成1.,這也就是為什么當你試圖1.toString()時會報錯,所以正確的寫法應該是這樣:1..toString(),或者如上面所述加上括號,這里括號的作用是糾正JS解析器,不要把1后面的點當成小數點。內部實現如上面所述,是將1.用包裝對象轉成對象再調用方法。

If語句的變形

當你需要寫一個if語句的時候,不妨嘗試另一種更簡便的方法,用JavaScript中的邏輯操作符來代替。

  1. var day=(new Date).getDay()===0;  
  2. //傳統if語句  
  3. if (day) {  
  4.     alert('Today is Sunday!');  
  5. };  
  6. //運用邏輯與代替if  
  7. day&&alert('Today is Sunday!');  

比如上面的代碼,首先得到今天的日期,如果是星期天,則彈窗,否則什么也不做。我們知道邏輯操作存在短路的情況,對于邏輯與表達式,只有兩者都真才結果才為真,如果前面的day變量被判斷為假了,那么對于整個與表達式來說結果就是假,所以就不會繼續去執行后面的alert了,如果前面day為真,則還要繼續執行后面的代碼來確定整個表達式的真假。利用這點達到了if的效果。

對于傳統的if語句,如果執行體代碼超過了1 條語句,則需要加花括號,而利用逗號表達式,可以執行任意條代碼而不用加花括號。

  1. if(conditoin) alert(1),alert(2),console.log(3); 

上面if語句中,如果條件成立則執行三個操作,但我們不需要用花括號將這三句代碼括起來。當然,這是不推薦的,這里是冷知識課堂:)

禁止別人以iframe加載你的頁面

下面的代碼已經不言自明了,沒什么好多說的。

  1. if (window.location != window.parent.location) window.parent.location = window.location; 

console.table

Chrome專屬,IE繞道的console方法。可以將JavaScript關聯數組以表格形式輸出到瀏覽器console,效果很驚贊,界面很美觀。

  1. //采購情況  
  2. var teams_data = [{'品名''杜雷斯''數量': 4}, {'品名''岡本''數量': 3}];  
  3. console.table(teams_data); 

原文鏈接:http://www.cnblogs.com/Wayou/p/things_you_dont_know_about_frontend.html

責任編輯:林師授 來源: 博客園
相關推薦

2021-11-09 07:34:34

Python函數代碼

2013-05-15 10:08:27

2021-06-23 14:12:40

算法隊列

2025-02-25 13:00:00

JavaScript開發前端

2015-12-21 09:39:23

2010-08-05 11:14:12

Flex優勢

2010-09-03 08:52:38

CSS

2020-02-20 12:02:32

Python數據函數

2013-08-09 09:27:08

vCentervSphere

2010-04-19 16:09:22

Oracle控制文件

2023-11-09 08:05:40

IDEA開發工具

2018-11-15 14:52:18

Windows 10Windows升級

2011-11-08 13:41:27

蘋果siri人工智能數據中心

2011-11-15 10:25:56

IBMWindows

2014-08-18 10:44:31

斯諾登

2010-09-06 14:19:54

CSS

2012-11-30 14:13:01

2021-02-05 09:58:52

程序員Windows系統

2011-11-14 10:06:16

IBM大型機支持Windows系統POWER7

2017-03-28 08:40:14

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 人操人人 | 国内精品在线视频 | 91热在线 | 青青久久 | 亚洲精品在线免费 | 久久亚洲国产 | 亚洲一区二区三区视频 | 成人精品在线观看 | 国产精品久久久久久福利一牛影视 | 高清黄色毛片 | 国产精品欧美一区二区三区不卡 | 国产在线对白 | 91在线观看网址 | 久久伊人影院 | 免费午夜电影 | 亚洲欧美男人天堂 | 成人在线免费网站 | 成人深夜福利 | 午夜精品一区二区三区在线观看 | 国产精品福利网 | 日韩中文欧美 | 超碰最新在线 | 亚洲在线 | 午夜精品视频在线观看 | 国产高清精品在线 | 欧美午夜一区 | 国产在线精品一区二区三区 | 亚洲三区在线播放 | 久久天天 | va在线| 日韩中文字幕一区 | 久久久九九九九 | 欧美lesbianxxxxhd视频社区 | 亚洲精品中文字幕 | 日本三级电影在线观看视频 | 欧美成人免费在线视频 | 亚洲视频在线免费 | 欧美日韩中文在线 | 日韩日韩日韩日韩日韩日韩日韩 | 大乳boobs巨大吃奶挤奶 | 99九色|