vue实现百度搜索历史下拉框

在这里插入图片描述

<template>
    <div class="for-search">
        <div>
            <el-input placeholder="请输入搜索内容"
                      v-model="searchWord"
                      ref="searchInput"
                      @click.native="searchClick"
                      class="searchInput"
                      @blur="blurSearch"
                      @keydown.down.native="selectLiItem"
                      @keydown.up.native="selectLiItemUp"
                      @keydown.enter.native="doSearch">

            </el-input>
            <el-button icon="el-icon-search" class="key-search" @click ="doSearch" type="primary"></el-button>
        </div>
        <div class="searchHistory" v-show="historyFlag">
            <ul ref="searchUl">
                <li class="searchLi"
                v-for="(item,index) in searchTop(searchArr)"
                :key="index"
                    @click="clickLi($event)"
                :class="{active:index === isActive}">
                    {{item}}
                </li>

                <div class="search-closeHis">
                    <span class="search-clearStore" @mousedown= downDrag($event) @click="clearHistory">删除历史</span>
                </div>
            </ul>
        </div>

    </div>
</template>

<script>
    export default {
        name: "search",
        data(){
            return{
                historyFlag:false,
                searchFlag:true,
                searchWord:"",
                searchArr:[],
                isActive:-1,
                serachHistoryArr:[]
            }
        },
        methods:{
            //搜索
            doSearch(){
                //
              //  this.searchArr = ['hello','word'];
                //this.searchArr = Object.assign([],this.store.getters['search/searchArrs']);//从缓存中获取搜索历史
                if(this.searchWord.length>0){
                    //this.searchFlag = false;
                    this.$refs.searchInput.blur()//按回车时 或点击时 要失去焦点
                    let index = this.searchArr.indexOf(this.searchWord)
                    index !== -1 ? this.searchArr.splice(index,1):'';
                }else{
                    this.searchFlag = true;
                }
                //
                this.searchWord.length >0 ? this.searchArr.unshift(this.searchWord):'';
                //this.$store.commit("search/SET_SEARCH_HISTORY",this.searchArr)
            },
            //按键盘下键
            selectLiItem(){
                let lis = this.$refs.searchUl.getElementsByTagName('li');
                this.isActive === this.searchArr.length -1 ? this.isActive = -1 : this.isActive ++;
                this.isActive >= 8 ? this.isActive = -1 :'';
                this.isActive !== -1 ? this.searchWord = lis[this.isActive].innerHTML : this.searchWord = "";
            },
            //按键盘上键
            selectLiItemUp(){
                if(this.isActive <= -1 && this.searchArr.length>8){
                    this.isActive =8
                }else if(this.isActive <= -1 && this.searchArr.length > 0){
                    this.isActive = this.searchArr.length
                }
                this.isActive --;
                let lis = this.$refs.searchUl.getElementsByTagName('li')
                this.isActive !== -1 ? this.searchWord = lis[this.isActive].innerHTML : this.searchWord="";
            },
            //输入框点击时
            searchClick(){
                this.searchArr.length >0 ? this.historyFlag = true : this.historyFlag =false;
            },
            blurSearch(){
               this.historyFlag=false
            },
            //点击li执行的函数
            clickLi(el){
                this.searchWord  =el.currentTarget.innerHTML;
                this.historyFlag = false
            },
            downDrag(el){
                el.preventDefault();//阻止input失去焦点事件时的影响
            },
            searchTop(arr){
                if(arr.length>0){
                    return arr.slice(0,8)
                }
            },
            clearHistory(){
                this.searchArr = [];
                //this.$store.commit("search/SET_SEARCH_HISTORY",this.searchArr);
                this.historyFlag = false;
            }




        }
    }
</script>

<style scoped lang="stylus">
    .for-search{
        width 600px;
        .searchInput{
            width 440px;
        }
        .searchHistory{
            height auto;
            position absolute
            z-index 3
            margin-left: 54px;
            border 1px solid #dcdfe6
            width 440px;
            ul{
                list-style-type:none
               /* border 1px solid red*/
            }

            .searchLi{
                color #409EFF
                font 14px;
                line-height 22px;
                /*padding 0 0 0 15px;*/
                position relative;
                cursor default;
               /* border 1px solid red*/
                text-align: left;
                margin-left: -40px;
            }
            .searchLi:hover{
                background darkgray
            }
            .search-closeHis{
                text-align:right;
                color:#666
                height 25px
                line-height 25px

                .search-clearStore{
                    margin-right 10px;
                    text-decoration underline
                    cursor pointer
                    font-size 14px
                }
            }
        }

    }

</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值