面試官:你可以用純 CSS 判斷滑鼠進入的方向嗎?

2021-02-13 程式設計師零距離

(給程式設計師零距離加星標,零距離了解項目開發.)

•作者:陳大魚頭

•github: KRISACHAN[1]

前言

在之前某一個前端技術群裡,有一個群友說他面試的時候遇到了一個問題,就是面試官讓他用純 CSS 來實現一個根據滑鼠移動位置覺得物體移動方向的 DEMO。

給出的初始結構如下:

<style>body {    padding: 2em;    text-align: center;}.block {    position: relative;    display: inline-block;    width: 10em;    height: 10em;    vertical-align: middle;}
.block_content { position: absolute; top: 0; left: 0; width: 100%; height: 100%; text-align: center; line-height: 10em; background: #333; color: #FFF;}</style><p>從不同方向使滑鼠指針移過下面的內容</p><p>↓</p><span>→ </span><div> <div> Hover me! </div></div><span> ←</span><p>↑</p>

效果圖如下:

實現

淨會問這種不實用又跟業務沒啥關係的問題,氣抖冷,中國前端什麼時候才能真正的站起來。

謝謝面試官提出的好問題,我會努力實現出來的。

所以這個功能真的能用純 CSS 實現嗎?

答案是可以的,首先我們來分解下思路。

CSS 滑鼠事件

首先根據題幹,我們知道這題是需要用到滑鼠操作的,JS 裡我們有各種mouse事件,但同樣的,CSS 我們也有:hover。

這題我們需要利用到的選擇器就是:hover了

判斷方向

判斷方向 的功能便是本題的核心。

從題圖上來看,其實已經給了我們方向的指引,就是告訴我們滑鼠要通過四個箭頭的方向進入。

然後就是如果要純 CSS 來實現,就是我們的滑鼠必須要觸碰到某個關鍵節點,而且這個節點的某個表現一定是可以代表這個方位的。

這就是題目給出的兩個隱藏條件。

所以我們來嘗試下實現。

首先要通過:hover來觸碰到這個關鍵節點,而且是要在箭頭指向的方向下觸碰觸發,那麼我們可以在箭頭所指的方向都加上一個能被觸碰到的物體,例如這樣:

<style>.block_hoverer {    position: absolute;    width: 100%;    height: 100%;    z-index: 1;}.block_hoverer:nth-child(1) {    background: red;}
.block_hoverer:nth-child(2) { background: lime;}
.block_hoverer:nth-child(3) { background: orange;}
.block_hoverer:nth-child(4) { background: blue;}</style><div> <div>上</div> <div>下</div> <div>左</div> <div>右</div> <div> Hover me! </div></div>

效果如下:

我們可以發現,除了 右塊 之外,都被遮住了,嗯,正常現象。

接下來我們只需要讓這幾個塊退到邊緣即可。

代碼如下:

.block_hoverer {  position: absolute;  z-index: 1;  width: 100%;  height: 100%;  transition: all 0.3s ease;}.block_hoverer:nth-child(1) {  background: red;  top: -90%;}
.block_hoverer:nth-child(2) { background: lime; top: 90%;}
.block_hoverer:nth-child(3) { background: orange; left: -90%;}
.block_hoverer:nth-child(4) { background: blue; left: 90%;}

效果如下:

然後我們加上過渡:

.block_hoverer {  transition: all 0.3s ease;}.block_hoverer:hover {  opacity: 1;  top: 0;  left: 0;}

效果如下:

最後一步就是隱藏起來:

.block {  position: relative;  display: inline-block;  overflow: hidden;  width: 10em;  height: 10em;  vertical-align: middle;}.block_hoverer {  opacity: 0;}.block_hoverer:hover {  opacity: 1;}

效果如下:

完整效果

所以我們有完整代碼如下:

<style>    body {        padding: 2em;        text-align: center;    }    .block {        position: relative;        display: inline-block;        overflow:hidden;        width: 10em;        height: 10em;        vertical-align: middle;        transform: translateZ(0);    }    .block_hoverer {        position: absolute;        z-index: 1;        width: 100%;        height: 100%;        opacity: 0;        transition: all .3s ease;    }
.block_hoverer:nth-child(1) { background: red; top: -90%; }
.block_hoverer:nth-child(2) { background: lime; top: 90%; }
.block_hoverer:nth-child(3) { background: orange; left: -90%; }
.block_hoverer:nth-child(4) { background: blue; left: 90%; } .block_hoverer:hover { opacity: 1; top: 0; left: 0; }
.block_content { position: absolute; top: 0; left: 0; width: 100%; height: 100%; text-align: center; line-height: 10em; background: #333; color: #FFF; }</style><body> <p>從不同方向使滑鼠指針移過下面的內容</p> <p>↓</p> <span>→ </span> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div> Hover me! </div> </div> <span> ←</span> <p>↑</p></body>

完整效果可以查看魚頭的codepen[2]

雖然沒什麼軟用,但是應付面試官應該是夠用了。

感謝面試官提出的問題,讓我實現了這個功能,對 CSS 有了更深的理解。

References

[1] KRISACHAN: https://github.com/KRISACHAN
[2] codepen: https://codepen.io/krischan77/pen/RzomRX

👇👇👇👇👇

今天給大家送上一份特別心意。

僅限公眾號【程式設計師零距離】粉絲參與,在公眾號後臺對話框回復關鍵詞福利,獲取抽獎入口。

看看小編為大家都準備了什麼?

 一等獎:66元現金紅包1個 10份二等獎:優選書籍1本              8份

相關焦點

  • 面試官: 爸爸給20元讓你去買42元的中華煙, 幽默男孩回答被錄用
    在面試中不僅要掌握專業的知識技能,還要有隨機應變的能力,不然你永遠都不知道面試官下一句問你什麼。所謂道高一尺魔高一丈,在面試中表現的淋漓盡致。在一場面試中,考官就提出了這樣的問題:爸爸給你20塊錢,讓你去買42元的中華煙,你怎麼買?平常都是給考官買煙,這次成給爸爸買煙了,不知道面試官葫蘆裡賣的什麼藥。讓我們看看面試者怎麼回答的吧。
  • 女面試官:我兒子叫你兒子爸爸,那我是你的誰?小夥神回復被錄取
    Tom大學畢業後便去一家公司應聘銷售,第1輪面試很順利,在經過了解後,Tom很輕鬆地便進入了複試環節,同時進入複試的除了他還有另外2個人。複試的面試官是一位看上去很有氣質的職業女性,在問了一些常規問題後,女面試官問了一個問題,幾個人聽完都懵逼了。女面試官問:「如果我兒子叫你兒子爸爸,那我是你的誰?」說完便給了大家1分鐘時間想想。
  • 面試官:請問,鉛筆姓什麼?回「鉛」的都淘汰,小姑娘巧妙作答!
    中了面試官的套路。很多面試官喜歡一些心思細膩,思維活躍的求職者們。對於這些公司來說,學歷,專業知識只是他們的門檻而已,頭腦靈活,遇事能夠應變自如的人,才是公司們想要的人才,要知道專業知識是可以培養的,然而思維邏輯方式,臨場應變能力這些可是無法培養的!餘力今年25歲,是一名典型的「90後」。從工作了一年的原公司離職後,他參加了某公司的面試,應聘銷售助理崗位。
  • 職業移民面試官刁難?律師:英語要過關
    有華人表示,美國移民官要求背出社安號,還詢問年收入金額,移民官的態度與口氣也十分不友善。對此,移民律師認為,現在刁難案件增多,意在考驗申請人的英語程度,問題也會針對申請人,當時辦理綠卡途徑的方式而有所不同,尤其對透過職業移民申請綠卡或入籍的面試為最嚴。
  • 面試官:成語字典有幾個成語?小姑娘機智回答,被錄取
    我們下邊直接進入主題。故事的主人公是一個來自遼寧大連的小姑娘,小念。小念是一個地地道道的東北女孩,學習成績優異,所以,當初直接考上了清華大學。後來進入大學的時候,一開始小念還天天的認真讀書,但是住在一起的同學,天天帶著小念出去玩,大家也都知道,人是一個容易受帶動的高級動物,所以,後期小念的成績也是,有點讓人失望了。不過還好,畢業之後的小念仿佛突然察覺到了什麼似的。
  • 公司的一個面試題:如何用CSS讓一個容器水平垂直居中?
    DOCTYPE html>   <html>      <head>          <meta charset="UTF-8">          <title>demo</title>      </head>      <body>          <style type="text/css
  • 女面試官:我沒穿衣服被你看到,會怎麼做?畢業大學生高情商回答
    職場面試奇葩題層出不窮,被面試官奇葩問題卡住過的面試者會說面試官無理取鬧,問一些跟工作沒有半毛關係的問題,但作為一名優秀的面試官,
  • 女面試官:三個金叫「鑫」,三個鬼叫什麼?小夥機智回答,被錄取
    ,面試官也算是絞盡腦汁,想盡一切辦法了。嚴嵩,一個剛從985大學畢業的應屆畢業生,憑著他985的學歷,本可以在當地找一個相對來說不錯的工作,但是年輕氣盛的他不甘心就這樣混下去。於是他選擇了一個行業裡的頂尖公司的面試。但是,當嚴嵩去應聘的時候,他看見好多人已經落選了,大家臉上都帶著一些不悅,憤憤不平,以及些許的不甘心。
  • Google面試官:不給我留提問時間,怎麼給你 hire?
    據此也可以看出狗家對算法的重視,現在算法面試題做出來是遠遠不夠的,對做題時間的把控和其他方面的考察同樣重要。如果面試表現不好,FB一般不會直接掛你,很多情況是給你加面機會或者down level。FB 的Coding環節,面試官一般會準備兩道題。這時候如果你只是完美地做出一道題,基本上這輪就跪了。相反,你快速解決兩道題,即便有些小瑕疵,說不定也能過。
  • 純CSS實現Tab頁籤樣式
    doctype html><html lang="zh"><head> <meta charset="UTF-8"> <title>純CSS實現Tab頁籤樣式</title> <style type="text/css"> body {
  • 面試官:我兒子是你兒子的爸爸,我是你的誰?美女精闢回答
    無論是在什麼公司什麼部門擔任著什麼工作職務前都要經歷最重要的一個環節,就是要和面試官談話,達到雙向標準,一個是公司方考慮著要不要應聘和面試方要不要受聘。在面試的時候總是會出現一些一個又一個讓人費勁腦汁的問題。
  • 效果拔群:日本網友視頻面試緊張,竟把面試官「魔改」成遊戲攻略對象!
    同樣的如果要找工作,大多數情況下也是靠視頻面試的方式。視頻面試就是跟對方公司約好時間,打開電腦跟通訊軟體,開始面試、敘述學習經歷,了解對方公司跟工作情況等等。對於應聘者來說,視頻面試是一個全面展示自己的好機會。除了過人的能力以外,種種細節也都是視頻面試取勝的關鍵。
  • 暗訪日本Aレ女尤面試官:只能看,不許摸
    「可以把胸部再夾緊一點嗎?」小堀問。「是這樣嗎?」小城交叉雙手。小堀乾巴巴的指頭按下快門,傻瓜相機咔嚓一聲,又一位女士全裸入鏡。儀式完畢,記者問:「你這職業,太招人妒忌了吧?」「只能看,不許碰,有什麼好?如果可以碰,或許不錯。」
  • 4個老外應聘外教,差點被面試官搞哭……
    ,結果碰到了這輩子也沒遇到過的面試官,差點被搞哭……點擊視頻,不看到最後,誰也猜不到結局!當他們視頻連線看到面試官時……因為,每個人的面試官竟然都是——孩子!真懂孩子,才能用最有效的方法引導,讓最內向的孩子也能積極互動。真懂孩子,才能靈活使用教具營造氣氛,讓孩子沉浸在趣味橫生的場景中……
  • 假如聖誕老爺爺帶著教授的面試來找你,你準備好了嗎?
    面試方式如此之多,還這麼多變,那麼問題來了,如果我們拿到了面試,該如何判斷我們即將面對的是哪種形式的面試呢?又如何判斷面試的競爭激烈程度呢?我將會在新一期知乎live中用語音分享的方式,來具體回答這些問題。
  • 【福利】實拍AV女優面試官的一天,害羞...
    小堀芳一是AV女優面試官,有三十年的工作經驗,看過上萬個想拍AV的裸女胴體。如果沒有他,就不會有我們耳熟能詳的小澤圓和松島楓。
  • 美女面試官:世界上筆畫最多的字是什麼?研究生回復「龘」被淘汰
    但是想要去工作,就必須經歷面試這一關。只有面試的好,才能順利地進入職場。但是現在的面試已經不想當年那麼好通過了,現在的面試不僅會考察面試者的知識水平,而且還會考察面試者的思維能力,平常學習的積累的能力。所以的話,在面試之前,一定要做好一個萬全的準備。
  • 女面試官:一瓶水,怎樣能先喝到底部的水?女大學生聰明回答
    李金英和同班同學搭伴,已經參加過好幾場招聘會,並參加了多場面試,但是都以失敗告終,雖然給她了一定的打擊,但是也增長了經驗。有一天,宿舍的舍友告訴她,在網上投了簡歷,不妨去試一試,果然很快收到了網上一家公司的面試邀請。面試那天,李金英提前來到了公司,面試的人不多,加上她,一共三個面試者。時間到了後,很快進入了面試環節。
  • 可以換滑鼠指針的錄屏軟體:screen flash
    就如微課作軟體一樣,有人就喜歡用繪聲繪影,喜歡用更為專業的軟體,你用就用唄,幹嘛還把其他軟體說成小兒科?大型運輸車拉的多,跑得快,效率高。但是你到山區試試哦。最有效率的還是土裡土氣的毛驢車。今天就給大家介紹一個默默無聞的小軟體,只要你肯用腦筋,完全可以製作出當下最流行的手繪微課。
  • 面試官:請問,鉛筆姓什麼?回「鉛」的都錯了,女大學生機智回答
    許多面試官的問題也是一樣,一道道智力題迎頭痛擊,讓許多求職者做好的準備付諸流水。這些題真的有那麼難嗎?也許我們把自己放輕鬆,試試跳脫常規思維,也許問題並沒有我們想像那麼複雜。下面跟隨我們一起去看看他們的面試現場!朋友小玲最近剛大學畢業,在學校的時候,小玲是一個各方面都非優異的學生,而且經常抽出空閒時間做一些兼職工作,所以工作經歷還算豐富。