今天是打算開始實戰自己一直要寫的**,然後開始瘋狂的翻**找靈感,在路過阿里雲的時候,突然發現——欸?這個輸入框的效果看著可以欸,於是乎,電源一拔坐了起來,分析效果。
其實這個效果並不難理解:
1. 當滑鼠指向的時候,文字框會拉長 ;
2. 當滑鼠移開的時候,文字框會恢復原來長度;
3. 當點選輸入框後,游標在輸入框中聚焦後,滑鼠再移開,它會保持拉長後的長度;
4. 當失去聚焦的時候,文字框長度再次縮短;
一分析完,就開始埋頭劈里啪啦的一陣猛敲:
doctype html
>
<
html
lang
="en"
>
<
head
>
<
meta
charset
="utf-8"
>
<
title
>個人比較喜歡用18號字, fira code, 行距 1.02 看著特舒服
title
>
head
>
<
style
>
.search
.search:hover
style
>
<
body
>
<
header
>
<
div
class
="topbar"
>
<
input
class
="search"
type
="text"
value
=""/>
div>
header
>
body
>
html
>
第一步滑鼠經過的算是解決了,終於遇到了正真的問題:
1<
script
>
2document.getelementbyid(
'search
').focus();
3script
>
……這哪是監聽聚焦事件啊,這就是預設把游標停在input裡面嘛,根本沒有解決我的問題。
無奈之下,只好開始各種令人無語的嘗試,幾乎所有的可能性都試過了,抱著試試的心理,敲下了一段addeventlistener(); 在一種似乎是巧合的情況下,我在監聽事件裡的語法提示中找到了focus 和 blur !!
於是就有了接下來的內容:
1<
script
>
2var
search
=document.getelementsbyclassname(
'search
');
//根據class名稱獲取標籤 返回的是乙個陣列34
search[
0].addeventlistener(
'focus',
function
())7
8search[
0].addeventlistener(
'blur',
function
())12
13script
>
到這裡的時候,已經能看到效果了,分析出來的四個條件都滿足了,但是,就這樣了麼?
很明顯不行啊,顏色什麼的都沒有調,使用者體驗一定很不爽對不對?而且改乙個樣式你得要寫一堆**對不對?**沒有封裝以後每次都要重新copy累不累?
其實這樣寫還有乙個小問題:
hover標籤在這裡成了一次性的快餐盒(如果有心情的話可以去試試~~)
後來又加了一句 search[0].value = null; 來清除文字框內的內容,為了測試是不是因為裡面有了內容才會讓hover這個偽類失效的...但是事實並非是input內容的問題。
當時也不是很在意這個問題,也就將它放了放,開始解決前面幾個問題……全靠js寫的話,一定要寫大量完全不需要寫的**,再加上二次分析了阿里的**,我發現了完全可以用js來更換html的網頁的class屬性——於是又寫了乙個類,用js去交替兩個樣式,下面貼出完整**:
1doctype html
>
2<
html
lang
="en"
>
3<
head
>
4<
meta
charset
="utf-8"
>
5<
title
>標題會變欸~~~
title
>
6head
>78
<
style
>9*
1415
16/*
********************************** header **********************************
*/17
18.topbar
2223
/*搜尋條的顏色變化
*/24
.search
4142
.search:hover
5051
.search-bar-on-selected
6869
style
>
7071
<
body
>
7273
<
header
>
74<
div
class
="topbar"
>
75<
input
class
="search"
type
="text"
value
=""/>
76div
>
77header
>
7879
body
>
8081
<
script
>
82var
search
=document.getelementsbyclassname(
'search');
8384
//搜尋條選中和移除事件 修改class名稱的方法能更好的封裝**
85search[
0].addeventlistener(
'focus',
function
())88
89search[
0].addeventlistener(
'blur',
function
(e))
9394
script
>
9596
html
>
神奇的是,因為樣式的交錯,剛好讓hover標籤從一次性便成了用完後自動恢復至初態!!
嗯,在最後總結下,總結的東西不多,但是等到將來的某一天回頭望去,能夠看到過去各種奇奇怪怪的思維錨點:
1. input的聚焦監聽可以使用addeventlistener(focus, function(){}); 來實現。
2.很多事情都不需要去考慮,大多數情況做好自己的事情,自己所在意的東西就會迎刃而解。
3. 有時候,正是因為沒有答案,才會讓你踏出這一步,開始自己的新的旅程。
input事件監聽輸入法事件
在input輸入框輸入中文時,需要即時 查詢出匹配 輸入內容的結果,一般我們會使用input事件監聽使用者輸入事件,但是在輸入漢語 拼 音時,也會觸發input事件,前端就會不斷傳送請求,導致無法正常拼寫中文。var flag false ajax input on compositionstart...
Vue 回顧之指令(關於input自動聚焦的問題)
用了vue也一年多了,雖然對大部分內容都比較熟悉,但有些用法可能會起到意想不到的作用。今天在做乙個關於 的需求,要求是每次點選編輯按鈕顯示編輯框,要求自動聚焦。一開始想到了autofocus屬性,結果發現每次只有重新整理頁面的第一次會生效,之後無論怎麼點選都不能自動聚焦,於是網上查了很多資料,最終問...
input 子系統 五 事件上報及監聽
事件的生產者 是 input 裝置驅動 還可能是 使用者空間通過write介面 上報的事件,這個可以忽略不計.途徑 input.c input core 到達 handler,然後由handler 提供給消費者.事件的生產者可以看做都是 裝置驅動 但是消費者 不一定是 應用程式,可能是 kernel...