JS实用案例之输入智能提示(打字机输出效果)

下面是对“JS实用案例之输入智能提示(打字机输出效果)”进行详细讲解的完整攻略。

1. 概述

“JS实用案例之输入智能提示(打字机输出效果)”是一个JS实用案例,它通过在用户输入时展示智能提示等方法,提高了网站的用户交互体验。本文将介绍该案例的详细实现方法。

2. 技术要点

  • JavaScript
  • HTML
  • CSS

3. 实现过程

3.1. 编写HTML和CSS

首先,在HTML中添加一个输入框和一个用于展示智能提示的ul标签:

<input type="text" id="keyword" placeholder="请输入搜索关键词...">
<ul id="search-suggest"></ul>

然后,在CSS中对ul标签进行一些样式调整:

#search-suggest {
  border: 1px solid #ccc;
  padding: 0;
  margin: 0;
  background-color: #fff;
  list-style: none;
  position: absolute;
  left: 0;
  top: 34px;
  width: 300px;
  max-height: 150px;
  overflow-y: auto;
  z-index: 100;
  display: none;
}

#search-suggest li {
  padding: 10px;
  cursor: pointer;
}

#search-suggest li:hover {
  background-color: #f5f5f5;
}

3.2. 实现智能提示

接下来,我们需要实现输入框的智能提示功能。输入框在每次输入的时候,都会触发keydown事件,在事件处理函数中,我们监听按键的值,如果是拉丁字母或输入空格、删除键,在触发动态获取数据并进行匹配操作,然后将匹配结果展示在下拉列表中:

const suggest = document.querySelector("#search-suggest");
const keywordInput = document.querySelector("#keyword");

keywordInput.addEventListener("keydown", e => {
  const key = e.key;
  if (/[a-zA-Z0-9\s]/.test(key)) {
    suggest.style.display = "block";
    const keyword = keywordInput.value;
    if (keyword) {
      fetchData(keyword).then(matches => {
        renderMatches(matches);
      });
    }
  }
});

// 根据输入的关键词获取数据
function fetchData(keyword) {
  return fetch(`https://api.cdnjs.com/libraries?search=${keyword}`)
    .then(response => {
      return response.json();
    })
    .then(data => {
      return data.results.map(item => item.name);
    });
}

// 渲染匹配结果
function renderMatches(matches) {
  suggest.innerHTML = "";
  for (let match of matches) {
    const li = document.createElement("li");
    li.textContent = match;
    suggest.appendChild(li);
  }
}

3.3. 实现打字机输出效果

最后,我们需要实现在用户选中下拉列表中的某个选项时,展示选项的打字机输出效果。实现方法是:

在智能提示下拉列表中添加一个 mouseover 事件监听器,当鼠标在某一匹配结果上移动时,将该匹配结果存储在一个变量中,当用户选中该项时,将该项插入到输入框中,并展示打字机输出效果:

let selectedMatch = "";

suggest.addEventListener("mouseover", e => {
  if (e.target.tagName.toLowerCase() === "li") {
    selectedMatch = e.target.textContent;
  }
});

suggest.addEventListener("click", e => {
  if (e.target.tagName.toLowerCase() === "li") {
    keywordInput.value = selectedMatch;
    suggest.style.display = "none";
    typeText(selectedMatch);
  }
});

// 打字机输出效果
function typeText(text) {
  const len = text.length;
  let i = 0;
  const intervalId = setInterval(() => {
    if (i >= len) {
      clearInterval(intervalId);
    } else {
      keywordInput.value = text.slice(0, ++i);
    }
  }, 100);
}

4. 示例说明

4.1. 示例一:为搜索框添加智能提示

我们有一个搜索框,需要为其添加智能提示功能。用户可以在搜索框中输入关键词,系统会在后台发送请求,根据关键词搜索目标数据并返回匹配结果,在下拉列表中展示匹配结果。当用户选中某个匹配结果时,系统会将匹配结果展示在搜索框内,并使用打字机输出效果展示出来。

4.2. 示例二:添加公共库搜索功能

我们的网站需要一个公共库搜索功能,可以让用户搜索主流的前端库。在输入框中输入关键词时,系统展示与关键词匹配的前端库名称,并支持打字机输出效果。用户在选中某个匹配结果后,会重定向到该库的官网。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实用案例之输入智能提示(打字机输出效果) - Python技术站

(1)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Web设计师如何制作Retina显屏设备的图片

    下面是Web设计师制作Retina屏幕设备图片的攻略: 1. 理解Retina屏幕设备的特点和需求 首先,我们需要理解Retina屏幕设备的特点和需求。 Retina屏幕设备比传统屏幕设备拥有更高的分辨率和像素密度,例如iPhone的Retina屏幕设备像素密度达到每英寸326个像素。这种高像素密度使得普通图片在Retina屏幕设备上显示效果模糊不清,因此需…

    JavaScript 2023年6月11日
    00
  • Node.js控制器Controller使用教程

    Node.js控制器Controller使用教程 在Node.js中,控制器(Controller)用于处理请求并返回响应。控制器可以将请求路由到不同的处理程序(Handler)中,或者对请求进行处理并返回响应。 基本的控制器结构 通常来说,一个控制器至少具备两个功能:接收请求和返回响应。以下是一个基本的控制器结构示例: // 引入相关模块 const ex…

    JavaScript 2023年5月28日
    00
  • JS简单验证上传文件类型的方法

    下面是“JS简单验证上传文件类型的方法”的完整攻略: 标题:JS简单验证上传文件类型的方法 1. 准备工作 在HTML代码中,输入如下的文件上传输入框代码: <form action="/upload" method="post" enctype="multipart/form-data"&g…

    JavaScript 2023年5月27日
    00
  • javascript if条件判断方法小结

    下面为大家详细讲解“JavaScript if条件判断方法小结”的完整攻略。 1. if条件语句 if语句是JavaScript中最常用的条件判断语句。它的基本语法结构如下: if (condition) { // 如果condition为真,则执行这里的代码 } else { // 如果condition为假,则执行这里的代码 } 其中,condition…

    JavaScript 2023年6月10日
    00
  • JS 文件传参及处理技巧分析

    JS文件传参及处理技巧分析 在JavaScript中,文件传参是一个非常常见的操作,尤其是在web开发中。在本文中,我们将介绍文件传参的一些技巧和处理方法。 传统方式:URL参数传递 在web开发中,最常见的文件传参方式是通过URL参数传递。这种方式将参数作为URL的一部分,通常被称为GET方式。以下是一个典型的URL参数的例子: http://exampl…

    JavaScript 2023年5月27日
    00
  • 浅谈JavaScript函数节流

    浅谈 JavaScript 函数节流 函数节流(throttle)是一种优化高频执行函数的方法,它可以确保一定时间间隔内只执行一次函数。在一些需要触发频率比较高的事件,比如页面滚动、鼠标拖拽等事件中,使用函数节流可以有效提升页面性能。 基本实现原理 函数节流的基本实现原理是设置一个定时器,再限定在指定的时间内只触发一次函数。如果在等待的时间内再次触发函数,就…

    JavaScript 2023年5月19日
    00
  • js获取当前时间显示在页面上并每秒刷新

    获取并显示当前时间是前端常见的需求之一。本文将提供一种基于JavaScript的实现方案,通过一个完整的示例演示如何实现“js获取当前时间显示在页面上并每秒刷新”。 方案概述 我们将使用JavaScript的Date对象获取当前时间,并将获取到的时间展示在网页上。为了实现每秒刷新,我们需要使用JavaScript中的定时器setInterval()函数。 具…

    JavaScript 2023年5月27日
    00
  • 如何实现正则表达式的JavaScript的代码高亮

    要在网页中实现正则表达式的JavaScript代码高亮,可以采用Prism.js这个JavaScript库。 下面是实现的具体步骤: 1. 引入Prism.js 在网页的标签内添加下面的代码来引入Prism.js库: <link rel="stylesheet" href="https://cdnjs.cloudflare…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部