淘寶搜索框效果實(shí)現(xiàn)分析
淘寶的搜索框就用到了這樣一種設(shè)計(jì):
這種設(shè)計(jì)一般是用javascript監(jiān)控了輸入框的focus和blur事件:
<input type="text" id="q" value="請輸入關(guān)鍵字" />
<script type="text/javascript">//<![CDATA[
$("#q").onfocus = function() {
if ("請輸入關(guān)鍵字" == this.value) {
this.value = "";
}
};
$("#q").onblur = function() {
if ("" == this.value) {
this.value = "請輸入關(guān)鍵字";
}
};
//]]></script>
這段代碼有兩個(gè)很明顯的缺點(diǎn):
- “請輸入關(guān)鍵字”這段提示共出現(xiàn)了3次,一旦要改這段文字就得改3個(gè)地方,維護(hù)顯得非常不便。
- 為了性能優(yōu)化,我們會(huì)把javascript部分放到頁面末尾。然而,像門戶網(wǎng)站首頁這種代碼量很大的頁面,末尾的javascript很可能會(huì)延時(shí)1-2秒執(zhí)行。在這段時(shí)間內(nèi),即使焦點(diǎn)在輸入框內(nèi),提示文字也不會(huì)消失,用戶需要手動(dòng)刪除這段文字再輸入內(nèi)容。
淘寶的輸入框則采取了另一種做法,它不把這段提示文字作為輸入框的value值,而是放在另一個(gè)標(biāo)簽內(nèi),再用絕對(duì)定位把這段文字疊到輸入框上:
從上面的代碼可以看到,提示文字在label標(biāo)簽內(nèi),這樣做有兩個(gè)好處:
- 良好的結(jié)構(gòu)性。既不是div不是span,對(duì)input的說明就應(yīng)該用label。
- 良好的用戶體驗(yàn)。由于設(shè)置了for屬性,當(dāng)用戶點(diǎn)擊label的時(shí)候,就會(huì)自動(dòng)focus到輸入框。
javascript要控制的其實(shí)就是label的顯示和隱藏,再也不需要管那段提示文字的內(nèi)容了:
$("#q").onfocus = function() {
$("label[for=q]")[0].style.display = 'none';
};
$("#q").onblur = function() {
if ("" == this.value) {
$("label[for=q]")[0].style.display = '';
}
};
javascript是簡潔了,但用戶體驗(yàn)?zāi)兀吭趈avascript執(zhí)行前,那段提示文字也是無論如何都不會(huì)消失,用戶也是想刪掉這段文字,但是他們刪不了,因?yàn)檫@些文字實(shí)際上并不在輸入框內(nèi),而他們輸入的內(nèi)容會(huì)被提示文字擋住了。我個(gè)人認(rèn)為這給用戶帶來了很大的疑惑。
相關(guān)文章
微信小程序?qū)崿F(xiàn)電影App導(dǎo)航和輪播
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)電影App導(dǎo)航和輪播,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
JavaScript中判斷對(duì)象是否為空的方法小結(jié)
在JavaScript中,判斷一個(gè)對(duì)象是否為空可以有多種方法,這篇文章主要為大家詳細(xì)介紹了幾種常見的方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
JavaScript中的apply()方法和call()方法使用介紹
我們發(fā)現(xiàn)apply()和call()的真正用武之地是能夠擴(kuò)充函數(shù)賴以運(yùn)行的作用域,如果我們想用傳統(tǒng)的方法實(shí)現(xiàn)2012-07-07
JS實(shí)現(xiàn)多級(jí)菜單中當(dāng)前菜單不隨頁面跳轉(zhuǎn)樣式而發(fā)生變化
本文介紹了JQuery巧妙實(shí)現(xiàn)多級(jí)菜單中當(dāng)前菜單不隨頁面跳轉(zhuǎn)樣式發(fā)生變化,實(shí)現(xiàn)方法非常簡單,感興趣的朋友一起看看吧2017-05-05
JScript內(nèi)置對(duì)象Array中元素的刪除方法
JScript內(nèi)置對(duì)象Array中元素的刪除方法...2007-03-03
利用d3.js實(shí)現(xiàn)蜂巢圖表帶動(dòng)畫效果
這篇文章主要給大家介紹了關(guān)于如何利用d3.js實(shí)現(xiàn)蜂巢圖表帶動(dòng)畫效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用d3.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
微信小程序 websocket 實(shí)現(xiàn)SpringMVC+Spring+Mybatis
這篇文章主要介紹了 微信小程序websocket實(shí)現(xiàn)SpringMVC+Spring+Mybatis的相關(guān)資料,這里提供實(shí)現(xiàn)思路及實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-08-08
基于JS快速實(shí)現(xiàn)導(dǎo)航下拉菜單動(dòng)畫效果附源碼下載
這是一個(gè)帶變形動(dòng)畫特效的下拉導(dǎo)航菜單特效。該導(dǎo)航菜單在菜單項(xiàng)之間切換時(shí),下拉菜單會(huì)快速的根據(jù)菜單內(nèi)容的大小來動(dòng)態(tài)變形,顯示合適的下拉菜單大小,效果非常棒,對(duì)導(dǎo)航下拉菜單效果感興趣的朋友一起通過本文學(xué)習(xí)吧2016-10-10

