【JavaScript】注册表单案例 返回顶部案例

文章目录

  • 注册表单案例
  • 返回顶部案例

注册表单案例

制作一个包含基本用户交互和数据验证的用户注册表单示例。

表单元素:

  • 用户名:一个文本输入框,用于输入用户名。
  • 密码:一个密码输入框,用于输入密码。
  • 性别:两个单选按钮,分别代表男性和女性。
  • 爱好:三个复选框,分别代表唱歌、跳舞和说唱(rap)。
  • 国籍:一个下拉选择框,包含三个选项:中国、美国和英国。
  • 备注:一个多行文本输入区域,用户可以输入额外的信息。

JavaScript功能:

  • 实时验证:当用户名或密码发生变化时,会检查其长度是否符合要求(用户名至少3个字符,密码至少6个字符),并在旁边显示相应的错误提示。
  • 表单提交验证:在提交表单前进行简单验证,确保用户名和密码不为空。如果未通过验证,则阻止表单提交并弹出警告。
  • 显示信息:成功验证后,将用户填写的所有信息以格式化的方式显示在一个指定的<div>中。
  • 设置默认值:点击“表单赋值”按钮后,会自动填充表单中的某些字段为预设值。
  • 清空显示信息:点击“重置表单”按钮不仅会清除表单数据,还会清空显示信息区域的内容。
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <title>注册表单</title>
    <style>
        span {color: red;font-size: 12px;}
        #displayInfo {width: 360px;height: 170px;border: 1px solid #000;}
    </style>
</head>
<body>
    <h2>注册表单</h2>
    <form name="regForm" onsubmit="validateAndDisplay(event)">
        <label for="username">用户名:</label>
        <input type="text" id="username" name="username">
        <span></span>
        <br><br>

        <label for="password">密码:</label>
        <input type="password" id="password" name="password">
        <span></span>
        <br><br>

        <label>性别:</label>
        <input type="radio" id="male" name="gender" value="male">
        <label for="male"></label>
        <input type="radio" id="female" name="gender" value="female">
        <label for="female"></label><br><br>

        <label>爱好:</label>
        <input type="checkbox" id="singing" name="singing" value="sing">
        <label for="singing"></label>
        <input type="checkbox" id="dancing" name="dancing" value="dance">
        <label for="dancing"></label>
        <input type="checkbox" id="rapping" name="rapping" value="rap">
        <label for="rapping">rap</label><br><br>

        <label for="nationality">国籍:</label>
        <select id="nationality" name="nationality">
            <option value="中国">中国</option>
            <option value="美国">美国</option>
            <option value="英国">英国</option>
        </select><br><br>

        <label for="remarks">备注:</label><br>
        <textarea id="remarks" name="remarks" rows="4" cols="50"></textarea><br><br>

        <button type="submit">立即注册</button>
        <button type="button" onclick="setDefaultValues()">表单赋值</button>
        <button type="reset" onclick="clearDisplayInfo()">重置表单</button>
    </form><br><br>

    <div id="displayInfo"></div>

</body>
<script>
    // 获取用户名和密码元素
    var username = document.forms["regForm"]["username"];
    var password = document.forms["regForm"]["password"];

    // 实时验证用户名
    username.onchange = function () {
        var errorSpan = this.nextElementSibling; // 获取下一个兄弟元素节点
        if (this.value.length < 3) {
            errorSpan.textContent = "用户名至少需要3个字符";
        } else {
            errorSpan.textContent = "";
        }
    }
    // 实时验证密码
    password.onchange = function () {
        var errorSpan = this.nextElementSibling;
        if (this.value.length < 6) {
            errorSpan.textContent = "密码至少需要6个字符";
        } else {
            errorSpan.textContent = "";
        }
    }

    // 简单的客户端验证,并阻止表单的默认提交行为
    function validateAndDisplay(event) {
        if (username.value === "" || password.value === "") {
            alert("用户名和密码必须填写");
            event.preventDefault(); // 阻止表单提交
            return;
        }
        // 调用显示信息方法
        displayInfo();
        event.preventDefault(); // 阻止表单提交
    }

    // 在页面上显示信息
    function displayInfo() {
        // 获取页面上名称为"regForm"的表单
        var form = document.forms["regForm"];
        // 显示信息区域
        var div = document.getElementById("displayInfo");
        // 将选中的内容拼接返回页面
        div.innerHTML = "<strong>用户名:</strong>" + form.username.value + "<br/>" +
            "<strong>密码:</strong>" + form.password.value + "<br/>" +
            "<strong>性别:</strong>" + (form.gender[0].checked ? "男" : "女") + "<br/>" +
            "<strong>爱好:</strong>" + getHobbies(form) + "<br/>" +
            "<strong>国籍:</strong>" + form.nationality.value + "<br/>" +
            "<strong>备注:</strong><br/>" + form.remarks.value;
    }

    // 将选中的爱好拼接起来 若未选择默认无
    function getHobbies(form) {
        var hobbies = [];
        if (form.singing.checked) { hobbies.push('唱'); }
        if (form.dancing.checked) { hobbies.push('跳'); }
        if (form.rapping.checked) { hobbies.push('rap'); }
        return hobbies.join(", ") || "无";
    }

    // 设置默认值
    function setDefaultValues() {
        document.forms["regForm"]["username"].value = "默认用户名";
        document.forms["regForm"]["password"].value = "123";
        document.forms["regForm"]["gender"][0].checked = true; // 默认选中男
        document.forms["regForm"]["singing"].checked = true; // 默认选中唱歌
        document.forms["regForm"]["nationality"].value = "中国";
        document.forms["regForm"]["remarks"].value = "这是默认的备注内容。";
    }

    // 清空显示信息区域
    function clearDisplayInfo() {
        var div = document.getElementById("displayInfo");
        div.innerHTML = ""; // 清空显示信息区域
    }
</script>

</html>

返回顶部案例

基本功能:当页面滚动时,更新 <h1> 标签的内容为当前的 scrollTop 值,并且点击“返回顶部”链接时平滑地将页面滚动到顶部。

<head>
    <meta charset="UTF-8">
    <title>返回顶部</title>
    <style>
        body {height: 2000px;user-select: none;}
        h1 {position: fixed;top: 0;}
        
        h2 {position: fixed;bottom: 20px;right: 20px;}
        h2:hover {text-decoration: underline;}
    </style>
</head>
<body onscroll="setScroll()">
    <h1 id="scrollTop">0</h1>
    <h2 id="goBack" onclick="goTop()">返回顶部</h2>
</body>
<script>
    function setScroll() {
        document.getElementById("scrollTop").innerHTML = 
        document.documentElement.scrollTop;
    }
    function goTop(){
        document.documentElement.scrollTop = 0;
    }
</script>

显示当前滚动位置

  • 页面顶部 <h1> 标签实时显示当前页面的垂直滚动位置(scrollTop)。

返回顶部按钮

  • 点击页面底部右下角固定图标可以平滑滚动到页面顶部。

图标显示与隐藏

  • 当页面滚动超过 500 像素时,图标会显示。
  • 当页面滚动到顶部(即 scrollTop 小于或等于 500 像素)时,图标会隐藏。

图标动画效果

  • 点击图标时,图标会向上平滑移动出视口,并在滚动完成后隐藏。
<head>
    <meta charset="UTF-8">
    <title>返回顶部</title>
    <style>
        body { height: 2000px; user-select: none; }
        h1 { position: fixed; top: 0; }
        img {position: fixed;bottom: 20px;right: 20px;cursor: pointer;width: 40px;transition: transform 0.5s ease-out; }/* 添加过渡效果 */
        img:hover { text-decoration: underline; }
        .hidden { opacity: 0; pointer-events: none; } /* 隐藏图标 元素将不会响应任何鼠标事件 */
        .move-up { transform: translateY(-100vh); } /* 平滑移动到顶部的类 */
    </style>
</head>
<body>
    <h1 id="scrollTop">0</h1>
    <img src="./img/top.png" id="goBack" onclick="goTop()"/>

    <script>
        function setScroll() {
            // 获取 scrollTop 的值 并赋给 h1
            var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
            document.getElementById("scrollTop").innerHTML = scrollTop;

            // 控制图标显示与隐藏
            var goBackImg = document.getElementById("goBack");
            if (scrollTop > 500) {
                goBackImg.classList.remove('hidden');
            } else {
                goBackImg.classList.add('hidden');
            }
        }

        function goTop() {
            // 平滑滚动到顶部
            window.scrollTo({ top: 0, behavior: 'smooth' });

            // 添加 move-up 类以平滑移动图标
            var goBackImg = document.getElementById("goBack");
            goBackImg.classList.add('move-up');

            // 移除 move-up 类以便下次点击时可以再次触发动画
            setTimeout(() => {
                goBackImg.classList.remove('move-up');
                goBackImg.classList.add('hidden'); // 滚动到顶部后隐藏图标
            }, 500); // 与 transition 持续时间一致
        }

        // 添加滚动事件监听器
        window.addEventListener('scroll', setScroll);

        // 页面加载时初始化 scrollTop 显示
        setScroll();
    </script>
</body>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/889464.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络 - 基础问题】每日 3 题(三十六)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…

Open WebUI | 自托管的类 ChatGPT 网站

Open WebUI 是一个扩展性强、功能丰富且用户友好的自托管 WebUI&#xff0c;支持 ChatGPT 网页端的大部分功能&#xff0c;支持各类模型服务&#xff0c;包括 Ollama 和 OpenAI 的 API。该项目在 GitHub 上已有 38k 星&#xff0c;非常受欢迎。 功能介绍 本篇介绍该项目的功能…

考研笔记之操作系统(四) - 文件管理

文件管理 1. 简介1.1 前情回顾1.2 文件的属性1.3 文件内部数据的组织方式1.4 操作系统向上提供的文件功能1.5 文件应如何放在外存 2. 文件的逻辑结构2.1 无结构文件2.2 有结构文件2.2.1 顺序文件2.2.2 索引文件2.2.3 索引顺序文件2.2.4 多级索引顺序文件 3. 文件目录3.1 基本概…

若依前端后打成一个JAR包部署

客户需要将项目前后端作为一个整体打包成jar&#xff0c;不使用nginx方式转发。使用框架是若依前后端分离&#xff0c;后端springboot&#xff0c;前端vue&#xff0c;目的就是把vue打入jar。 一、前端修改 ruoyi-ui/src/router/index.js文件 &#xff0c;将 mode: ‘history’…

数据结构之二叉搜索树(key模型与key_value模型)

二叉搜索树&#xff08;key模型与key_value模型&#xff09; 1. ⼆叉搜索树的概念2. ⼆叉搜索树的性能分析3. ⼆叉搜索树的插⼊4. ⼆叉搜索树的查找5. ⼆叉搜索树的删除6. ⼆叉搜索树的实现代码7. ⼆叉搜索树key和key/value使⽤场景7.1 key搜索场景&#xff1a;7.2 key/value搜…

2-118 基于matlab的六面体建模和掉落仿真

基于matlab的六面体建模和掉落仿真&#xff0c;将对象建模为刚体来模拟将立方体扔到地面上。同时考虑地面摩擦力、刚度和阻尼所施加的力&#xff0c;在三个维度上跟踪平移运动和旋转运动。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a;2-118 基于matla…

Kubernetes系列之一快速部署一套K8s集群(kubeadm方式)

最近本人在重温云原生相关的技术&#xff0c;说到云原生&#xff0c;必然绕不开Kubernetes&#xff0c;今天想跟大家聊的就是大名顶顶的Kubernetes。相信很多朋友在学习和使用Kubernetes的过程遇到各式各样不同的问题。我将从一个初学者的角度来给大家讲解一下Kubernete从安装、…

字节跳动青训营开始报名了!

关于青训营&#xff1a; 青训营是字节跳动技术团队发起的技术系列培训 &人才选拔项目;面向高校在校生&#xff0c;旨在培养优秀且具有职业竞争力的开发工程师。 本次技术训练营由掘金联合豆包MarsCode 团队主办课程包含前端、后端和 A 方向&#xff0c;在这个飞速发…

Ajax面试题:(第一天)

目录 1.说一下网络模型 2.在浏览器地址栏键入URL&#xff0c;按下回车之后会经历以下流程&#xff1a; 3.什么是三次握手和四次挥手&#xff1f; 4.http协议和https协议的区别 1.说一下网络模型 注&#xff1a;各层含义按自己理解即可 2.在浏览器地址栏键入URL&#xff0c;…

Spring Boot 进阶-详解Spring Boot整合数据库

在之前的例子中&#xff0c;我们介绍了如何在Spring Boot 框架中添加数据源配置。这篇文章我们来详细介绍一下如何整合Mybatis框架。 整合Mybatis框架 还是按照之前的套路&#xff0c;我们要整合Mybatis框架&#xff0c;首先需要加载对应的场景启动器。这里我们引入由Mybatis提…

gitlab-ci 集成 k3s 部署spring boot 应用

环境 一台ECS gitlab 16.10 一台ECS gitlab-runner docker方式 一台腾讯云服务器 k3s k3s version v1.30.5k3s1 (9b586704) go version go1.22.6 本地: idea 2024 准备开始 gitlab上创建"api"仓库,本地IDEA 创建spring boot web demo项目k8s-gitlab-demo. 确保能…

C语言-常见文件操作函数详解(fgetc,fputc,fgets,fputs,fscanf,fprintf,fread,fwrite)

&#x1f30f;个人博客&#xff1a;尹蓝锐的博客 希望文章能够给到初学的你一些启发&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏支持一下笔者吧&#xff5e; 顺序读写数据常用函数 函数名调用形式功能返回值fgetcfgetc(fp)从指针变量fp指向的文件中读…

(五)Proteus仿真STM32单片机串口数据流收发

&#xff08;五&#xff09;Protues仿真STM32单片机串口数据流收发 – ARMFUN 1&#xff0c;打开STM32CubeMX&#xff0c;找到USART1,配置模式Asynchronous&#xff0c;此时PA9、PA10自动变成串口模式 串口默认参数:115200bps 8bit None 1stop 2&#xff0c;NVIC Settings使能…

Kafka之基本概念

1、Kafka是什么&#xff1f; Kafka是由Scala语言开发的一个多分区、多副本&#xff0c;基于Zookeeper集群协调的系统。 那这个所谓的系统又是什么系统呢&#xff1f; 回答这个问题要从发展的角度来看&#xff1a;起初Kafka的定位是分布式消息系统。但是目前它的定位是一个分布…

Pr 视频效果:元数据和时间码刻录

视频效果/视频/元数据和时间码刻录 Video/Metadata & Timecode Burn-in 元数据和时间码刻录 Metadata & Timecode Burn-in效果是一种在视频画面上叠加显示剪辑元数据或时间码的工具。它允许在导出视频时&#xff0c;将需用的元数据信息直接刻录在画面上&#xff0c;方便…

Linux操作系统小项目——实现《进程池》

文章目录 前言&#xff1a;代码实现&#xff1a;原理讲解&#xff1a;细节处理&#xff1a; 前言&#xff1a; 在前面的学习中&#xff0c;我们简单的了解了下进程之间的通信方式&#xff0c;目前我们只能知道父子进程的通信是通过匿名管道的方式进行通信的&#xff0c;这是因…

MacOS编译和安装Poco库的方法

1.从官网git下载最新的poco源代码 在/usr/local路径下创建Poco文件夹&#xff0c;克隆Poco源代码 sudo git clone -b poco-1.13.3-release https://github.com/pocoproject/poco.git2.等了一会后&#xff0c;报错啦&#xff01;&#xff01;&#xff01; error: RPC failed…

Unity3D 单例模式

Unity3D 泛型单例 单例模式 单例模式是一种创建型设计模式&#xff0c;能够保证一个类只有一个实例&#xff0c;提供访问实例的全局节点。 通常会把一些管理类设置成单例&#xff0c;例如 GameManager、UIManager 等&#xff0c;可以很方便地使用这些管理类单例&#xff0c;…

<Project-8 pdf2tx-MM> Python Flask应用:在浏览器中翻译PDF文件 NLTK OCR 多线程 指定翻译器 改进后的P6

项目概述 名字解释 缩写&#xff1a; pdf2tx-MM pdf file transfer to text content with Multi-threads and Multi-translators pdf2tx-MM 是一个基于 Flask 的 Web 应用程序&#xff0c;提供将 PDF 文件中的内容提取、翻译并展示。使用者上传 PDF 文件&#xff0c;应用程序…

计算机视觉之OpenCV vs YOLO

好多开发者希望搞明白OpenCV 和YOLO区别&#xff0c;实际上&#xff0c;二者在计算机视觉领域都有广泛应用&#xff0c;但它们有很大的不同。 一、OpenCV 概述 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它…