vue2.0蜗侈,jsonp仿百度搜索頁(yè)面篷牌,請(qǐng)求百度數(shù)據(jù)

看了那么多別人的東西,是覺(jué)得自己也該貢獻(xiàn)點(diǎn)什么踏幻!
簡(jiǎn)單的調(diào)用百度搜索框的方法我就不說(shuō)了枷颊,下面給大家詳細(xì)講一下用vue、vue-resource請(qǐng)求百度搜索的數(shù)據(jù)簡(jiǎn)單的仿百度首頁(yè)...


訪問(wèn)地址:http://www.lzsfe.cn/project/baidu 该面,最近用Vue寫了一個(gè)簡(jiǎn)單的個(gè)稅計(jì)算器夭苗,喜歡的可以看看 https://www.lzsfe.cn

1 頁(yè)面搭建

首先,我們先把頁(yè)面寫好隔缀,具體的html+css就不講解了

注意:引用vue题造、vue-resource,可以下載到本地引用,也可以直接引用cndjs官網(wǎng)上的猾瘸,當(dāng)然也可以使用npm下載安裝

<body>
    <div class="searchBox" id="app">
        <div class="search-wrapper">
            <input class="searchInput" type="text">
            <button>百度一下</button>
        </div>
        <ul>
            <li>這里是數(shù)據(jù)列表</li>
        </ul>
        <p>暫無(wú)數(shù)據(jù)...</p>
    </div>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-resource/1.3.4/vue-resource.min.js"></script>
</html>

2 實(shí)例化vue

簡(jiǎn)單的實(shí)例化一個(gè)vue晌梨,然后el就直接綁定到#app上面就是了,這里有個(gè)坑:不能綁定在body或者h(yuǎn)tml上须妻,否則會(huì)沒(méi)效果仔蝌,就綁定body里面的一個(gè)div上就好了。

data里面用到兩個(gè)數(shù)據(jù)荒吏,一個(gè)searchList用來(lái)存儲(chǔ)百度搜索請(qǐng)求來(lái)的數(shù)據(jù)敛惊,一個(gè)t1用來(lái)雙向綁定輸入框里面的內(nèi)容,我們將數(shù)據(jù)也渲染到頁(yè)面上绰更,當(dāng)然要通過(guò)輸入值調(diào)用get方法獲取百度數(shù)據(jù)瞧挤,接著往下看...

<body>
    <div class="searchBox" id="app">
        <div class="search-wrapper">
            <input class="searchInput" type="text" v-model="t1" @keyup="get">
            <button>百度一下</button>
        </div>
        <ul>
            <li v-for="value in searchList">{{value}}</li>
        </ul>
        <p v-show="searchList.length == 0">暫無(wú)數(shù)據(jù)...</p>
    </div>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-resource/1.3.4/vue-resource.min.js"></script>
<script>
  new Vue({
    el: "#app",
    data: {
      searchList: [
![`G]W$@HOKPLJBZ]T~K05}`G.png](http://upload-images.jianshu.io/upload_images/6756377-a56aeb2b447f2a4c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/600)
],
      t1: ''
    },
    methods: {
      get: function() {
        
      }
    }
  })
</script>
</html>

3 獲取百度數(shù)據(jù)

通過(guò)http跨域請(qǐng)求百度搜索數(shù)據(jù)锡宋,再賦給之前我們data數(shù)據(jù)里面的searchList渲染到頁(yè)面,這樣當(dāng)輸入一個(gè)值的時(shí)候就會(huì)跟新下面彈出的列表了,附上效果圖

這里百度請(qǐng)求的路徑可以在百度首頁(yè)f12調(diào)試特恬,點(diǎn)擊Network执俩,復(fù)制請(qǐng)求路徑然后進(jìn)行刪減后:https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su

methods: {
      get: function() {
        this.$http.jsonp("https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su",{//跨域請(qǐng)求數(shù)據(jù)
            params: {
                wd: this.t1//輸入的關(guān)鍵詞
            },
            jsonp: 'cb'//這里是callback
        }).then((res) => {//請(qǐng)求成功回調(diào),請(qǐng)求來(lái)的數(shù)據(jù)賦給searchList數(shù)組
            this.searchList = res.body.s
        },(res) => {//失敗顯示狀態(tài)碼
            alert(res.status)
        })
      }
    }
輸入a效果圖

3 實(shí)現(xiàn)按上下鍵選擇搜索內(nèi)容

很顯然給輸入框添加按上下鍵的事件keydown.downkeydown.up癌刽,我們現(xiàn)在添加一個(gè)數(shù)據(jù)now用來(lái)保存當(dāng)前所選中的值役首,按上鍵now值++反之則--;再給選擇項(xiàng)添加.active類使其背景變成灰色显拜,當(dāng)v-for循環(huán)的索引值index==當(dāng)前now值就給這個(gè)列表項(xiàng)加上類名active(灰色背景標(biāo)記)衡奥。

此處有幾個(gè)需要注意的地方:
1. 按上鍵的時(shí)候光標(biāo)會(huì)移動(dòng)到輸入值的前面,這是默認(rèn)事件導(dǎo)致的远荠,所以要在keydown.up后面加上.prevent清除默認(rèn)事件
2. 上下選擇的時(shí)候選中的值肯定是要賦給輸入框的值的矮固,但是每次按上下鍵的時(shí)候又會(huì)觸發(fā)之前的keyup事件,所以這里要判斷按下的鍵是不是上下鍵keyup="get($event)" 譬淳,if(ev.keyCode == 38 || ev.keyCode == 40 )return档址;

<body>
    <div class="searchBox" id="app">
        <div class="search-wrapper">
            <input class="searchInput" type="text" v-model="t1" @keyup="get($event)" @keydown.down="next" @keydown.up.prevent="last">>
            <button>百度一下</button>
        </div>
        <ul>
            <li v-for="(value, index) in searchList" :class="{active: index == now}">{{value}}</li>
        </ul>
        <!-- <p v-show="searchList.length == 0">暫無(wú)數(shù)據(jù)...</p> -->
    </div>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-resource/1.3.4/vue-resource.min.js"></script>
<script>
  new Vue({
    el: "#app",
    data: {
      searchList: [],//搜索彈出列表
      t1: '',//輸入框里面的值
      now: -1//輸入框里面的值的索引,0為列表第一項(xiàng)
    },
    methods: {
      get: function(evt) {
        if(evt.keyCode == 38 || evt.keyCode == 40) return
        this.$http.jsonp("https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su",{//跨域請(qǐng)求數(shù)據(jù)
            params: {
                wd: this.t1//輸入的關(guān)鍵詞
            },
            jsonp: 'cb'//這里是callback
        }).then((res) => {//請(qǐng)求成功回調(diào)邻梆,請(qǐng)求來(lái)的數(shù)據(jù)賦給searchList數(shù)組
            this.searchList = res.body.s
        },(res) => {//失敗顯示狀態(tài)碼
            alert(res.status)
        })
      },
      next: function() {//向下選擇
        this.now ++
        if(this.now == this.searchList.length){//判斷是否超出
          this.now = 0
        }
        this.t1 = this.searchList[this.now]
      },
      last: function() {//向上選擇
        this.now --
        if(this.now < 0){
          this.now = this.searchList.length -1
        }
        this.t1 = this.searchList[this.now]
      }
    }
  })
</script>
</html>

4 最后一步 回車實(shí)現(xiàn)搜索

也就是判斷當(dāng)按下的鍵為enter的時(shí)候跳轉(zhuǎn)到搜索頁(yè)keyCode == 13辰晕,鍵碼值(keyCode)可以百度一下。

百度搜索頁(yè)面的地址也是同上确虱,搜索之后f12—>Network—>js復(fù)制地址含友,刪減之后變成 https://www.baidu.com/s?wd="搜索值", 再用window.open()跳轉(zhuǎn)

if (evt.keyCode == 13) {
    window.open('https://wwww.baidu.com/s?wd=' + this.t1)
    this.t1 = ''
}

5 附加 鼠標(biāo)點(diǎn)擊選擇跳轉(zhuǎn)

li添加一個(gè)鼠標(biāo)點(diǎn)擊事件點(diǎn)擊相應(yīng)的li獲取其索引index賦給now同時(shí)將對(duì)應(yīng)的值賦給t1再跳轉(zhuǎn)

searchLink: function(index) {//鼠標(biāo)點(diǎn)擊跳轉(zhuǎn)
        this.t1 = this.searchList[index]
        this.now = index
        window.open('https://www.baidu.com/s?wd=' + this.t1)
        this.t1 = ''
      }

最后給上效果訪問(wèn)地址:http://www.lzsfe.cn/project/baidu 校辩,最近用Vue寫了一個(gè)簡(jiǎn)單的個(gè)稅計(jì)算器窘问,喜歡的可以看看 https://www.lzsfe.cn

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宜咒,隨后出現(xiàn)的幾起案子惠赫,更是在濱河造成了極大的恐慌,老刑警劉巖故黑,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件儿咱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡场晶,警方通過(guò)查閱死者的電腦和手機(jī)混埠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)诗轻,“玉大人钳宪,你說(shuō)我怎么就攤上這事。” “怎么了吏颖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵搔体,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我半醉,道長(zhǎng)疚俱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任缩多,我火速辦了婚禮呆奕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瞧壮。我一直安慰自己,他們只是感情好匙握,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布咆槽。 她就那樣靜靜地躺著,像睡著了一般圈纺。 火紅的嫁衣襯著肌膚如雪秦忿。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天蛾娶,我揣著相機(jī)與錄音灯谣,去河邊找鬼。 笑死蛔琅,一個(gè)胖子當(dāng)著我的面吹牛胎许,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罗售,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼辜窑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了寨躁?” 一聲冷哼從身側(cè)響起穆碎,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎职恳,沒(méi)想到半個(gè)月后所禀,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡放钦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年色徘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片操禀。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贺氓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辙培,我是刑警寧澤蔑水,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站扬蕊,受9級(jí)特大地震影響搀别,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尾抑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一歇父、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧再愈,春花似錦榜苫、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至抗悍,卻和暖如春驹饺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缴渊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工赏壹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衔沼。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓蝌借,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親指蚁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子骨望,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容