百度搜索框的基本實現(xiàn)

百度首頁搜索框是這樣的一個基本形式肩祥,我們搜索框里輸入字符時就能顯示出一些有關的聯(lián)想詞后室,如圖2所示


圖1.png

圖2.png

那么今天我們來寫一下這種效果,不算一模一樣混狠,大概相同吧岸霹,哈哈。
第一步:在html文檔中搭建出類似的框架将饺,給出類似的樣式贡避,基本頁面布局實現(xiàn)大致一樣,代碼如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>百度搜索</title>
        <style>
            *{
                margin: 0;
                padding: 0; 
            }
            .show{
                margin: 10px auto;
                width: 340px;
            }
            #text{
                /*去掉默認樣式*/
                appearance:none;
                width:250px;
                height: 20px;
                outline:0;
            }
            #go{
                display: inline-block;
                text-decoration: none;
                text-align: center;
                line-height: 25px;
                border: 0;
                width:70px;
                height: 25px;
                font-size: 14px;
                color: white;
                background-color: rgb(33,134,250); 
            }
            .search{
                width:252px;
                border:1px solid #ccc;
                display: none;
            }
            ul{
                list-style: none;
            }
            li{
                line-height: 20px;
                font-size: 14px;
                cursor:pointer;
                box-sizing: border-box;
                padding:0 5px; 
            }
            li:hover{
                background-color: rgb(230,230,230);
            }
        </style>
    </head>
    <body>
        <center><img src="baidu.png" alt=""></center>
        <div class="show">
            <input type="text" id="text">
            <a href="" id="go">百度一下</a>
            <div class="search">
                <ul>
                    
                </ul>   
            </div>
        </div>
    </body>
</html>

效果如下圖:


圖片.png

接下來是我們必須要知道的一些事:

1予弧、在哪輸入
2刮吧、什么情況下會出現(xiàn)聯(lián)想詞列表,什么情況下消失
3掖蛤、這些聯(lián)想詞的數(shù)據(jù)來自哪里

答案是:

1杀捻、在輸入框中輸入內容
2、如果輸入框中為空蚓庭,就不會出現(xiàn)聯(lián)想列表致讥;如果輸入框中有內容,那么讓聯(lián)想列表出現(xiàn)
3器赞、關于這些聯(lián)想詞的數(shù)據(jù)垢袱,我們可以借用百度接口來獲取,百度通過url接口將數(shù)據(jù)傳出港柜,url就是指http://www.baiidu.com地址请契,我們才可以通過這個鏈接訪問服務器的資源,瀏覽器只是這些資源的載體,那么這里就涉及到跨域請求姚糊,在我們所學的內容里贿衍,可以想到script標簽的src屬性可以引入外部文件,比如引入JQ插件救恨,因此可以實現(xiàn)跨域請求贸辈。

再接著,我們來了解一下百度鏈接地址
先在百度搜索框里輸入任意字符肠槽,按回車鍵確認搜索


圖片.png

這里我標記了四個地方擎淤,首先看地址欄,s?前面是資源占位符秸仙,稱為地址嘴拢;?后面是參數(shù)寂纪,我們向百度申請的資源不同席吴,參數(shù)就不同,在這里我們搜索的是1捞蛋,所以wd屬性為1.
再看Network下面的標記孝冒,這個請求就是我們發(fā)送的,然后它通過script標簽訪問到后面的js腳本

圖片.png

我們右擊上圖 劃線處拟杉,拷貝鏈接到新窗口打開
圖片.png

我們看到一串很長的鏈接是吧庄涡,看不懂好像,哈哈搬设,顯示內容里面好像有我們想要請求的數(shù)據(jù)穴店,我們再將它簡化一下,刪除我上圖劃線的部分拿穴,得到下圖:
圖片.png

繼續(xù)簡化泣洞,刪除我上圖劃線的部分,得到下圖:
圖片.png

再觀察這個圖片贞言,我劃線的兩個部分是一樣的斜棚,其實它也是可以替換的,我們將鏈接中劃線部分替換為任意一個名字 lyl ,得到下圖;
圖片.png

替換得沒問題该窗,如果我們不看紅色框里面的內容弟蚀,是不是看起來想一個函數(shù)執(zhí)行 lyl()
所以它的返回值類似是一個函數(shù)執(zhí)行,函數(shù)里面(括號里面)的參數(shù)是是json鍵值對酗失,所以這些鍵值對可以當做參數(shù)傳入义钉。
說到這里,我們還必須知道一個事规肴,通常用戶都會在百度搜索框里輸入向搜索的內容捶闸,還有另外一方式夜畴,如下圖:
圖片.png

只需在http://www.baidu.com后面加上/s?wd=xxxx就行
好了,只需了解這么多就差不多了删壮。
下面在</dody>標簽后面插入下面代碼贪绘,就能得到我們想要的搜索框了

<script>
        var text = document.getElementById('text');
        var search = document.getElementsByClassName('search')[0];
        var oul = document.querySelector(".search ul");
        var go =document.getElementById("go");
        // 每次鍵盤抬起
        text.onkeyup = function(){
            // 獲取輸入框里面的內容
            var val = this.value;
            // 如果輸入框中不為空,就讓聯(lián)想列表出現(xiàn)央碟,否則消失
            search.style.display=this.value!=""?"block":"none";
            // 每次松開鍵盤税灌,都要通過script標簽向百度接口獲取數(shù)據(jù)
            // 所以每次松開鍵盤都要生成一個script標簽,通過src屬性來跨域請求
            var sc = document.createElement("script");
            sc.src = "https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd="+ val+"&cb=lyl";
            document.body.appendChild(sc);
        }
        // data參數(shù)就是鏈接返回的json數(shù)據(jù)亿虽,data是一個對象,data.s就是我們找的聯(lián)想詞
        function lyl(data){
            // console.log(data);
            oul.innerHTML="";//清空
            // 數(shù)組遍歷forEach,里面有回調函數(shù)
            data.s.forEach(function(el){
                // console.log(el);
                // 生成li
                var lis = document.createElement("li");
                // li鏈接到的地址<a href='https://www.baidu.com/s?wd=el
                lis.innerHTML = "<a ;
                oul.appendChild(lis);
            })
        }
    </script>

最后附上我代碼里面用到的圖片


baidu.png

OKA獾印!洛勉!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末粘秆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子收毫,更是在濱河造成了極大的恐慌攻走,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牛哺,死亡現(xiàn)場離奇詭異陋气,居然都是意外死亡,警方通過查閱死者的電腦和手機引润,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痒玩,“玉大人淳附,你說我怎么就攤上這事〈拦牛” “怎么了奴曙?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長草讶。 經常有香客問我洽糟,道長,這世上最難降的妖魔是什么堕战? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任坤溃,我火速辦了婚禮,結果婚禮上嘱丢,老公的妹妹穿的比我還像新娘薪介。我一直安慰自己,他們只是感情好越驻,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布汁政。 她就那樣靜靜地躺著道偷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪记劈。 梳的紋絲不亂的頭發(fā)上勺鸦,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音目木,去河邊找鬼换途。 笑死,一個胖子當著我的面吹牛嘶窄,可吹牛的內容都是我干的怀跛。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼柄冲,長吁一口氣:“原來是場噩夢啊……” “哼吻谋!你這毒婦竟也來了?” 一聲冷哼從身側響起现横,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤漓拾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后戒祠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骇两,經...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年姜盈,在試婚紗的時候發(fā)現(xiàn)自己被綠了低千。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡馏颂,死狀恐怖示血,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情救拉,我是刑警寧澤难审,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站亿絮,受9級特大地震影響告喊,放射性物質發(fā)生泄漏。R本人自食惡果不足惜派昧,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一黔姜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧斗锭,春花似錦地淀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽实苞。三九已至,卻和暖如春烈疚,著一層夾襖步出監(jiān)牢的瞬間黔牵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工爷肝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猾浦,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓灯抛,卻偏偏與公主長得像金赦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子对嚼,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,789評論 25 707
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫夹抗、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • Literature Review: from network to manifold The past deca...
    計算士閱讀 498評論 1 0
  • 沒事無聊瞎悲傷,偶爾郁悶社會臟靡砌,經常抱怨負能量已脓,不時感慨毒雞湯。 有次和一個內科大夫聊天通殃,鹿大夫總結了社會上四個字...
    別人家的李小木閱讀 478評論 0 0
  • 回味這段時間的健走(就是步行)度液,用一句很裝的語言形容:我還是蠻喜歡的。雖然每天走的是相同的路段画舌,但日漸靈活的腿腳恨诱,...
    iYufei閱讀 193評論 0 0