附录5-淘宝搜索案例

效果是这样的,用JSONP拿到淘宝的搜索建议然后展示出来

目录

1  静态页面

2  JS

2.1  防抖

2.2  缓存建议信息


 

1  静态页面

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="initialization.css">
    <link rel="stylesheet" href="index.css">
</head>
<body>
    <img src="image/logo.png" alt="">
    <section class="search">
        <div class="search_head">
            <span class="search_head_activate">宝贝</span>
            <span>店铺</span>
        </div>
        <div class="search_content">
            <input type="text">
            <button>搜&nbsp&nbsp&nbsp&nbsp索</button>
        </div>
        <div class="search_suggest">
            <!-- <div class="search_suggest_activate">阿迪达斯</div>
            <div>阿迪达斯</div>
            <div>阿迪达斯</div>
            <div>阿迪达斯</div>
            <div>阿迪达斯</div>
            <div>阿迪达斯</div>
            <div>阿迪达斯</div>
            <div>阿迪达斯</div>
            <div>阿迪达斯</div>
            <div>阿迪达斯</div> -->
        </div>
    </section>
</body>
<script src="../../../../jquery-3.6.1.min.js"></script>
<script src="index.js"></script>
</html>

css

img {
    display: block;
    margin:50px auto;
}
section {
    width:70%;
    margin:0 auto;
    .search_head {
        span {
            padding:2px 10px;
            font-size:12px;
        }
        .search_head_activate {
            background-color: rgb(254,87,1);
            color:white;
        }
    }
    .search_content {
        display: flex;
        input {
            width:80%;
            padding:5px;
            border:3px solid rgb(254,87,1);
            outline: none;
        }
        button {
            width:20%;
            margin-left:0px;
            border:1px solid transparent;
            color:white;
            background-color: rgb(254,87,1);
        }
    }
    .search_suggest {
        display: none;
        width:79.7%;
        border:1px solid gray;
        div {
            padding:5px;
            cursor:pointer;
        }
        .search_suggest_activate {
            background-color: rgb(237,239,237);
        }
    }
}

2  JS

自己写代码的时候先将思路写下来,像是防抖,缓存这些东西,先跑通之后再加

timer = null
cacheObj = {}

function create_suggest(keywords) {
    if (cacheObj[keywords]) {
        $('.search_suggest').empty()
        $('.search_suggest').show()
        result = cacheObj[keywords]
        for (i in result) {
            console.log(result[i][0])
            $('.search_suggest').append('<div>'+result[i][0]+'</div>')
        }
    }

    else {
        $.ajax({
            url:'https://suggest.taobao.com/sug?q=' + keywords,
            dataType:'jsonp',
            success:function(res) {
                $('.search_suggest').empty()
                $('.search_suggest').show()
                result = res.result
                for (i in result) {
                    console.log(result[i][0])
                    $('.search_suggest').append('<div>'+result[i][0]+'</div>')
                }
    
                cacheObj[keywords] = result
            }
        })
    }
}

$('input').on('keyup',function() {
    clearTimeout(timer)
    keywords = $(this).val()
    if (keywords == '') {
        $('.search_suggest').hide()
    }
    else {
        timer = setTimeout(function() {create_suggest(keywords)},500)
    }
})

$('.search_suggest').on('mouseover','div',function() {
    $(this).addClass('search_suggest_activate').siblings().removeClass('search_suggest_activate')
})

像是请求,添加元素这些我们之前都用过就不进行介绍了,首先介绍防抖

2.1  防抖

首先搞一个定时器变量timer定义为null,目的是占住这个变量不让他因为undefined报错

之后在keyup事件中的开始都会消除timer计时器,在keyup事件的最后都会定义一个计时器。这样就会导致如果连续的触发keyup事件,上一个keyup的定时器就会被干掉,如果在500ms内不再次触发keyup,才会执行create_suggest(),这样可以减少一部分请求量,缓解服务器的压力

减小请求量的代价是增加了客户端的一些计算量,在部分情况下还是权衡一下是否加入防抖

2.2  缓存建议信息

缓存的目的也是为了减少请求量,如果用户之前输入过相同的keywords,那么就不要再请求了,直接用cacheObj变量里的信息就可以了

减轻服务端的代价同样是增加了客户端的压力,部分情况下需要考虑一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值