【HTML界面设计(二)】说说模块、登录界面

news2024/11/11 6:33:49

记录很早之前写的前端界面(具体时间有点久远)

一、说说模板

采用 适配器(Adapter)原理 来设计这款说说模板,首先看一下完整效果

在这里插入图片描述

这是demo样图,需要通过业务需求进行修改的部分

在这里插入图片描述

这一部分,就是demo代码了

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 图片定义为 150*150 -->
		<style>
			#say{
				height: 400px;
				width: 400px;
				background-color: red;
			}
			.go{
				padding: 10px 10px 0px 10px;
			}
			.go>div{
				display: inline-block;
			}
			/* 第一行:Information */
			#userImage{
				position: relative;
				height: 80px;
				width: 80px;
				background-color: blue;
			}
			#userImage+div,#userImage+div+div{
				width: 120px; 
				height: 80px;
			}
			#userName{
				width: 120px;
				height: 40px;
				background-color: blue;
			}
			#sayTime{
				position: relative;
				width: 120px;
				height: 30px;
				background-color: blue;
				top: 10px;
			}
			#operate{
				position: relative;
				margin-left: auto;
				width: 30px;
				height: 20px;
				background-color: blue;
			}
			/* 第二行:text */
			#sayText{
				position: relative;
				height: 30px;
				width: 380px;
				background-color: blue;
			}
			/* 第三行:images */
			#sayImages{
				height: 150px;
				width: 380px;
				background-color: blue;
			}
			/* 第四行:position */
			.go .ps{
				width: 380px;
				text-align: right;
			}
			.ps>div{
				display: inline-block;
			}
			#position{
				width: 80px;
				height: 20px;
				background-color: blue;
			}
			/* 第五行:用户操作 */
			#dianzan,#pinglun,#zhuanfa{
				width: 30px;
				height: 30px;
				background-color: blue;
			}
		</style>
	</head>
	<body>
		<div id="say">
			<div class="go">
				<div id="userImage">
					
				</div>
				<div>
					<div id="userName">
						
					</div>
					<div id="sayTime">
						
					</div>
				</div>
				<div>
					<div id="operate">
						<!-- 操作模块 -->
					</div>
				</div>
			</div>
			<div class="go">
				<div id="sayText">
					
				</div>
			</div>
			<div class="go">
				<div id="sayImages">
					<!-- 建议是添加图片适配器 -->
				</div>
			</div>
			<div class="go">
				<div class="ps">
					<div id="position">
						
					</div>
				</div>
			</div>
			<div class="go">
				<div class="ps">
					<!-- 为了使效果好看,这里最好也是使用适配器(适配器嵌套适配器) -->
					<div id="dianzan">
						
					</div>
					<div id="pinglun">
						
					</div>
					<div id="zhuanfa">
						
					</div>
				</div>
			</div>
		</div>
	</body>
</html>

二、登录界面

效果图(因为我这个项目有二维码登录的需求,所以有一个扫描图标,但demo里没有)
如果需要设计出一个这样的功能,可以参考同栏目下的【全栈开发】基于Spring Boot&Vue&Android扫码授权登录

建议:其实啊,我个人不是很推崇直接前端生成验证码数据,这玩意最好还是交给后端,始终要遵守开发安全原则 后端负责生成,前端负责渲染

在这里插入图片描述

html代码(使用了jQuery库,这里感谢开源者们的辛勤付出)

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8"/>
    <title></title>
    <link rel="stylesheet" href="css/c002.css">
	<script src="js/Jquery.js"></script>
</head>

<body>
    <div class="main">
        <div class="login-title">
            用 户 登 录
        </div>
        <div class="input-data">
            <input type="text" required="" id="userName" />
            <div class="underlineN"></div>
            <label>Name</label>
        </div>
        <div class="input-data">
            <input type="text" required="" id="userPass" />
            <div class="underlineP"></div>
            <label>Password</label>
        </div>
		<div class="login-yzm">
			<canvas id="canvas" width="120" height="40"></canvas>
			<div id="yzm-text">验证码:</div>
			<input type="text" id="yzm-input" >
		</div>
        <div class="login-btn">
            <button onclick="eqNull()"><span>登录</span></button>
			<button onclick=""><span>注册</span></button>
        </div>
    </div>
</body>

	<script type="text/javascript" src="js/c002.js"></script>
</html>

css代码

* {
    margin: 0;
    padding: 0;
    outline: none;
    box-sizing: border-box;
}


/* 设置自适应屏幕大小 */

body {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 100vh;
    background: linear-gradient(-135deg, #50c8c2, #4158d0);
}


/* 标题设计 */

.login-title {
    text-align: center;
    font-size: 20px;
    padding-bottom: 20px;
}


/* 输入框设计 */

.main {
    width: 450px;
    background-color: #fff;
    padding: 30px;
    box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
}


/* 模块规格 */
/* 输入框、验证码 */

.main .input-data,.login-yzm {
    width: 100%;
    height: 40px;
    margin: 10px;
    position: relative;
}


/* 输入框规格设计 */

.main .input-data input {
    width: 100%;
    height: 100%;
    border: none;
    border-bottom: 2px solid silver;
    font-size: 17px;
}


/* 动画效果 */

.input-data input:focus~label,
.input-data input:valid~label {
    transform: translateY(-20px);
    font-size: 15px;
    color: #4158D0;
}


/* 输入框文本提醒动画 */

.main .input-data label {
    position: absolute;
    bottom: 10px;
    left: 0;
    color: grey;
    pointer-events: none;
    transition: all 0.3s ease;
}


/* 动画设计 */

.main .input-data .underlineN {
    position: absolute;
    bottom: 0px;
    height: 2px;
    width: 100%;
}

.input-data .underlineN::before {
	background: #4158D0;
    position: absolute;
    content: "";
    height: 100%;
    width: 100%;
    transform: scaleX(0);
    transition: transform 0.3s ease;
}

.input-data input:focus~.underlineN:before,
.input-data input:valid~.underlineN:before {
    transform: scaleX(1);
}

.main .input-data .underlineP {
    position: absolute;
    bottom: 0px;
    height: 2px;
    width: 100%;
}

.input-data .underlineP::before {
	background: #4158D0;
    position: absolute;
    content: "";
    height: 100%;
    width: 100%;
    transform: scaleX(0);
    transition: transform 0.3s ease;
}

.input-data input:focus~.underlineP:before,
.input-data input:valid~.underlineP:before {
    transform: scaleX(1);
}


/* 按钮设计 */

.login-btn {
    text-align: center;
}

.login-btn button {
    background: radial-gradient(circle, rgba(247, 150, 192, 1) 0%, rgba(118, 174, 241, 1) 100%);
    border: none;
    color: #fff;
    font-family: 'Lato', sans-serif;
    border-radius: 10px;
    cursor: pointer;
    padding: 10px 30px;
    position: relative;
    top: 20px;
}


/* 按钮触摸和移出 */

.login-btn button:hover {
    background: transparent;
    color: #76aef1;
}

.login-btn button::before,
.login-btn button::after {
    content: '';
    position: absolute;
    width: 1px;
    height: 1px;
    box-shadow: -1px -1px 20px 0px rgba(255, 255, 255, 1), -4px -4px 5px 0px rgba(255, 255, 255, 1), 10px 10px 20px 0px rgba(0, 0, 0, .4), 6px 6px 5px 0px rgba(0, 0, 0, .3);
    transition: all 0.8s ease;
    padding: 0;
}

.login-btn button::before {
    top: 0;
    right: 0;
}

.login-btn button::after {
    bottom: 0;
    left: 0;
}

.login-btn button:hover::before,
.login-btn button:hover::after {
    height: 100%;
}

.login-btn button span::before,
.login-btn button span::after {
    position: absolute;
    content: '';
    width: 0px;
    box-shadow: -1px -1px 20px 0px rgba(255, 255, 255, 1), -4px -4px 5px 0px rgba(255, 255, 255, 1), 10px 10px 20px 0px rgba(0, 0, 0, .4), 6px 6px 5px 0px rgba(0, 0, 0, .3);
    transition: all 0.8s ease;
}

.login-btn button span::before {
    top: 0;
    left: 0;
}

.login-btn button span::after {
    bottom: 0;
    right: 0;
}

.login-btn button span:hover::before,
.login-btn button span:hover::after {
    width: 100%;
}

/* 验证码 */
/* 布局 */
.login-yzm #canvas,#yzm-text{
	float: left;
}

.login-yzm #yzm-text,#yzm-input{
	position: relative;
	left: 50px;
	top: 10px;
}

/* 输入框样式 */
.login-yzm #yzm-input{
	height: 30px;
	width: 80px;
}

js代码

var canvas = document.getElementById("canvas"); //演员
var context = canvas.getContext("2d"); //舞台,getContext() 方法可返回一个对象,该对象提供了用于在画布上绘图的方法和属性。
var input = document.getElementById("yzm-input"); //获取输入框
var num //定义容器接收验证码

//主函数
$(document).ready(main)

function main() {
	//验证用户名是否符合规格
	validation_userName()
	draw();
}

//输入框区域
function validation_userName() {
	var timer = null;
	// 输入的值
	var editor_start = 0;    
	// 对比时间的值 
	var editor_end = 0;
	$("#userName").keyup(function() {
	    clearTimeout(timer) // 每次滚动前 清除一次
	    timer = setTimeout(save_html_message_fun(), 2000);
	})
}

function save_html_message_fun() {
	editor_end = $("#userName").val();
	if(editor_end.length < 8) {
		//输入不满足条件时
		$('#userName').nextAll('div').append("<style>.input-data .underlineN::before{background: red}</style>")
	} else {
		$('#userName').nextAll('div').append("<style>.input-data .underlineN::before{background: #4158D0}</style>")
	}
}

// 被动触发触发事件
// 为空判断
function eqNull() {
	var userName = $('#userName').val()
	if(userName == '') {
		alert("用户名不能为空!")
	} else if(userName.length < 8) {
		alert("请输入正确的账号")
	} else if($('#userPass').val() == '') {
		alert("密码不能为空!")
	} else if($("#yzm-input").val() != num){
		reset()
		alert("验证码错误!")
	} else {
		alert("ok" + userName)
	}
}

//验证码区域
canvas.onclick = function() {
	reset()
}

function reset() {
	context.clearRect(0, 0, 120, 40); //在给定的矩形内清除指定的像素
	draw();
}

// 随机颜色函数
function getColor() {
	var r = Math.floor(Math.random() * 256);
	var g = Math.floor(Math.random() * 256);
	var b = Math.floor(Math.random() * 256);
	return "rgb(" + r + "," + g + "," + b + ")";
}

function draw() {
	context.strokeRect(0, 0, 120, 40); //绘制矩形(无填充)
	var aCode = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
	// 绘制字母
	var arr = [] //定义一个数组用来接收产生的随机数
	for (var i = 0; i < 4; i++) {
		var x = 20 + i * 20; //每个字母之间间隔20
		var y = 20 + 10 * Math.random(); //y轴方向位置为20-30随机
		var index = Math.floor(Math.random() * aCode.length); //随机索引值
		var txt = aCode[index];
		context.font = "bold 20px 微软雅黑"; //设置或返回文本内容的当前字体属性
		context.fillStyle = getColor(); //设置或返回用于填充绘画的颜色、渐变或模式,随机
		context.translate(x, y); //重新映射画布上的 (0,0) 位置,字母不可以旋转移动,所以移动容器
		var deg = 90 * Math.random() * Math.PI / 180; //0-90度随机旋转
		context.rotate(deg); // 	旋转当前绘图
		context.fillText(txt, 0, 0); //在画布上绘制“被填充的”文本
		context.rotate(-deg); //将画布旋转回初始状态
		context.translate(-x, -y); //将画布移动回初始状态
		arr[i] = txt //接收产生的随机数
	}
	num = arr[0] + arr[1] + arr[2] + arr[3] //将产生的验证码放入num
	// 绘制干扰线条
	for (var i = 0; i < 8; i++) {
		context.beginPath(); //起始一条路径,或重置当前路径
		context.moveTo(Math.random() * 120, Math.random() * 40); //把路径移动到画布中的随机点,不创建线条
		context.lineTo(Math.random() * 120, Math.random() * 40); //添加一个新点,然后在画布中创建从该点到最后指定点的线条
		context.strokeStyle = getColor(); //随机线条颜色
		context.stroke(); // 	绘制已定义的路径
	}
	// 绘制干扰点,和上述步骤一样,此处用长度为1的线代替点
	for (var i = 0; i < 20; i++) {
		context.beginPath();
		var x = Math.random() * 120;
		var y = Math.random() * 40;
		context.moveTo(x, y);
		context.lineTo(x + 1, y + 1);
		context.strokeStyle = getColor();
		context.stroke();
	}

}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ch8_2_CPU的指令周期,流水线技术

1.  指令周期 指令周期是指_ CPU从主存取出一条指令, 分析指令&#xff0c;加上执行这条指令的时间。 1.1指令周期 指令周期&#xff1a; 是指cpu&#xff0c;从内存中取出指令&#xff0c;并且执行一条指令所需要的全部时间。 比如 从内存单元中&#xff0c;取出操作数&…

【使用Neo4j进行图数据可视化】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

“面试造火箭,入职拧螺丝”2023最新最全的Java开发八股文合集来了

前言 金三银四招聘旺季马上就到了&#xff0c;不知道大家是否准备好了&#xff0c;面对金三银四的招聘旺季&#xff0c;如果没有精心准备那笔者认为那是对自己不负责任&#xff1b;就我们 Java 程序员来说&#xff0c;多数的公司总体上面试都是以自我介绍项目介绍项目细节/难点…

Java016——Java输入输出语句

一、输出语句 Java常用的输出语句有三种&#xff1a; 1&#xff09;System.out.println(); 换行输出&#xff0c;输出后会自动换行。 //示例 System.out.println("Hello"); System.out.println("World");//输出 Hello World2&#xff09;System.out.pri…

LIN-物理层(收发器)

文章目录 一、显性和隐性二、LIN的供电电压说明三、LIN通道数3.1 单通道3.2 双通道3.3 四通道 一、显性和隐性 LIN总线协议规定其物理层收发器的显性&#xff08;Dominant , 逻辑 “ 0”&#xff0c;电气特性为GND(0V)&#xff09;和隐性电平&#xff08;Recessive , 逻辑 “ …

cgi接口原理(boa服务器)

CGI&#xff1a;通用网关接口&#xff08;Common Gateway Interface&#xff09;是一个Web服务器主机提供信息服务的标准接口。通过CGI接口&#xff0c;Web服务器就能够获取客户端提交的信息&#xff0c;转交给服务器端的CGI程序进行处理&#xff0c;最后返回结果给客户端。 b…

字符串概述

字符串 一、API二、字符串2.1字符串的构造方法2.2 字符串构造时的内存2.2.1 直接赋值时的内存模型2.2.2 由new创建时的内存模型 2.3 字符串的比较三、StringBuilder 一、API 目前已学过的两个API&#xff1a;Random和Scanner。 对记不清的API可以去JDK-API帮助文档进行查找。 …

基于matlab对现代相控阵系统中常用的子阵列进行建模分析

一、前言 本示例说明如何使用相控阵系统工具箱对现代相控阵系统中常用的子阵列进行建模并进行分析。 相控阵天线与传统碟形天线相比具有许多优势。相控阵天线的元件更容易制造;整个系统受组件故障的影响较小;最重要的是&#xff0c;可以向不同方向进行电子扫描。 但是&#xff…

分布式系统学习第一天 fastDFS框架学习

目录 1. 项目架构图 1.1 一些概念 1.2 项目架构图 2. 分布式文件系统 2.1 传统文件系统 3. FastDFS 3.1 fastDFS介绍 3.2 fastDFS安装 3.3 fastDFS配置文件 3.4 fastDFS的启动 3.5 对file_id的解释 4. 上传下载代码实现 5. 源码安装 - 回顾 1. 项目架构图 1.1 一…

JDK8-2-流(2)- 流操作

JDK8-2-流&#xff08;2&#xff09;- 流操作 上篇 JDK8-2-流&#xff08;1&#xff09;-简介 中简单介绍了什么是流以及使用流的好处&#xff0c;本篇主要介绍流的操作类型以及如何操作。 如何返回一个流 ① collection.stream 即调用集合 java.util.Collection 下的 stre…

大学生如何申请一台免费服务器?

大学生如何申请一台免费服务器&#xff1f;阿里云学生服务器免费申请&#xff1a;高效计划&#xff0c;可以免费领取一台阿里云服务器&#xff0c;如果你是一名高校学生&#xff0c;想搭建一个linux学习环境、git代码托管服务器&#xff0c;或者创建个人博客网站记录自己的学习…

【小米技术分享】MySQL:一条数据的存储之旅

大家好&#xff0c;我是你们的小米&#xff0c;一个热爱技术分享的活泼小伙伴&#xff01;今天&#xff0c;我来给大家揭开一个神秘的面纱&#xff0c;带你们深入了解一下MySQL数据库是如何保存一条数据的。 客户端 首先&#xff0c;让我们从客户端&#xff08;Client&#x…

【雕爷学编程】Arduino动手做(114)---US-015高分辨超声波模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

【免费】【sci】考虑不同充电需求的电动汽车有序充电调度方法(含matlab代码)

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现sci文献《A coordinated charging scheduling method for electric vehicles considering different charging demands》&#xff0c;主要实现电动汽车协调充电调度方法&#xff0c;该方法主要有以…

如何使用PyTorch 在 OpenAI Gym 上的 CartPole-v0 任务上训练深度 Q 学习(DQN)智能体

强化学习&#xff08;DQN&#xff09;教程 本教程说明如何使用 PyTorch 在 OpenAI Gym 上的 CartPole-v0 任务上训练深度 Q 学习&#xff08;DQN&#xff09;智能体。 任务 智能体必须在两个动作之间做出决定-向左或向右移动推车-以便使与之相连的杆子保持直立。 您可以在 G…

存储笔记7 NAS

NAS  Describe NAS, its benefits and components  Discuss different NAS implementations  Describe NAS file-sharing protocols  Discuss NAS management options File Sharing Environment 文件系统&#xff1a;存储组织数据文件的结构化方式文件共享 网络存储…

python3GUI--图片浏览器By:PyQt5(附源码)

文章目录 一&#xff0e;前言二&#xff0e;展示1.主界面2.添加图片3.多级目录4.查看文件信息5.调整UI布局 三&#xff0e;源代码1.image_god_main_v.py2.image_god_GUI.py 四&#xff0e;总结 一&#xff0e;前言 本次使用PyQt5开发一款图片浏览器&#xff0c;本篇主要练习QD…

AIGC新时代,注意政策走向,产业方向,拥抱可信AI。需要了解基本理论,基础模型,前沿进展,产品应用,以及小小的项目复现

AIGC&#xff08;AI-Generated Content&#xff0c;AI生成内容&#xff09;是指基于生成对抗网络&#xff08;GAN&#xff09;、大型预训练模型等人工智能技术的方法&#xff0c;通过对已有数据进行学习和模式识别&#xff0c;以适当的泛化能力生成相关内容的技术。类似的概念还…

免费、不用部署SD:AI二维码制作教程

大家好&#xff0c;我是可夫小子&#xff0c;《小白玩转ChatGPT》专栏作者&#xff0c;关注AIGC、读书和自媒体。 最近&#xff0c;风格化的AI二维码&#xff0c;应该没少见吧。生成的原理大家大概也知道&#xff0c;主要通过stable diffusion和一些插件来完成&#xff0c;但对…

【Linux】HTTPS协议

目录 &#x1f37a;前言&#x1f37b;HTTPS协议原理&#x1f380;1、概念&#x1f381;2、加密和解密&#x1f382;3、常见加密方式&#x1f341;3.1、对称加密&#x1f342;3.2、非对称加密 &#x1f383;4、数据摘要和数据指纹&#x1f364;5、HTTPS工作原理&#x1f338;5.1…