当前位置:首页 > JavaScript

js实现仿百度

2026-03-01 21:35:15JavaScript

实现仿百度搜索功能

使用JavaScript实现一个仿百度的搜索功能,需要结合前端交互、API调用和结果展示。以下是关键步骤:

搜索框与自动补全

创建HTML搜索框结构,监听用户输入实现自动补全:

<input type="text" id="search-input" placeholder="输入搜索关键词">
<div id="suggestions-container"></div>
const searchInput = document.getElementById('search-input');
const suggestionsContainer = document.getElementById('suggestions-container');

searchInput.addEventListener('input', async (e) => {
    const query = e.target.value.trim();
    if (query.length > 0) {
        const suggestions = await fetchSuggestions(query);
        renderSuggestions(suggestions);
    } else {
        suggestionsContainer.innerHTML = '';
    }
});

async function fetchSuggestions(query) {
    // 实际项目中替换为真实API端点
    const response = await fetch(`/api/suggest?q=${encodeURIComponent(query)}`);
    return await response.json();
}

function renderSuggestions(items) {
    suggestionsContainer.innerHTML = items.map(item => 
        `<div class="suggestion-item">${item}</div>`
    ).join('');
}

搜索结果展示

获取搜索结果并渲染到页面:

js实现仿百度

document.getElementById('search-form').addEventListener('submit', async (e) => {
    e.preventDefault();
    const query = searchInput.value.trim();
    if (query) {
        const results = await fetchSearchResults(query);
        renderSearchResults(results);
    }
});

async function fetchSearchResults(query) {
    // 使用真实搜索API替换
    const response = await fetch(`/api/search?q=${encodeURIComponent(query)}`);
    return await response.json();
}

function renderSearchResults(results) {
    const resultsContainer = document.getElementById('results-container');
    resultsContainer.innerHTML = results.map(result => `
        <div class="result-item">
            <h3><a href="${result.url}">${result.title}</a></h3>
            <p class="url">${result.displayUrl}</p>
            <p class="description">${result.snippet}</p>
        </div>
    `).join('');
}

分页功能实现

添加分页控制逻辑:

let currentPage = 1;

async function loadPage(page) {
    const query = searchInput.value.trim();
    const results = await fetch(`/api/search?q=${query}&page=${page}`);
    renderSearchResults(results);
    currentPage = page;
    updatePaginationUI();
}

function updatePaginationUI() {
    document.getElementById('current-page').textContent = currentPage;
}

样式设计要点

CSS样式参考百度风格:

js实现仿百度

#search-input {
    width: 500px;
    height: 40px;
    padding: 0 10px;
    border: 1px solid #ccc;
    border-radius: 20px;
    outline: none;
}

.suggestion-item {
    padding: 8px 15px;
    cursor: pointer;
}

.result-item {
    margin: 20px 0;
    max-width: 600px;
}

.result-item h3 a {
    color: #1a0dab;
    text-decoration: none;
}

.result-item .url {
    color: #006621;
    font-size: 14px;
}

后端API对接

Node.js示例路由处理:

const express = require('express');
const app = express();

app.get('/api/search', async (req, res) => {
    const { q, page = 1 } = req.query;
    // 这里可以接入真实搜索引擎API或数据库查询
    const results = await searchDatabase(q, page);
    res.json(results);
});

app.listen(3000, () => console.log('Server running'));

性能优化建议

实现防抖减少API请求频率:

let debounceTimer;
searchInput.addEventListener('input', (e) => {
    clearTimeout(debounceTimer);
    debounceTimer = setTimeout(() => {
        const query = e.target.value.trim();
        if (query) fetchSuggestions(query);
    }, 300);
});

缓存搜索结果减少重复请求:

const searchCache = {};

async function fetchSearchResults(query) {
    if (searchCache[query]) return searchCache[query];

    const response = await fetch(`/api/search?q=${query}`);
    const results = await response.json();
    searchCache[query] = results;
    return results;
}

以上代码实现了一个基础仿百度搜索功能,包含自动补全、结果展示和分页等核心特性。实际项目中需要根据具体需求调整API接口和样式设计。

标签: js
分享给朋友:

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…