动态伸缩搜索框:HTML, CSS, JavaScript的完美结合

简介: 动态伸缩搜索框:HTML, CSS, JavaScript的完美结合


前言

在无尽的互联网世界中,搜索框就像是一扇通向信息宝藏的大门。而今天,我们将要探索的不仅是搜索的便利,更是如何通过HTML、CSS、JavaScript的魔法,让这个搜索框变得动感、时尚、充满交互乐趣。准备好跟着我一起,用代码编织一场搜索之旅!

HTML基础结构

创建搜索框所需的基本HTML结构,包括输入框、按钮等。

<div class="searchForm">
        <div class="searchBarAc">
            <div class="oicon"></div>
            <div class="textInput">
                <input type="text" placeholder="大家都在搜:xxx">
                <div class="clear"></div>
                <button>搜索</button>
            </div>
        </div>
    </div>

CSS样式设计

使用CSS进行样式设计,使搜索框看起来更加美观、吸引人。包括颜色、字体、边框等的设置。

* {
    margin: 0;
    padding: 0;
}
body {
    height: 100vh;
}
.searchForm {
    width: 400px;
    position: relative;
    margin: auto 50%;
    margin-top: 200px;
    left: -200px;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
}
.sediv {
    width: 100%;
    height: 40px;
    margin: 20px 0;
    position: relative;
    border: 1px solid #e3e3e3;
    border-radius: 50px;
    background-color: #f9f9f9;
    display: flex;
}
.sediv form {
    width: 100%;
}
.search_icon {
    position: absolute;
    left: 10px;
    top: 9px;
}
.sediv input {
    border: none;
    background: none;
    height: 40px;
    width: 82%;
    margin-left: 6%;
    line-height: 40px;
    font-size: 16px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: #898989;
}
.sediv .ml10 {
    margin-left: 10%;
    width: 74%;
}
.sediv input:focus {
    outline: none;
    color: #000;
}
.sediv button {
    position: absolute;
    background: none;
    border: none;
    right: 20px;
    top: 9px;
    font-size: 16px;
    color: #000;
    cursor: pointer;
}

动态效果的实现

利用JavaScript,为搜索框增加动态效果,例如鼠标悬停时的变化、焦点状态下的动画等。

<script>
        let $ = tName => {
            return document.querySelector(tName);
        }
        let osearchBarAc = $('.searchBarAc');
        let Oicon = $('.oicon');
        let Oclear = $('.clear');
        let Otext = $('.searchBarAc input');
        Oicon.addEventListener('click', () => {
            osearchBarAc.classList.toggle('changWidth');
        });
        Oclear.addEventListener('click', () => {
            Otext.value = '';
        });
    </script>

进阶交互

进阶交互篇:

1. 搜索建议的下拉列表

在用户输入时,通过JavaScript实现一个下拉列表,展示搜索建议。这可以通过Ajax请求后台数据,或者使用本地的关键词库来实现。当用户输入时,下拉列表动态显示匹配的搜索建议,提高搜索准确性。

2. 输入联想功能

利用JavaScript监听用户的输入,在用户输入的同时,实时展示与输入相关的内容,从而提供输入联想的功能。这可以通过模糊匹配、关键词过滤等方式来实现,为用户提供更加智能的搜索体验。

3. 实时搜索反馈

当用户输入时,通过JavaScript实时更新搜索结果,无需点击搜索按钮即可看到相应的搜索结果。这种实时反馈可以通过监听输入框的input事件来实现,使用户能够更直观地感受到搜索的效果。

4. 动态背景效果

为搜索框添加一些动态的背景效果,例如渐变色、波纹效果等,以增加用户与搜索框交互的趣味性。这可以通过CSS的动画效果或JavaScript的特效库来实现,为搜索框赋予更多生机。

5. 自动完成功能

在用户输入的同时,通过JavaScript实现自动完成功能。当用户输入的内容符合已有的关键词或历史搜索记录时,自动完成输入,减少用户的输入负担,提高搜索的便捷性。

6. 按键快捷操作

为搜索框添加一些按键快捷操作,例如使用快捷键触发搜索、清空输入等功能。这可以通过JavaScript监听键盘事件来实现,提高用户在搜索过程中的操作效率。

7. 输入框图标动效

在输入框内添加一些图标,并为其添加动效,例如在输入时图标缩小,或者在输入完成后图标颜色变化等。这可以通过CSS动画或JavaScript来实现,为搜索框增加一些生动感。

8. 多语言支持

对于全球用户,实现多语言支持是一个进阶的交互考虑。通过JavaScript实现根据用户设备语言设置或用户选择的语言,切换搜索框的语言提示和建议,提供更贴近用户的搜索体验。

这些进阶交互效果可以根据项目的需求逐步引入,提升搜索框的用户体验,使其不仅仅是一个简单的输入框,更是一个智能、富有趣味性的交互组件。

实例

进阶交互实例:

1. 搜索建议的下拉列表

当用户输入关键词时,通过JavaScript异步请求后台,获取匹配的搜索建议,并将其展示在一个下拉列表中。用户可以通过点击或键盘选择其中一项,快速完成搜索。

// JavaScript代码示例
const inputElement = document.getElementById('searchInput');
const suggestionsContainer = document.getElementById('suggestionsContainer');
inputElement.addEventListener('input', async (event) => {
    const keyword = event.target.value;
    
    // 发送异步请求获取搜索建议
    const suggestions = await fetchSuggestionsFromServer(keyword);
    // 更新下拉列表内容
    updateSuggestionsList(suggestions);
});
function updateSuggestionsList(suggestions) {
    // 清空之前的建议
    suggestionsContainer.innerHTML = '';
    // 添加新的建议
    suggestions.forEach((suggestion) => {
        const suggestionItem = document.createElement('div');
        suggestionItem.textContent = suggestion;
        suggestionItem.addEventListener('click', () => {
            inputElement.value = suggestion;
            suggestionsContainer.innerHTML = ''; // 清空建议列表
        });
        suggestionsContainer.appendChild(suggestionItem);
    });
}
2. 输入联想功能

用户在输入时,通过JavaScript实时展示与输入相关的内容,提供输入联想功能。以下示例使用一个静态的关键词库进行演示。

// JavaScript代码示例
const inputElement = document.getElementById('searchInput');
const suggestionList = ['JavaScript', 'HTML', 'CSS', 'React', 'Vue', 'Node.js'];
inputElement.addEventListener('input', (event) => {
    const keyword = event.target.value.toLowerCase();
    
    // 过滤关键词库,找到匹配的关键词
    const matchedSuggestions = suggestionList.filter(suggestion =>
        suggestion.toLowerCase().includes(keyword)
    );
    // 更新下拉列表内容
    updateSuggestionsList(matchedSuggestions);
});
function updateSuggestionsList(suggestions) {
    // 清空之前的建议
    suggestionsContainer.innerHTML = '';
    // 添加新的建议
    suggestions.forEach((suggestion) => {
        const suggestionItem = document.createElement('div');
        suggestionItem.textContent = suggestion;
        suggestionItem.addEventListener('click', () => {
            inputElement.value = suggestion;
            suggestionsContainer.innerHTML = ''; // 清空建议列表
        });
        suggestionsContainer.appendChild(suggestionItem);
    });
}
3. 实时搜索反馈

当用户输入时,通过JavaScript实时更新搜索结果,无需点击搜索按钮即可看到相应的搜索结果。以下示例通过模拟异步请求实现实时搜索反馈。

// JavaScript代码示例
const inputElement = document.getElementById('searchInput');
const searchResultsContainer = document.getElementById('searchResultsContainer');
inputElement.addEventListener('input', async (event) => {
    const keyword = event.target.value;
    // 模拟异步请求搜索结果
    const searchResults = await simulateSearch(keyword);
    // 更新搜索结果
    updateSearchResults(searchResults);
});
function updateSearchResults(results) {
    // 清空之前的搜索结果
    searchResultsContainer.innerHTML = '';
    // 添加新的搜索结果
    results.forEach((result) => {
        const resultItem = document.createElement('div');
        resultItem.textContent = result;
        searchResultsContainer.appendChild(resultItem);
    });
}

这些实例展示了如何通过JavaScript为搜索框添加进阶交互效果,提升用户体验,使搜索更加智能、灵活。在实际项目中,可以根据需求选择性地引入这些功能。

响应式设计

响应式设计:

响应式设计是一种可以适应不同设备和屏幕尺寸的网页设计方法,使网页在各种终端上都能提供良好的用户体验。以下是一个基于HTML、CSS、JavaScript的动态伸缩搜索框的响应式设计实例。

1. 使用Viewport单位设置宽度

使用Viewport单位(如vw)设置搜索框的宽度,以相对于视口宽度的百分比方式确定宽度,从而使其在不同屏幕尺寸下保持一定比例。

/* CSS代码示例 */
#searchInput {
    width: 70vw; /* 使用70%的视口宽度 */
}
2. 媒体查询调整样式

使用媒体查询(Media Query)根据不同设备或屏幕尺寸应用不同的样式,以确保在小屏幕设备上有更好的可视性和用户体验。

/* CSS代码示例 */
@media screen and (max-width: 600px) {
    #searchInput {
        width: 90vw; /* 在小屏幕设备上使用90%的视口宽度 */
    }
}
3. 移动端适配

通过JavaScript监听屏幕旋转事件,动态调整搜索框的样式,以适应横屏和竖屏状态的变化。

// JavaScript代码示例
window.addEventListener('orientationchange', () => {
    adjustSearchBoxStyle();
});
function adjustSearchBoxStyle() {
    const isPortrait = window.matchMedia("(orientation: portrait)").matches;
    if (isPortrait) {
        // 在竖屏状态下的样式调整
        // ...
    } else {
        // 在横屏状态下的样式调整
        // ...
    }
}
4. Flex布局优化

使用Flex布局使搜索框在不同屏幕尺寸下保持良好的排列,确保在移动端和桌面端都有合适的显示。

/* CSS代码示例 */
#searchContainer {
    display: flex;
    justify-content: center;
    align-items: center;
}
5. 隐藏不必要元素

通过媒体查询或JavaScript,根据屏幕尺寸隐藏不必要的元素,以减少页面复杂度,提升用户体验。

/* CSS代码示例 */
@media screen and (max-width: 600px) {
    #extraContent {
        display: none; /* 在小屏幕设备上隐藏不必要的元素 */
    }
}

以上是一个简单的响应式设计实例,通过使用视口单位、媒体查询、JavaScript事件监听和Flex布局等技术,可以使动态伸缩搜索框在各种设备和屏幕上都能够适应,并提供良好的用户体验。在实际项目中,根据需求可以进一步扩展和优化响应式设计。

优化与封装

优化与封装:

在开发动态伸缩搜索框时,优化和封装是确保代码可维护性和性能的重要步骤。以下是一些关于优化和封装的建议。

1. 代码优化
  • 精简CSS样式: 移除不必要的样式,保持代码简洁。
  • 合并和压缩文件: 在生产环境中,将多个CSS和JavaScript文件合并,并进行压缩,以减少文件大小,提高加载速度。
  • 使用CDN: 使用内容分发网络(CDN)来加速静态资源的加载。
2. 性能优化
  • 懒加载: 对于一些不是首次展示就必须加载的内容,使用懒加载技术,按需加载。
  • 图片优化: 使用适当大小和格式的图片,并考虑使用图像压缩工具。
  • 减少HTTP请求: 尽量减少页面上的HTTP请求,合并文件,使用CSS sprites。
3. 模块化和组件化
  • 封装功能组件: 将搜索框的不同功能(如搜索建议、动态效果等)封装成独立的组件,以便在不同项目中复用。
  • 模块化CSS: 使用模块化的CSS,避免全局样式的污染。
4. 错误处理和兼容性
  • 错误处理: 添加适当的错误处理机制,避免因意外错误导致整个搜索框功能失效。
  • 浏览器兼容性: 针对不同浏览器进行测试,并考虑使用polyfills或其他工具解决兼容性问题。
5. 注释和文档
  • 添加注释: 在代码中添加清晰的注释,解释关键功能和逻辑。
  • 文档化: 提供代码文档,以便其他开发者理解和使用你的代码。
6. 封装为库或插件
  • 封装为库: 如果搜索框具有通用性,考虑将其封装为一个独立的库,方便其他开发者使用。
  • 发布到NPM: 如果是JavaScript库,可以考虑将其发布到NPM供全球开发者使用。
7. 响应式设计考虑
  • 移动端优化: 确保在移动端设备上具有良好的用户体验,包括触摸事件的支持和布局的适配。

通过上述优化和封装的步骤,你可以提高代码的可维护性,优化性能,并为其他开发者提供更方便的使用体验。这也有助于将你的搜索框功能更好地集成到各种项目中。

总结

在制作这个案例的时候,用到的快捷在线生成网站:

css阴影效果在线生成:https://box-shadow.dev/

在实现动态伸缩搜索框时,需要结合HTML、CSS和JavaScript等技术,通过合理的结构和样式设置以及交互事件的处理,实现搜索框的动态调整功能。动态伸缩搜索框的实现涉及到多个方面,包括搜索框的HTML结构、CSS样式设置、JavaScript的监听和处理等。通过对这些方面的综合应用,可以开发出具有良好用户体验的动态伸缩搜索框。

通过这篇博客,您将学到如何通过HTML、CSS、JavaScript创建一个动感的搜索框,并掌握一些实用的设计和交互技巧,为网站增色不少。

目录
相关文章
|
6月前
|
移动开发 前端开发 JavaScript
征信报告修改器,征信报告生成器,制作软件无痕修改软件【js+html+css】
本项目为信用评分模拟器教学工具,采用HTML5实现,仅供学习参考。核心功能通过JavaScript构建,包含虚拟数据生成、权重分配及信用因素分析(如还款记录、信用使用率等)。
|
6月前
|
前端开发 JavaScript
个人征信电子版无痕修改, 个人信用报告pdf修改,js+html+css即可实现【仅供学习用途】
本代码展示了一个信用知识学习系统的前端实现,包含评分计算、因素分析和建议生成功能。所有数据均为模拟生成
|
5月前
|
开发框架 JavaScript 前端开发
精选HTML、JavaScript、ASP代码片段集锦
这些代码片段代表了HTML, JavaScript和ASP的基本应用,可被集成到更复杂的项目中。它们注重实用性,并且易于理解,旨在帮助开发者快速开始项目构建或进行学习。尽管ASP不如其他服务器端技术(如Node.js, PHP, Ruby等)现代,但它在遗留系统中仍非常普遍,了解基础仍具有价值。
186 14
|
6月前
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
6月前
|
前端开发
个人征信PDF无痕修改软件,个人征信模板可编辑,个人征信报告p图神器【js+html+css仅供学习用途】
这是一款信用知识学习系统,旨在帮助用户了解征信基本概念、信用评分计算原理及信用行为影响。系统通过模拟数据生成信用报告,涵盖还款记录
|
6月前
|
前端开发 JavaScript 容器
制作b超单生成器, 假怀孕b超单图片制作, p图医院证明【css+html+js装逼恶搞神器】
本资源提供一个适合用于熟人之间恶搞的工具,效果逼真,仅供学习参考与娱乐。包含前端技术学习要点:语义化布局、响应式设计、Flexbox、图片自适应
|
6月前
|
前端开发
医院检查单子p图软件,在线制作仿真病历,js+css+html装逼神器
本示例展示如何用HTML/CSS创建医疗信息页面,内容仅供学习参考。页面模拟“阳光医院体检中心”场景,提供预约功能验证(如姓名、手机号、日期)。所有数据仅用于演示
|
Web App开发 安全 JavaScript
|
JavaScript 前端开发

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    235
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    225
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    164
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    133
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    275
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    408
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    176
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    112
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    190
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    261