自学内容网 自学内容网

JavaScript 网页设计案例与技巧

简单的 JavaScript 网页设计案例

展示了动态改变页面内容和样式的效果:

一、HTML 结构

<!DOCTYPE html>
<!-- 这是文档类型声明,告知浏览器以 HTML5 标准解析页面 -->
<html lang="en">
<!-- 整个网页的根元素,lang="en" 表示页面语言为英语 -->

<head>
  <!-- 网页的头部信息 -->
  <meta charset="UTF-8">
  <!-- 指定页面的字符编码为 UTF-8,以支持多种字符 -->
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <!-- 用于适配不同设备的视口设置 -->
  <title>JavaScript 网页设计案例</title>
  <!-- 网页的标题 -->
  <link rel="stylesheet" href="styles.css">
  <!-- 引入外部的 CSS 样式表文件 -->
</head>

<body>
  <!-- 网页的主体内容 -->
  <h1>欢迎来到我的网页</h1>
  <!-- 一级标题 -->
  <p id="description">这是一个使用 JavaScript 设计的网页。</p>
  <!-- 带有特定 ID 的段落 -->
  <button id="changeButton">点击改变内容</button>
  <!-- 带有特定 ID 的按钮 -->

  <script src="script.js"></script>
  <!-- 引入外部的 JavaScript 脚本文件 -->
</body>

</html>

一个简单的 HTML 结构框架,包含了基本的元数据、标题、样式表链接和主体内容。主体内容中有一个标题、一个段落和一个按钮,并通过 script 标签引入了外部的 JavaScript 文件来实现更多的交互功能。但目前仅构建了页面的基本框架,具体的交互效果和样式需要在 styles.css 和 script.js 中进行定义和实现。 

二、CSS 样式(styles.css)

body {
  /* 设置整个网页主体的字体为 Arial 或无衬线字体 */
  font-family: Arial, sans-serif;
  /* 设置主体的背景颜色为浅灰色 #f5f5f5 */
  background-color: #f5f5f5;
  /* 将主体内的文本居中对齐 */
  text-align: center;
}

h1 {
  /* 设置一级标题的文字颜色为深灰色 #333 */
  color: #333;
}

button {
  /* 为按钮设置内边距,上下 10 像素,左右 20 像素 */
  padding: 10px 20px;
  /* 设置按钮的背景颜色为绿色 #4CAF50 */
  background-color: #4CAF50;
  /* 设置按钮文字颜色为白色 */
  color: white;
  /* 去除按钮的边框 */
  border: none;
  /* 当鼠标悬停在按钮上时,显示为指针形状,提示可点击 */
  cursor: pointer;
}

主要定义了网页主体 body、一级标题 h1 和按钮 button 的基本样式,包括字体、颜色、背景、对齐方式、内边距等属性,以实现一定的视觉效果和布局。

三、JavaScript 脚本(script.js)

const changeButton = document.getElementById('changeButton'); 
// 获取具有 ID 为 'changeButton' 的元素,并将其存储在变量 changeButton 中
const description = document.getElementById('description'); 
// 获取具有 ID 为 'description' 的元素,并将其存储在变量 description 中

changeButton.addEventListener('click', function () { 
// 为 changeButton 元素添加点击事件监听器
  description.textContent = '内容已改变!'; 
  // 当点击发生时,修改 description 元素的文本内容为 '内容已改变!'
  description.style.color = 'blue'; 
  // 将 description 元素的文字颜色修改为蓝色
  changeButton.style.backgroundColor = '#333'; 
  // 将 changeButton 元素的背景颜色修改为深灰色
  changeButton.style.color = '#fff'; 
  // 将 changeButton 元素的文字颜色修改为白色
});

当用户点击具有 id 为 changeButton 的按钮时,会修改具有 id 为 description 的段落的文本内容和文字颜色,并同时修改按钮自身的背景颜色和文字颜色。

实用的 JavaScript 网页设计技巧:

一、优化性能

减少 DOM 操作:频繁地操作 DOM 会导致性能下降。尽量减少对 DOM 的查询和修改次数,可以先在内存中进行操作,然后一次性更新 DOM。

  • 例如,当需要添加多个元素时,可以先创建一个文档片段,将元素添加到文档片段中,最后再将文档片段添加到 DOM 中。
const fragment = document.createDocumentFragment(); 
// 创建一个文档片段对象

for (let i = 0; i < 10; i++) { 
// 开始一个循环,从 0 到 9
  const element = document.createElement('div'); 
  // 创建一个新的 <div> 元素
  element.textContent = 'Element ' + i; 
  // 设置 <div> 元素的文本内容为 'Element ' 加上当前的循环索引 i
  fragment.appendChild(element); 
  // 将创建的 <div> 元素添加到文档片段中
}
document.body.appendChild(fragment); 
// 将包含多个 <div> 元素的文档片段添加到文档的 body 中

主要目的是通过循环创建 10 个包含特定文本的 <div> 元素,并将它们先添加到文档片段中,最后一次性将文档片段添加到页面的主体中,这样可以提高性能,减少页面的重绘和回流次数。

事件委托:当需要为多个元素添加相同的事件处理程序时,可以使用事件委托。将事件处理程序添加到父元素上,通过事件冒泡来处理子元素的事件。

  • 例如,有一个列表,当点击列表项时执行某个操作,可以将事件处理程序添加到列表的父元素上。
const list = document.getElementById('list'); 
// 获取具有 ID 为 'list' 的元素,并将其存储在变量 list 中

list.addEventListener('click', function (event) { 
// 为 list 元素添加点击事件监听器
  if (event.target.tagName === 'LI') { 
    // 如果点击的目标元素的标签名是 'LI'(即列表项)
    // 处理列表项点击事件
  }
});

当用户在具有 id 为 list 的元素上进行点击操作时,会检查被点击的元素是否为列表项(<LI>),如果是,则会执行相应的处理逻辑(此处尚未给出具体的处理内容)。这种方式可以精准地捕获列表项的点击事件,并进行针对性的处理。

二、增强用户体验

懒加载:对于图片、视频等资源,可以使用懒加载技术。当元素进入可视区域时再加载资源,提高页面加载速度。

  • 可以使用 Intersection Observer API 来实现懒加载。
const images = document.querySelectorAll('img[data-src]'); 
// 选择所有具有"data-src"属性的<img>元素,并将它们存储在images数组中

const observer = new IntersectionObserver((entries, observer) => { 
// 创建一个交叉观察器
  entries.forEach(entry => { 
    // 遍历观察到的每个元素的交叉状态条目
    if (entry.isIntersecting) { 
      // 如果元素进入视口交叉区域
      const img = entry.target; 
      // 获取当前交叉的图像元素
      img.src = img.dataset.src; 
      // 将"data-src"属性的值赋给"src"属性,以加载图像
      img.removeAttribute('data-src'); 
      // 移除"data-src"属性
      observer.unobserve(img); 
      // 停止观察该图像元素
    }
  });
});

images.forEach(image => { 
// 遍历之前获取的所有具有"data-src"属性的图像元素
  observer.observe(image); 
  // 让观察器开始观察每个图像元素
});

实现了一种懒加载图像的功能。当具有 "data-src" 属性的图像元素进入视口时,才会将 "data-src" 的值赋给 "src" 属性来加载图像,从而提高页面性能,减少初始加载时的资源请求。

动画效果:使用 JavaScript 可以实现各种动画效果,增强用户体验。可以使用 CSS 动画和 JavaScript 相结合的方式来实现复杂的动画。

  • 例如,使用 CSS 过渡和 JavaScript 来实现按钮的悬停效果。
button {
  /* 为按钮元素添加过渡效果 */
  transition: background-color 0.3s ease;
  /* 当按钮的背景颜色发生变化时,以 0.3 秒的时间平滑过渡,过渡效果为 ease(缓动效果) */
}

定义了按钮在背景颜色发生改变时的过渡效果,使其颜色变化更加平滑和自然。

const button = document.getElementById('button'); 
// 获取具有 ID 为 'button' 的元素,并将其存储在变量 button 中

button.addEventListener('mouseover', function () { 
// 为按钮添加鼠标悬停事件监听器
  this.style.backgroundColor = '#4CAF50'; 
  // 当鼠标悬停时,将按钮的背景颜色设置为绿色 '#4CAF50'
});

button.addEventListener('mouseout', function () { 
// 为按钮添加鼠标移出事件监听器
  this.style.backgroundColor = ''; 
  // 当鼠标移出时,将按钮的背景颜色恢复为空(即恢复默认颜色)
});

实现了当鼠标悬停在按钮上时,按钮背景颜色变为绿色,鼠标移出时,按钮背景颜色恢复默认。

三、数据交互

AJAX 请求:使用 XMLHttpRequest 或 Fetch API 可以进行异步数据请求,实现页面的动态更新。

  • 使用 Fetch API 获取数据并更新页面。
fetch('data.json') 
// 发送一个 GET 请求获取 'data.json' 文件
.then(response => response.json()) 
// 当获取到响应后,将响应解析为 JSON 格式
.then(data => { 
// 当成功解析为 JSON 数据后
  // 处理数据并更新页面
  // 这里将接收到解析后的 JSON 数据,可以进行相应的操作,如修改页面元素的内容、状态等
});

使用 fetch 函数发起了一个获取 data.json 文件的请求,然后依次处理响应和解析后的 JSON 数据,以进行后续的页面更新等操作。

表单验证:使用 JavaScript 可以对用户输入的表单数据进行验证,确保数据的有效性。

  • 例如,验证用户输入的邮箱格式。
const emailInput = document.getElementById('email'); 
// 获取具有 ID 为 'email' 的输入元素,并将其存储在变量 emailInput 中

emailInput.addEventListener('input', function () { 
// 为 emailInput 元素添加输入事件监听器
  const email = this.value; 
  // 获取当前输入框的值,并存储在变量 email 中
  const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; 
  // 创建一个用于验证电子邮件格式的正则表达式
  if (!regex.test(email)) { 
    // 如果输入的值不符合电子邮件格式
    this.classList.add('invalid'); 
    // 为输入元素添加 'invalid' 类,用于表示输入无效
  } else {
    this.classList.remove('invalid'); 
    // 如果输入的值符合电子邮件格式,移除 'invalid' 类
  }
});

作用是在用户输入电子邮件时实时检查其格式。如果输入不符合常见的电子邮件格式规则,就为输入框添加 invalid 类,以便可以通过 CSS 对其应用相应的样式来提示用户输入有误;如果输入符合格式,则移除该类。

四、代码组织和可维护性

模块化:将 JavaScript 代码拆分成多个模块,提高代码的可维护性和可复用性。可以使用 ES6 的模块系统或其他模块化方案。

  • 例如,创建一个模块来处理用户认证。
// 在 'auth.js' 文件中

export function login(username, password) { 
  // 导出一个名为 'login' 的函数,接收用户名 'username' 和密码 'password' 作为参数
  // 处理登录逻辑
  // 此处尚未实现具体的登录逻辑,可能包括与服务器通信验证、设置登录状态等操作
}

export function logout() { 
  // 导出一个名为 'logout' 的函数
  // 处理注销逻辑
  // 此处尚未实现具体的注销逻辑,可能包括清除登录状态、执行相关的清理操作等
}

定义了两个用于处理登录和注销操作的函数,并将它们导出,以便在其他模块中可以导入和使用这些函数来实现相应的功能。

// 在'main.js'文件中

import { login, logout } from './auth.js'; 
// 从 './auth.js' 模块中导入名为 'login' 和 'logout' 的函数
// 这使得在'main.js' 中可以直接使用导入的这两个函数来进行登录和注销相关的操作

从相对路径 ' ./auth.js ' 这个模块中,有针对性地导入了两个名为 login 和 logout 的成员。这意味着在当前的 main.js 模块中,可以直接使用这两个导入的函数或功能,来执行与登录和注销相关的操作。这种模块化的导入方式有助于将代码分解为可管理和可复用的部分,提高代码的结构和可读性。

注释和文档:为代码添加注释和文档,提高代码的可读性和可维护性。可以使用 JSDoc 等工具来生成文档。

  • 例如,为一个函数添加注释。
/**
 * 计算两个数的和。
 * @param {number} a - 第一个数。
 * 这里明确指定参数 `a` 的数据类型为数字。
 * @param {number} b - 第二个数。
 * 表明参数 `b` 也要求是数字类型。
 * @returns {number} - 两个数的和。
 * 说明函数的返回值是一个数字,即两个输入数字的总和。
 */
function add(a, b) {  // 定义了一个名为 `add` 的函数
  return a + b;  // 函数的主体部分,直接将输入的两个参数 `a` 和 `b` 相加,并返回结果
}

add 函数用于接受两个数字类型的参数,并返回它们相加的结果。通过 JSDoc 格式的注释,提高了代码的可读性和可维护性,让其他开发者能够清晰地了解函数的用途、参数要求和返回值类型。

这些技巧可以帮助你在网页设计中更好地使用 JavaScript,提高页面的性能、用户体验和可维护性。你可以根据具体的项目需求选择合适的技巧来应用。


原文地址:https://blog.csdn.net/qq_31426349/article/details/142786104

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!