随手写系列——写一个凯撒密码转换页面

2023-11-19


先展示效果

(因为主要是实现功能,所以CSS写的很粗糙)
请添加图片描述


H5编写

基础结构如下:
在这里插入图片描述

先构成最外面的大盒子.box,然后.inner>p装入注意事项,接着包含一个form,里面是一个table(存放输入框)+.buts(存放按钮)。

<div class="box">
	<div class="inner">
		<p>
			<h3>注意事项:</h3>
				1、在输入框中输入一串字符串<br />
				2、点击按钮translation_forward将其转换为凯撒密码的明文<br />
				3、点击按钮translation_back将其转换为凯撒密码的密文<br />
		</p>    
	</div>
	<form action="">
		<table>
			<tr>
				<!-- 通过label 标签增大用户点击到输入框的面积 -->
				<td><label for="user_input">请输入:</label></td>
				<td><input type="text" name="user_input" id="user_input"></td>
			</tr>
			<tr>
				<td><label for="translation">转换后的明文:&nbsp;&nbsp;</label></td>
				<td><input type="text" name="translation" id="translation"></td>
			</tr>
			<tr>
				<td><label for="translation">转换后的密文:&nbsp;&nbsp;</label></td>
				<td><input type="text" name="translation" id="translation"></td>
			</tr>
		</table>
		<div class="buts">
			<!-- 此处要注意必须将按钮的type值修改为button,否则默认为submit,会提交,这样点击按钮后页面会刷新 -->
			<!-- 所以结果出现的时间很短暂,无法满足效果 -->
			<button type="button">translation_forward</button>    
			<button type="button">translation_back</button>
			<button type="reset">reset</button>       
		</div>
	</form>    
</div>

C3编写

样式表没啥说的,写的挺冗余的,希望有好兄嘚改进后能发我瞻仰瞻仰。

/* 全局设定,清除浏览器默认样式值 */
* {
    margin: 0;
    padding: 0;
    border: 0;
    box-sizing: border-box;
}

/* 将大盒子放在一个页面居中的位置 */
.box {
    /* position: relative; */
    /* left: 50%; */
    /* margin-left: -200px; */
    margin: 200px auto 0;
    width: 500px;
    height: 400px;
    border: 2px solid blue;
    background-color: rgba(255, 1, 200, .3);  
}

/* 注意事项 */
.inner {
    width: 100%;
    height: 150px;
    margin-bottom: 20px;
    font-size: 18px;
    font-family: "楷体";
    line-height: 2em;
    /* 2em:因为此处是汉字,汉字是方块字,宽和高的长度相等,所以间距就是两个汉字的高度 */
}

input,
button {
    margin: 0 auto 5px;
    border: 1px solid red;
    height: 40px;
    line-height: 40px;
    text-align: center;
    font-size: 15px;
    border-radius: 6px;
}

/* 此处的100%是继承的 第二个 td的宽 */
input {
    width: 100%;
}

button {
    width: 130px;
    margin: 0 5px 0 5px;
    font-family: "Times New Roman";
}

/* input 宽继承此处 */
tr td:last-child{
    width: 300px;
    margin: 0 0 0 10px;
}

.buts{
    margin: 25px auto 0 30px;
}

JS编写——方法一:过程版

首先,我们通过querySelectAll() 获取所有的inputbutton元素,并在后面为其绑定事件。

定义全局变量user_input记录用户输入,plaintext记录通过按钮translation_forward求得的明文,cryptograph记录通过按钮translation_back求得的密文。

alphabet_xxx 记录的是大小写字母表,用于后面为每一个大/小写字母进行转换。(我知道很繁琐,但你先别繁琐,隔离+阳 一个月多了,能记起这点儿已经不错了~(doge)~~ )

// 获取元素
var text = document.querySelectorAll('input');
var submit = document.querySelectorAll('button');
var user_input = "";     //用户输入的内容
var plaintext = "";   // 明文
var cryptograph = "";   // 密文
var alphabet_lower = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
var alphabet_upper = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];

接着是绑定事件,先为用户输入框绑定一个“失去焦点”事件,每当用户点击输入框之外区域失去输入框焦点后,将输入框中的内容存入user_input中。

// 绑定事件
text[0].addEventListener('blur', function(){
    user_input = text[0].value;
    //console.log(user_input);
});

接着为第一个按钮translation_forward绑定事件,当发生“onclick”事件后,进行运算并输出转换后的明文。

循环遍历每一个字母,先判断是大写还是小写字母,并赋值相应的字母表,接着确定转换后的字母在字母表中的下标,并将其添加到明文plaintext中,最后结束循环并将结果输出到结果框中。

// 后面第三个字符代替(只需要获取到输入的字符串对应位置字母的ASCLL码,进行加减三操作即可)
submit[0].addEventListener('click', function(){
    plaintext = "";   //初始化
    for(var i = 0; i < user_input.length; i++){
        var alphabet = (65 <= user_input.charCodeAt(i) && user_input.charCodeAt(i) <= 90 )? alphabet_upper : alphabet_lower;
        var j = alphabet.indexOf(user_input[i]);
        //console.log(j);
        //j = ((j + 1 + 26 - 3) % 26) - 1;
        //j = j > 0? j : (j + 26) % 25;   // 去除j-1=-1的情况  error
        j = j - 3 > 0? j - 3 : (j - 3 + 26) % 26;
        //console.log(j);
        plaintext += alphabet[j];
    };
    //console.log(plaintext);
    text[1].value = plaintext;
});

同理,为第二个按钮绑定点击事件,只是其中确定下标的判断条件有些许区别,其余的内容均相同,最后输出cryptograph到第二个结果框中。

submit[1].addEventListener('click', function(){
    cryptograph = "";    //初始化
    for(var i = 0; i < user_input.length; i++){
        var alphabet = (65 <= user_input.charCodeAt(i) && user_input.charCodeAt(i) <= 90 )? alphabet_upper : alphabet_lower;
        var j = alphabet.indexOf(user_input[i]);
        j = (j + 3) % 26;
        cryptograph += alphabet[j];
    }
    //console.log(cryptograph);
    text[2].value = cryptograph;
})

JS编写——方法二:对象版

暂时有点errors,等重新学学再说。希望找到工作的我可以回来补全这篇文章。


代码获取

GitHub地址:https://github.com/chenfeng-hx/FiiNote


参考文章
CSS特效(二):利用html和css制作毛玻璃特效和按钮动画效果
html设置盒子水平垂直居中,盒子水平垂直居中10种方法
text-indent:2em详解


写在最后:
首先,如果本篇文章有任何错误,烦请读者告知!不胜感激!
其次,本篇文章仅用于日常学习以及学业复习,如需转载等操作请告知作者(我)一声!
最后,本文会持续修改和更新,如果对本分栏的其他知识也感兴趣,可以移步目录导航专栏,查看本分栏的目录结构,也更方便对于知识的系统总结!
兄弟姐妹们,点个赞呗!
感谢!笔芯!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

随手写系列——写一个凯撒密码转换页面 的相关文章

随机推荐

  • java中如何将Long类型转为Integer类型

    注意不能直接在前面加个 int 而是 将Long型转换为int型 这里的Long型是包装类型 Long a 10 int b a intValue 即long intValue
  • Hx711调试过程

    1 体重板子最开始出现的问题 无法下载程序 指示灯不亮 解决办法 检查电源复位晶振 发现晶振还有 boot键坏了 2 问题 下载进程序以后 板子通过串口发到电脑上的数据不变 解决办法 先是查了关于HX711的各种资料 了解到 HX711芯片
  • pycharm内存不足时如何修改设置?

    Help gt Find Action gt type VM Options gt Click Edit Custom VM Options Pycharm 2016 2 will open the appropriate vmoption
  • MFC中操作Word文档

    首先我们需要导入word类库 电脑上需要安装了word 左击项目 点击类向导 添加类 C 选择类型库中的MFC类 本文章案例可点击下载 然后选择文件 位置选择从office安装目录中找到MSWORD OLB文件 然后点击 gt gt 添加所
  • 源码探索-ArrayList

    ArrayList 继承与实现关系 数组的相关属性 ArrayList底层是一个Object 数组 既然是数组 那么底层的工具类大多是会用到Arrays工具类去实现 函数探索 来看看构造函数 有三个构造函数 分别对应不同的生成内容 来看看添
  • linux 2.6.30 内核编译 提示 ‘make[1]: *** [arch/x86/vdso/vdso.so.dbg] Error 1’ 错误

    linux 2 6 30 编译出现如下错误 解决方案 打开 linux 2 6 30 arch x86 vdso Makefile 文件 1 修改28行 将 m elf x86 64 修改为 m64 2 修改72行 将 m elf i386
  • 语音识别学习记录 [再谈频率混叠(定量分析、离散采样后频谱的周期延拓)]

    前几天在语音识别学习记录 传说中的频率混叠和Nyquist定理 定性理解 中简单理解了一下频率混叠的原因 但是也发现了很多不明白的问题 1 为什么信号经过傅里叶变换后在频域是关于y轴对称的 这个问题的回答已经写在语音识别学习记录 信号经傅里
  • vue的指令

    Vue 的指令 一 Vue 的指令 1 指令的概念 指令 Directives 是 vue 为开发者提供的模板语法 用于辅助开发者渲染页面的基本结构 vue 中的指令按照不同的用途可以分为如下 6 大类 内容渲染指令 属性绑定指令 事件绑定
  • SQL 查询指定行数的数据。

    今天遇到一个关于 查询指定行数的数据 的sql查询语句问题 突然发现以前没怎么接触过 刚才想起来了 赶紧看了下文档 又上网搜了下 有了下面的东西 不知道有没有什么地方不对 oracle 先看一下文档中关于any和all的例子 很不错噢 An
  • Pytorch 深度强化学习模型训练速度慢

    最近一直在用Pytorch来训练深度强化学习模型 但是速度一直很慢 Gpu利用率也很低 一 起初开始在训练参数 batch size 200 graph size 40 epoch size 100000 训练速度一个epoch要4h 人麻
  • node学习openai库入门及使用(一)

    第一章 node学习openai库入门及使用 一 文章目录 第一章 node学习openai库入门及使用 一 前言 一 node js的openai库是什么 二 使用步骤 1 引入库 2 发送请求 总结 前言 众所周知 目前chatgpt已
  • cuda8.0使用nvcc编译程序出现warning:The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated的解决办法

    初学CUDA 使用的NVIDIA显卡是Tesla K80 安装的是cuda8 0 写了一个简单的测试程序 使用nvcc编译 指令如下 nvcc cudaPrintDeviceInfo cu o cudaPrintDeviceInfo 本以为
  • docker快速学习--docker compose服务编排--06

    一 服务编排 1 1 概念 按照一定的业务规则批量管理容器 1 3 问题 微服务架构的应用系统中一般包含若干个微服务 每个微服务一般都会部署多个实例 如果每个微服务都要手动启停 维护的工作量会很大 1 要从Dockerfile build
  • go踩坑——no required module provides package go.mod file not found in current directory or any parent

    背景 准备运行下面代码 package main import github com gin gonic gin func main 创建一个默认的路由引擎 r gin Default GET 请求方式 hello 请求的路径 当客户端以G
  • C++实现复数类

    主要还是练习封装 做一个demo 下一步会实现string类 include
  • ECCV 2022

    作者丨人脸人体重建 来源丨人脸人体重建 编辑丨极市平台 极市导读 本文围绕3D人脸重建的评估方式进行了重新的思考和探索 作者团队通过构建新数据集RELAY 囊括了更丰富以及更高质量的脸部区域信息 并借助新的流程对先前的数十个重建算法 3DM
  • 题解模板

    题目链接 题目描述 输入描述 输出描述 示例1 输入 输出 示例2 输入 输出 说明 解决思路 总结结论 已知条件 思路里程 实现过程 代码
  • 一些大厂的开源平台

    百度 http fex baidu com http efe baidu com 饿了么 https fe ele me 腾讯 http www alloyteam com 美团 https tech meituan com 滴滴 http
  • mongodb按照字段模糊查询方法

    数据库直接查询 db student find name regex jack options i db student find name regex jack i db student find name jack i 开源组件使用 g
  • 随手写系列——写一个凯撒密码转换页面

    文章目录 先展示效果 H5编写 C3编写 JS编写 方法一 过程版 JS编写 方法二 对象版 代码获取 先展示效果 因为主要是实现功能 所以CSS写的很粗糙 H5编写 基础结构如下 先构成最外面的大盒子 box 然后 inner gt p装