国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

淘寶搜索框效果實現分析

2019-11-20 23:54:55
字體:
來源:轉載
供稿:網友

淘寶的搜索框就用到了這樣一種設計:

這種設計一般是用javascript監控了輸入框的focus和blur事件:

復制代碼 代碼如下:

<input type="text" id="q" value="請輸入關鍵字" />
<script type="text/javascript">//<![CDATA[
$("#q").onfocus = function() {
  if ("請輸入關鍵字" == this.value) {
    this.value = "";
  }
};
$("#q").onblur = function() {
  if ("" == this.value) {
    this.value = "請輸入關鍵字";
  }
};
//]]></script>

這段代碼有兩個很明顯的缺點:

  1. “請輸入關鍵字”這段提示共出現了3次,一旦要改這段文字就得改3個地方,維護顯得非常不便
  2. 為了性能優化,我們會把javascript部分放到頁面末尾。然而,像門戶網站首頁這種代碼量很大的頁面,末尾的javascript很可能會延時1-2秒執行。在這段時間內,即使焦點在輸入框內,提示文字也不會消失,用戶需要手動刪除這段文字再輸入內容

淘寶的輸入框則采取了另一種做法,它不把這段提示文字作為輸入框的value值,而是放在另一個標簽內,再用絕對定位把這段文字疊到輸入框上:

從上面的代碼可以看到,提示文字在label標簽內,這樣做有兩個好處:

  1. 良好的結構性。既不是div不是span,對input的說明就應該用label
  2. 良好的用戶體驗。由于設置了for屬性,當用戶點擊label的時候,就會自動focus到輸入框。

javascript要控制的其實就是label的顯示和隱藏,再也不需要管那段提示文字的內容了:

復制代碼 代碼如下:

$("#q").onfocus = function() {
  $("label[for=q]")[0].style.display = 'none';
};
$("#q").onblur = function() {
  if ("" == this.value) {
    $("label[for=q]")[0].style.display = '';
  }
};

javascript是簡潔了,但用戶體驗呢?在javascript執行前,那段提示文字也是無論如何都不會消失,用戶也是想刪掉這段文字,但是他們刪不了,因為這些文字實際上并不在輸入框內,而他們輸入的內容會被提示文字擋住了。我個人認為這給用戶帶來了很大的疑惑。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康乐县| 北川| 长岛县| 社旗县| 颍上县| 新建县| 衡山县| 斗六市| 遵义市| 大连市| 泰州市| 乌审旗| 逊克县| 湖北省| 郸城县| 安化县| 湟源县| 绵竹市| 隆回县| 吉林市| 上林县| 宝坻区| 北流市| 连南| 彭泽县| 叙永县| 茂名市| 马尔康县| 鹤岗市| 建平县| 莆田市| 于都县| 江山市| 资兴市| 柘荣县| 渝中区| 龙井市| 新津县| 井陉县| 抚远县| 固安县|