吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1496|回复: 2
收起左侧

[其他转载] 利用jsonp获取百度接口实现百度智能提示搜索框

  [复制链接]
J.Wong 发表于 2021-11-23 19:46
本帖最后由 J.Wong 于 2021-11-23 19:47 编辑

[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>
    <style>
        * {
            margin: 0px;
            padding: 0px;
        }

        .searchBox {
            box-sizing: border-box;
            width: 600px;
            height: 400px;
            position: fixed;
            left: 50%;
            top: 50%;
            margin-top: -200px;
            margin-left: -250px;
        }

        .searchBox .search {
            box-sizing: border-box;
            width: 500px;
            height: 40px;
            line-height: 40px;
            outline-style: none;
            border-radius: 6px 0px 0px 6px;
            border: 2px solid #4569ff;
            padding-left: 10px;
        }

        .searchBtn {
            box-sizing: border-box;
            width: 100px;
            height: 40px;
            line-height: 40px;
            text-align: center;
            background: #4569ff;
            position: absolute;
            top: 0px;
            right: 0px;
            color: #fff;
            border-radius: 0px 6px 6px 0px;
            cursor: grab;
        }

        .searchBox .oninput {
            box-sizing: border-box;
            width: 500px;
            height: 40px;
            line-height: 40px;
            outline-style: none;
            border-radius: 6px 0px 0px 0px;
            border: 2px solid #4569ff;
            border-bottom: 0px;
            padding-left: 10px;
        }

        .searchBox .tips {
            display: none;
        }

        .searchBox .tipsShow {
            display: block;
            box-sizing: border-box;
            width: 500px;
            border-left: 2px solid #4569ff;
            border-right: 2px solid #4569ff;
            border-bottom: 2px solid #4569ff;
            border-radius: 0px 0px 6px 6px;
            margin-top: -5px;
            padding: 10px 0px;
        }

        .tipsShow::after {
            content: '';
            display: block;
            position: absolute;
            top: 40px;
            left: 10px;
            width: 480px;
            height: 1px;
            background: #ccc;
        }

        ul li {
            list-style: none;
            height: 30px;
            line-height: 30px;
            margin-top: 5px;
            padding-left: 10px;
        }

        ul li a {
            text-decoration: none;
            color: #000;
        }
    </style>
</head>
<body>
    <div class="searchBox">
        <input type="text" id="search" class="search">
        <div id="searchBtn" class="searchBtn">百度一下</div>
        <ul id="tips" class="tips">
        </ul>
    </div>

    <script src="/js/template-web.js"></script>
    <script type='text/html' id="tpl">
        {{each resault}}
        <li><a href=https://www.baidu.com/s?wd={{$value.q}}>{{$value.q}}</a></li> 
      {{/each}}
    </script>
    <script>
        var search = document.getElementById('search');
        var ullist = document.getElementById('tips');
        var searchBtn = document.getElementById('searchBtn');
        console.log(searchBtn);
        searchBtn.onclick = () => {
            window.location = 'https://www.baidu.com/s?wd=' + search.value
        }

        function jsonp(options) {
            var funName = options.reqStr.funnameStr + (+new Date());
            window[funName] = options.successs;
            var params = '';
            for (const arr in options.data) {
                params += '&' + arr + '=' + options.data[arr]
            }
            var getUrl = options.url + params + '&' + options.reqStr.callbackname + '=' + funName;
            var script = document.createElement('script');
            script.src = getUrl;
            document.body.appendChild(script);
            script.onload = () => {
                document.body.removeChild(script);
            }
        }
        search.addEventListener('input', () => {
            var searchValue = search.value;
            if (searchValue.trim() == '') {
                search.className = 'search';
                ullist.className = 'tips'
                return
            } else {
                jsonp({
                    url: 'https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=35262,35105,35049,34584,34505,34532,35246,34606,26350,35147' +
                        searchValue,
                    reqStr: {
                        callbackname: 'cb',
                        funnameStr: 'jQuery',
                    },
                    data: {
                        wd: searchValue,
                    },
                    successs: (data) => {
                        var html = template('tpl', {
                            resault: data.g
                        });
                        ullist.innerHTML = html;
                        ullist.className = 'tipsShow';
                        search.className = 'oninput';
                    }
                });
            }

        })
    </script>
</body>
</html>


说明:使用代码前需要自行引入art-template模版引擎。

小弟目前刚学AJax+jsopn,自己摸索做了一个小案例,主要调用百度接口实现百度搜索框智能提示
但发现一个小问题无法解决:
在搜索框输入内容后,如果依次删除搜索框里的内容直到搜索框为空,下面的智能提示框会消失
如果用键盘上的backspace键一直按着不放删除内容直到搜索框内容为空,下面的提示框不会消失,这个不知道怎么解决?
大佬能指教下不?另外代码还有没有啥可优化的地方?不胜感激!

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

东方星雨 发表于 2021-11-24 08:39
补充一下template-web.js的下载地址
下载地址:https://pan.baidu.com/s/1duHf6U4prEnbMXVO9JC-mQ  密码:2tgp
1983 发表于 2021-12-22 03:28
本帖最后由 1983 于 2021-12-22 03:34 编辑

楼主你解决"下面的提示框不会消失了吗?

个人觉得可以加个简单键盘事件
[Asm] 纯文本查看 复制代码
if (searchValue.trim() == '') {
    search.className = 'search';
    ullist.className = 'tips';
    document.onkeydown=function(event){
                  var e = event || window.event || arguments.callee.caller.arguments[0];
                  if(e && e.keyCode==8 && searchValue.trim() == ''){
                    ullist.className = 'tips';
                   }
                  if(e && e.keyCode==46 && searchValue.trim() == ''){
                     ullist.className = 'tips';
                   }      
        };
    return
}


还有 onkeyup、鼠标离开、点击、聚集事件都差不多

QQ拼音截图20211222033347.jpg

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表