下面是用 JavaScript 制作 QQ 注册动态页面的攻略:
下面是用 JavaScript 制作 QQ 注册动态页面的攻略:
1. 前置知识
在进行动态页面制作前,需要掌握以下一些前置知识:
- HTML:前端页面标记语言,用于编写网页基本结构和内容;
- CSS:前端页面样式表语言,用于美化网页界面;
- JavaScript:前端脚本语言,用于实现网页交互和动画效果;
- DOM:文档对象模型,即用 JavaScript 操作页面元素的接口;
- AJAX:异步 JavaScript 和 XML,用于无需刷新页面即可进行数据交互。
2. 制作流程
QQ 注册动态页面制作的主要流程如下:
- 编写 HTML 结构和 CSS 样式。
- 使用 DOM 和 AJAX 实现交互效果。
下面将针对具体需求,展示两种示例演示效果,以帮助你更好地理解制作过程。
示例一
HTML 结构
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>QQ 注册</title>
</head>
<body>
<!-- 注册表单 -->
<form id="register-form">
<div>
<label for="username">用户名:</label>
<input type="text" id="username" placeholder="请输入用户名">
</div>
<div>
<label for="password">密码:</label>
<input type="password" id="password" placeholder="请输入密码">
</div>
<div>
<label for="confirm-password">确认密码:</label>
<input type="password" id="confirm-password" placeholder="请再次输入密码">
</div>
<div>
<label for="email">邮箱:</label>
<input type="text" id="email" placeholder="请输入邮箱">
</div>
<button type="submit">提交</button>
</form>
</body>
</html>
CSS 样式
/* 全局样式 */
* {
box-sizing: border-box;
}
body {
font-family: "Arial", sans-serif;
}
/* 表单样式 */
form {
margin: 20px auto;
width: 300px;
}
label {
display: block;
margin-bottom: 5px;
}
input[type="text"],
input[type="password"] {
padding: 5px;
border: 1px solid #ccc;
border-radius: 3px;
outline: none;
}
button[type="submit"] {
margin-top: 10px;
padding: 5px 10px;
border: none;
border-radius: 3px;
background-color: #4CAF50;
color: #fff;
cursor: pointer;
}
JavaScript 实现
// 监听表单提交事件
document.querySelector("#register-form").addEventListener("submit", function(event) {
// 阻止表单默认提交行为
event.preventDefault();
// 获取表单中的值
var username = document.querySelector("#username").value;
var password = document.querySelector("#password").value;
var confirmPassword = document.querySelector("#confirm-password").value;
var email = document.querySelector("#email").value;
// 判断密码是否一致
if (password !== confirmPassword) {
alert("两次输入的密码不一致,请重试!");
return;
}
// 使用 AJAX 提交表单数据
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://localhost:3000/register");
xhr.setRequestHeader("Content-type", "application/json");
xhr.onload = function() {
if (xhr.status === 200) {
alert("注册成功!");
} else {
alert("注册失败,请重试!");
}
};
xhr.send(JSON.stringify({
username: username,
password: password,
email: email
}));
});
示例二
HTML 结构
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>QQ 注册</title>
</head>
<body>
<!-- 注册表单 -->
<form>
<div>
<label for="username">用户名:</label>
<input type="text" id="username" placeholder="请输入用户名">
<div id="username-tip"></div>
</div>
<div>
<label for="password">密码:</label>
<input type="password" id="password" placeholder="请输入密码">
<div id="password-tip"></div>
</div>
<div>
<label for="confirm-password">确认密码:</label>
<input type="password" id="confirm-password" placeholder="请再次输入密码">
<div id="confirm-password-tip"></div>
</div>
<div>
<label for="email">邮箱:</label>
<input type="text" id="email" placeholder="请输入邮箱">
<div id="email-tip"></div>
</div>
<button type="submit" disabled>提交</button>
</form>
</body>
</html>
CSS 样式
/* 全局样式 */
* {
box-sizing: border-box;
}
body {
font-family: "Arial", sans-serif;
}
/* 表单样式 */
form {
margin: 20px auto;
width: 300px;
}
label {
display: block;
margin-bottom: 5px;
}
input[type="text"],
input[type="password"] {
padding: 5px;
border: 1px solid #ccc;
border-radius: 3px;
outline: none;
}
button[type="submit"] {
margin-top: 10px;
padding: 5px 10px;
border: none;
border-radius: 3px;
background-color: #4CAF50;
color: #fff;
cursor: pointer;
}
/* 提示信息样式 */
div[id$="-tip"] {
font-size: 14px;
color: #f00;
}
JavaScript 实现
// 获取表单元素和提示信息元素
var form = document.querySelector("form");
var usernameInput = document.querySelector("#username");
var passwordInput = document.querySelector("#password");
var confirmPasswordInput = document.querySelector("#confirm-password");
var emailInput = document.querySelector("#email");
var usernameTip = document.querySelector("#username-tip");
var passwordTip = document.querySelector("#password-tip");
var confirmPasswordTip = document.querySelector("#confirm-password-tip");
var emailTip = document.querySelector("#email-tip");
// 监听输入框输入事件和表单提交事件
usernameInput.addEventListener("input", checkUsername);
passwordInput.addEventListener("input", checkPassword);
confirmPasswordInput.addEventListener("input", checkConfirmPassword);
emailInput.addEventListener("input", checkEmail);
form.addEventListener("submit", function(event) {
// 阻止表单默认提交行为
event.preventDefault();
// 判断是否所有输入框都已通过验证
if (usernameInput.classList.contains("valid") &&
passwordInput.classList.contains("valid") &&
confirmPasswordInput.classList.contains("valid") &&
emailInput.classList.contains("valid")) {
// 使用 AJAX 提交表单数据
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://localhost:3000/register");
xhr.setRequestHeader("Content-type", "application/json");
xhr.onload = function() {
if (xhr.status === 200) {
alert("注册成功!");
} else {
alert("注册失败,请重试!");
}
};
xhr.send(JSON.stringify({
username: usernameInput.value,
password: passwordInput.value,
email: emailInput.value
}));
} else {
alert("表单未通过验证,请检查后重试!");
}
});
// 检查用户名是否合法
function checkUsername() {
var username = this.value.trim();
if (username === "") {
usernameInput.classList.remove("valid");
usernameInput.classList.add("invalid");
usernameTip.innerHTML = "用户名不能为空";
} else if (username.length < 6 || username.length > 18) {
usernameInput.classList.remove("valid");
usernameInput.classList.add("invalid");
usernameTip.innerHTML = "用户名长度必须介于6到18个字符之间";
} else if (!/^\w+$/.test(username)) {
usernameInput.classList.remove("valid");
usernameInput.classList.add("invalid");
usernameTip.innerHTML = "用户名只能由字母、数字和下划线组成";
} else {
usernameInput.classList.remove("invalid");
usernameInput.classList.add("valid");
usernameTip.innerHTML = "";
}
checkFormValidity();
}
// 检查密码是否合法
function checkPassword() {
var password = this.value;
if (password === "") {
passwordInput.classList.remove("valid");
passwordInput.classList.add("invalid");
passwordTip.innerHTML = "密码不能为空";
} else if (password.length < 8 || password.length > 20) {
passwordInput.classList.remove("valid");
passwordInput.classList.add("invalid");
passwordTip.innerHTML = "密码长度必须介于8到20个字符之间";
} else if (!/^\w+$/.test(password)) {
passwordInput.classList.remove("valid");
passwordInput.classList.add("invalid");
passwordTip.innerHTML = "密码只能由字母、数字和下划线组成";
} else {
passwordInput.classList.remove("invalid");
passwordInput.classList.add("valid");
passwordTip.innerHTML = "";
}
checkFormValidity();
}
// 检查确认密码是否和密码一致
function checkConfirmPassword() {
var password = passwordInput.value;
var confirmPassword = this.value;
if (confirmPassword === "") {
confirmPasswordInput.classList.remove("valid");
confirmPasswordInput.classList.add("invalid");
confirmPasswordTip.innerHTML = "确认密码不能为空";
} else if (password !== confirmPassword) {
confirmPasswordInput.classList.remove("valid");
confirmPasswordInput.classList.add("invalid");
confirmPasswordTip.innerHTML = "两次输入的密码不一致";
} else {
confirmPasswordInput.classList.remove("invalid");
confirmPasswordInput.classList.add("valid");
confirmPasswordTip.innerHTML = "";
}
checkFormValidity();
}
// 检查邮箱地址是否合法
function checkEmail() {
var email = this.value.trim();
if (email === "") {
emailInput.classList.remove("valid");
emailInput.classList.add("invalid");
emailTip.innerHTML = "邮箱不能为空";
} else if (!/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(email)) {
emailInput.classList.remove("valid");
emailInput.classList.add("invalid");
emailTip.innerHTML = "邮箱地址不合法";
} else {
emailInput.classList.remove("invalid");
emailInput.classList.add("valid");
emailTip.innerHTML = "";
}
checkFormValidity();
}
// 检查表单是否通过验证
function checkFormValidity() {
if (usernameInput.classList.contains("valid") &&
passwordInput.classList.contains("valid") &&
confirmPasswordInput.classList.contains("valid") &&
emailInput.classList.contains("valid")) {
form.querySelector("button[type='submit']").disabled = false;
} else {
form.querySelector("button[type='submit']").disabled = true;
}
}
至此,用 JavaScript 制作 QQ 注册动态页面的攻略就介绍完了。希望以上内容能对你有所帮助。
沃梦达教程
本文标题为:用javascript制作qq注册动态页面
基础教程推荐
猜你喜欢
- Java获取Excel中图片所在的行和列坐标位置 2023-03-22
- jsp登录会话的简单实现 2023-08-03
- 在Java中实现让线程按照自己指定的顺序执行 2023-02-10
- mybatis-plus中lambdaQuery()与lambdaUpdate()比较常见的使用方法总结 2023-06-01
- 浅谈request.getinputstream只能读取一次的问题 2023-08-01
- Java Thread 类和Runnable 接口详解 2023-04-07
- SpringCloud超详细讲解Feign声明式服务调用 2023-01-23
- SpringBoot Starter机制及整合tomcat的实现详解 2023-05-14
- SpringBoot项目打成war和jar的区别说明 2022-12-07
- Java如何自定义线程池中队列 2023-02-19