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日

相关文章

  • 浅析javascript的return语句

    浅析JavaScript的return语句,我们可以从以下几个方面进行阐述: 1. return的作用 在函数内,return关键字的作用是“终止函数执行并返回一个值”。也就是说,当函数执行到return语句时,会立即退出函数并返回一个值,如果没有指定返回值,则返回undefined。 2. return的使用方式 在JavaScript中,return的使…

    JavaScript 2023年6月10日
    00
  • BootStrap中的表单大全

    BootStrap中的表单大全 BootStrap是目前使用最为广泛的前端框架之一,其中表单是网站开发中比较常用的组件之一。本文将对BootStrap中的表单进行详细讲解,包括表单组成、常用表单类型、表单验证等内容,帮助读者在BootStrap中更好地使用表单组件。 表单组成 在BootStrap中,一个表单必须包含以下几个组成部分: form标签:定义表单…

    JavaScript 2023年6月10日
    00
  • javascript中的有名函数和无名函数

    JavaScript中的函数可以分为有名函数和无名函数两种类型。有名函数为函数定义指定了一个名称,而无名函数则没有。 有名函数 函数定义 有名函数最基本的定义方式就是定义一个函数名,并编写函数体: function add(a, b) { return a + b; } 这是定义一个相加函数的示例,函数名为add,接受两个参数a和b,并返回a和b的和。 函数…

    JavaScript 2023年5月27日
    00
  • JS异常处理的一个想法(sofish)

    下面是详细的文本攻略。 简介 JS异常处理的一个想法,是由前端开发者sofish提出的一种异常处理方案。这种方案能够减少代码中try-catch的使用,减少代码冗余,提高代码的可读性。 原理 这种方案的核心思想是使用事件代理,对于代码中可能出现的异常情况,可以在全局统一进行处理。事件代理通过监听window对象下的错误事件,可以捕获到应用中的所有异常。 实现…

    JavaScript 2023年5月28日
    00
  • vue+element实现动态加载表单

    当使用Vue.js和Element UI开发前端表单界面时,如果表单非常复杂,且需要动态生成,Vue.js + Element UI提供了两个有效的方法:使用v-for和createElement API。下面我来基于这两个方法介绍vue+element实现动态加载表单的完整攻略。 方法一:使用v-for 使用v-for方法,我们可以基于数据生成表单元素。 …

    JavaScript 2023年6月10日
    00
  • 轻轻松松学习JavaScript

    轻轻松松学习JavaScript 一、前言 JavaScript是Web前端开发的核心技术之一,基本所有现代网站均使用JavaScript进行开发。因此,掌握JavaScript基础是学习Web前端开发的重要第一步。本篇攻略将介绍如何轻松入门学习JavaScript基础知识。 二、学习路线 1. 学习基础语法 学习JavaScript基础语法是入门的第一步。…

    JavaScript 2023年5月18日
    00
  • JS动态修改图片的URL(src)的方法

    下面是我的详细讲解“JS动态修改图片的URL(src)的方法”的完整攻略。 为什么需要动态修改图片的URL? 在前端开发中,经常会有需要在JavaScript代码中动态修改图片的URL的情况,常见的应用有: 资源懒加载:在网页加载时,只加载当前可见区域内的图片,等到用户滚动到下一个区域时再加载下一个区域内的图片,这时就需要动态修改图片的URL。 用户上传图片…

    JavaScript 2023年5月19日
    00
  • Python Selenium操作Cookie的实例方法

    下面是详细讲解“Python Selenium操作Cookie的实例方法”的完整攻略: 什么是Cookie? 在网站上保存数据的一种机制,通常由服务器发送给用户的Web浏览器,并存储在本地机器上。当浏览器再次尝试连接到相同的服务器时,将发送之前存储的Cookie。 Selenium操作Cookie Selenium是一个支持Web驱动的自动化测试工具,包含一…

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