你會用到的 15個前端小知識

1. css 一行文本超出...

overflow:hidden;

text-overflow:ellipsis;

white-space:nowrap;

2.多行文本超出顯示...

display:-webkit-box;

-webkit-box-orient:vertical;

-webkit-line-clamp:?3;//此處的數(shù)字可變 此處是三行省略

overflow:hidden;

3.IOS 手機(jī)容器滾動條滑動不流暢

overflow:auto;

-webkit-overflow-scrolling:touch;

4.修改滾動條樣式

隱藏div元素的滾動條

div::-webkit-scrollbar{

display:?none;

}

div::-webkit-scrollbar滾動條整體部分

div::-webkit-scrollbar-thumb滾動條里面的小方塊励堡,能向上向下移動(或往左往右移動,取決于是垂直滾動條還是水平滾動條

div::-webkit-scrollbar-track滾動條的軌道(里面裝有Thumb

div::-webkit-scrollbar-button滾動條的軌道的兩端按鈕察迟,允許通過點(diǎn)擊微調(diào)小方塊的位置

div::-webkit-scrollbar-track-piece內(nèi)層軌道伊滋,滾動條中間部分(除去

div::-webkit-scrollbar-corner邊角饲常,即兩個滾動條的交匯處

div::-webkit-resizer兩個滾動條的交匯處上用于通過拖動調(diào)整元素大小的小控件注意此方案有兼容性問題,一般需要隱藏滾動條時我都是用一個色塊通過定位蓋上去,或者將子級元素調(diào)大宫盔,父級元素使用overflow-hidden截掉滾動條部分。暴力且直接享完。

5.使用 css 寫出一個三角形角標(biāo)

元素寬高設(shè)置為 0灼芭,通過border屬性來設(shè)置,讓其它三個方向的border顏色為透明或者和背景色保持一致般又,剩余一條border的顏色設(shè)置為需要的顏色彼绷。

div{

width:0;

height:0;

border:5pxsolid transparent;

border-top-color:?red;

}

6.解決 ios audio 無法自動播放巍佑、循環(huán)播放的問題

ios手機(jī)在使用audio或者video播放的時候,個別機(jī)型無法實(shí)現(xiàn)自動播放寄悯,可使用下面的代碼hack萤衰。

//?解決ios?audio無法自動播放、循環(huán)播放的問題

varmusic?=document.getElementById('video');

varstate?=0;

document.addEventListener('touchstart',function(){

if(state==0){

music.play();

state=1;

}

},false);

document.addEventListener("WeixinJSBridgeReady",function(){

music.play();

},false);

//循環(huán)播放

music.onended?=function(){

music.load();

music.play();

}

7.水平垂直居中

我一般只使用兩種方式 定位 或者flex猜旬,我覺得夠用了脆栋。

div{

width:100px;

height:100px;

position:?absolute;

top:0;

right:0;

bottom:0;

left:0;

margin:?auto;

}

父級控制子集居中

.parent{

display:?flex;

justify-content:?center;

align-items:?center;

}

8.隱藏頁面元素(display:none;visibility:hidden;opacity:0的區(qū)別)

1、空間占據(jù)

display:none隱藏后不占據(jù)額外空間洒擦,它會產(chǎn)生回流和重繪椿争,

而visibility:hidden和opacity:0元素雖然隱藏了,但它們?nèi)匀徽紦?jù)著空間熟嫩,它們倆只會引起頁面重繪丘薛。

2、子元素繼承

display:none不會被子元素繼承邦危,但是父元素都不在了洋侨,子元素自然也就不會顯示了,皮之不存倦蚪,毛之安附~~

visibility:hidden 會被子元素繼承希坚,可以通過設(shè)置子元素visibility:visible 使子元素顯示出來

opacity: 0 也會被子元素繼承,但是不能通過設(shè)置子元素opacity: 0使其重新顯示

三陵且、事件綁定

display:none 的元素都已經(jīng)不再頁面存在了裁僧,因此肯定也無法觸發(fā)它上面綁定的事件;

visibility:hidden 元素上綁定的事件也無法觸發(fā)慕购;

opacity: 0元素上面綁定的事件是可以觸發(fā)的聊疲。

(這個就不太好在圖上看了,可以自己測試一下)

四沪悲、過渡動畫

transition對于display肯定是無效的获洲,大家應(yīng)該都知道;

transition對于visibility也是無效的殿如;

transition對于opacity是有效贡珊,大家也是知道的:).

9.前端工程化

一提到前端工程化很多人想到的都是webpack,這是不對的涉馁,webpack僅僅是前端工程化中的一環(huán)门岔。在整個工程化過程中他幫我們解決了絕大多數(shù)的問題,但并沒有解決所有問題烤送。

前端工程化是通過工具提升效率寒随,降低成本的一種手段。

近些年被廣泛的關(guān)注和探討,究其原因主要是因?yàn)楝F(xiàn)代化前端應(yīng)用功能要求不斷提高妻往,業(yè)務(wù)邏輯日益復(fù)雜逢防,作為當(dāng)下互聯(lián)網(wǎng)時代唯一不可或缺的技術(shù),前端可以說是占據(jù)了整個開發(fā)行業(yè)的半壁江山蒲讯。從傳統(tǒng)的網(wǎng)站,到現(xiàn)在的 H5,移動 App,桌面應(yīng)用灰署,以及小程序判帮。前端技術(shù)幾乎是無所不能的全面覆蓋。

在這些表象的背后呢溉箕,實(shí)際上是行業(yè)對開發(fā)人員的要求發(fā)生了天翻地覆的變化晦墙,以往前端寫 demo,套模板肴茄,調(diào)頁面這種刀耕火種的方式已經(jīng)完全不符合當(dāng)下對開發(fā)效率的要求晌畅,前端工程化就是在這樣一個背景下被提上臺面,成為前端工程師必備的手段之一寡痰。

一般來說前端工程包含抗楔,項(xiàng)目初始化,項(xiàng)目開發(fā)拦坠,集成连躏,構(gòu)建,打包贞滨,測試入热,部署等流程。工程化就是以工程的角度來解決這些問題晓铆。比如項(xiàng)目初始化我們一般使用npm init, 創(chuàng)建頁面模板使用 plop勺良,我們喜歡使用 ES6+開發(fā),但是需要通過 babel 編碼成 ES5骄噪,持續(xù)集成的時候我們使用 git尚困,但是為了保持開發(fā)規(guī)范我們引入了 ESLint,部署一般使用 ci/cd 或者 jenkins 等等链蕊。

前端工程化是一個比較大的話題尾组,后面我們會單開話題來講。

10.contenteditable

html中大部分標(biāo)簽都是不可以編輯的示弓,但是添加了contenteditable屬性之后讳侨,標(biāo)簽會變成可編輯狀態(tài)。

不過通過這個屬性把標(biāo)簽變?yōu)榭删庉嫚顟B(tài)后只有input事件奏属,沒有change事件跨跨。也不能像表單一樣通過maxlength控制最大長度。我也忘記我在什么情況下用到過了,后面想起來再補(bǔ)吧勇婴。

11.calc

這是一個css屬性忱嘹,我一般稱之為css表達(dá)式「剩可以計算css的值拘悦。最有趣的是他可以計算不同單位的差值。很好用的一個功能橱脸,缺點(diǎn)是不容易閱讀础米。接盤俠沒辦法一眼看出20px是啥。

div{

width:calc(25%-20px);

}

12.Proxy 和 Object.defineProperty 區(qū)別

Proxy的意思是代理添诉,我一般教他攔截器屁桑,可以攔截對象上的一個操作。用法如下栏赴,通過new的方式創(chuàng)建對象蘑斧,第一個參數(shù)是被攔截的對象,第二個參數(shù)是對象操作的描述须眷。實(shí)例化后返回一個新的對象竖瘾,當(dāng)我們對這個新的對象進(jìn)行操作時就會調(diào)用我們描述中對應(yīng)的方法。

newProxy(target,?{

get(target,?property)?{

},

set(target,?property)?{

},

deleteProperty(target,?property)?{

}

})

Proxy區(qū)別于Object.definedProperty花颗。

Object.defineProperty只能監(jiān)聽到屬性的讀寫准浴,而Proxy除讀寫外還可以監(jiān)聽屬性的刪除,方法的調(diào)用等捎稚。

通常情況下我們想要監(jiān)視數(shù)組的變化乐横,基本要依靠重寫數(shù)組方法的方式實(shí)現(xiàn),這也是 Vue 的實(shí)現(xiàn)方式今野,而Proxy可以直接監(jiān)視數(shù)組的變化葡公。

constlist?=?[1,2,3];

constlistproxy?=newProxy(list,?{

set(target,?property,?value)?{

target[property]?=?value;

returntrue;//?標(biāo)識設(shè)置成功

}

});

list.push(4);

Proxy是以非入侵的方式監(jiān)管了對象的讀寫,而defineProperty需要按特定的方式定義對象的屬性条霜。

13.Reflect

他是ES2015新增的對象催什,純靜態(tài)對象也就是不能被實(shí)例畫,只能通過靜態(tài)方法的方式調(diào)用宰睡,和Math對象類似蒲凶,只能類似Math.random的方式調(diào)用。

Reflect內(nèi)部封裝了一系列對對象的底層操作拆内,一共 14 個旋圆,其中 1 個被廢棄,還剩下 13 個麸恍。

Reflect的靜態(tài)方法和Proxy描述中的方法完全一致灵巧。也就是說Reflect成員方法就是Proxy處理對象的默認(rèn)實(shí)現(xiàn)搀矫。

Proxy對象默認(rèn)的方法就是調(diào)用了Reflect內(nèi)部的處理邏輯,也就是如果我們調(diào)用get方法刻肄,那么在內(nèi)部瓤球,proxy就是將get原封不動的交給了Reflect,如下敏弃。

constproxy?=newProxy(obj,?{

get(target,?property)?{

returnReflect.get(target,?property);

}

})

Reflect和Proxy沒有絕對的關(guān)系卦羡,我們一般將他們兩個放在一起講是為了方便對二者的理解。

那為什么會有Reflect對象呢麦到,其實(shí)他最大的用處就是提供了一套統(tǒng)一操作Object的API绿饵。判斷對象是否存在某一個屬性,可以使用in操作符隅要,但是不夠優(yōu)雅,還可以使用Reflect.has(obj, name); 刪除一個屬性可以使用delete董济,也可以使用Reflect.deleteProperty(obj, name); 獲取所有屬性名可以使用Object.keys, 也可以使用Reflect.ownKeys(obj); 我們更推薦使用Reflect的API來操作對象步清,因?yàn)樗攀俏磥怼?/p>

14.解析 get 參數(shù)

通過replace方法獲取url中的參數(shù)鍵值對,可以快速解析get參數(shù)虏肾。

constq?=?{};

location.search.replace(/([^?&=]+)=([^&]+)/g,(_,k,v)=>q[k]=v);

console.log(q);

15.解析連接 url

可以通過創(chuàng)建a標(biāo)簽廓啊,給a標(biāo)簽賦值href屬性的方式,獲取到協(xié)議封豪,pathname谴轮,origin等location對象上的屬性。

//?創(chuàng)建a標(biāo)簽

constaEle?=document.createElement('a');

//?給a標(biāo)簽賦值href路徑

aEle.href?='/test.html';

//?訪問aEle中的屬性

aEle.protocol;//?獲取協(xié)議

aEle.pathname;//?獲取path

aEle.origin;

aEle.host;

aEle.search;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吹埠,一起剝皮案震驚了整個濱河市第步,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缘琅,老刑警劉巖粘都,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異刷袍,居然都是意外死亡翩隧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門呻纹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堆生,“玉大人,你說我怎么就攤上這事雷酪∈缙停” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵哥力,是天一觀的道長糯景。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么蟀淮? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任最住,我火速辦了婚禮,結(jié)果婚禮上怠惶,老公的妹妹穿的比我還像新娘涨缚。我一直安慰自己,他們只是感情好策治,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布脓魏。 她就那樣靜靜地躺著,像睡著了一般通惫。 火紅的嫁衣襯著肌膚如雪茂翔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天履腋,我揣著相機(jī)與錄音珊燎,去河邊找鬼。 笑死遵湖,一個胖子當(dāng)著我的面吹牛悔政,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播延旧,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼谋国,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了迁沫?” 一聲冷哼從身側(cè)響起芦瘾,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎集畅,沒想到半個月后旅急,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牡整,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年藐吮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逃贝。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡谣辞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沐扳,到底是詐尸還是另有隱情泥从,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布沪摄,位于F島的核電站躯嫉,受9級特大地震影響纱烘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜祈餐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一擂啥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧帆阳,春花似錦哺壶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鳍徽,卻和暖如春资锰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阶祭。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工绷杜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胖翰。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓接剩,卻偏偏與公主長得像切厘,于是被迫代替她去往敵國和親萨咳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容