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

news2024/11/19 1:33:40

文章目录

  • 先展示效果
  • H5编写
  • C3编写
  • JS编写——方法一:过程版
  • JS编写——方法二:对象版
  • 代码获取


先展示效果

(因为主要是实现功能,所以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详解


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

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

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

相关文章

【Flutter】之便于提高开发效率的周边库和轮子

GetX 状态管理 GetX包含很多功能&#xff0c;各种弹出widget、路由管理、国际化、Utils、状态管理等。 基于路由管理 1. 添加到项目中 1.1. 将此添加到pubspec.yaml文件中。 get: 4.1.4 1.2. 在命令行中运行 flutter packages get 1.3. 在MaterialApp前面加上 “Get”&…

centos7 yum安装postgreSQL

安装环境centos7.6 安装步骤&#xff1a; 1、安装postgresql&#xff1a; yum install postgresql-server 2、安装postgresql 扩展包&#xff1a; yum install postgresql-contrib 3、初始化&#xff1a; postgresql-setup initdb 4、启动开机自启动&#xff1a; systemc…

说话人识别神经网络推理方式

概述 说话人识别是一个序列总结&#xff08;Sequence Summarization&#xff09;任务&#xff0c;输入是音频&#xff08;或者说&#xff0c;声学特征的序列&#xff09;&#xff0c;输出是说话人的嵌入码&#xff0c;有的神经网络可以输入一对音频&#xff0c;直接输出这对音…

java微信支付v3系列——9.微信支付之商家转账API

这个功能就比较复杂了&#xff0c;首先是得有90天的资金流水才能开通&#xff0c;其次开通后还需要在官网进行配置&#xff0c;不能直接调用&#xff0c;并且限制了IP地址。 如下图所示&#xff0c;首先需要进行产品设置&#xff0c;将里面都设置好后才能进行开发&#xff0c;…

feign 调用常见问题避坑指南!

摘要&#xff1a;主要是总结了一下这段时间在使用 feign 的过程中的遇到的一些坑点。一、Get请求自动转化成POST的问题1、client 请求参数没有加上 RequestParam 注解问题代码&#xff1a;GetMapping("/showName") String showName(String name);错误提示&#xff1a…

让 APISpace 告诉你什么场景使用什么API

Q1&#xff1a;某商家打算搞年底促销活动&#xff0c;需要将活动信息通过短信的形式通知给用户&#xff0c;这个场景可以用什么接口&#xff1f; 发送通知类的短信&#xff0c;可以使用 通知短信 API~ 通知短信&#xff0c;支持三大运营商&#xff0c;虚拟运营商短信发送&…

第14章 并发控制与恢复

第14章 并发控制与恢复 考试范围&#xff1a; 14.1-14.3, 14.8-14.11 考试题型&#xff1a; 事务操作 考试内容&#xff1a; 1、锁/共享锁/排它锁的概念 2、多粒度锁 Multiple Granularity 3、两阶段封锁协议 The Two-Phase Locking Protocol 两段锁协议是指同一事务对任何…

2.前端笔记-JS-JS3种书写位置、注释、输入输出

书写位置 行内式嵌入式外部文件引入 1、行内式JS 可以将单行或少量的JS代码写在HTML标签的事件属性中&#xff08;以on开头的属性&#xff09;&#xff0c;如onclick单双引号使用&#xff1a;HTML中推荐双引号&#xff0c;JS中推荐单引号&#xff0c;如 <input type&quo…

vue实现将自己网站(h5链接)分享到微信中形成小卡片(超详细)

大家好&#xff0c;我是雄雄。 前言 我们在分享公众号信息到微信或者群中的时候&#xff0c;会出现一个小卡片&#xff0c;如下所示&#xff1a; 但是呢&#xff0c;这种小卡片只能走微信的接口来实现&#xff0c;比如我们从公众号、小程序中分享的内容可以是这样的。如果我们…

0基础转行,四个月,改变了我的人生!

转行对于很多人而言都是一个新的开始&#xff0c;但有的人是决定了立马去做&#xff0c;而有的人则是犹犹豫豫&#xff0c;我考虑考虑吧、还没有决定好、过段时间再说吧…… 就这样&#xff0c;相似情况的两个人&#xff0c;最后有了不同的结果。 很多人总是以我很忙、学历不高…

自学100天,零基础转行软件测试,我要以更好的姿态奔赴下一场山海!

三年大专一场空 专业是电子商务&#xff0c;18年毕业&#xff0c;当时在报考时时觉得电子商务挺高大上的&#xff0c;觉得电商肯定会有前途&#xff0c;以后毕业肯定好找工作&#xff0c;跟大多数人一样&#xff0c;我开始幻想我以后毕业以后的纸醉金迷的生活&#xff0c;我以…

模数转换器ADC

模数转换器ADC F28335内部的ADC模块是一个12位分辨率的、具有流水线结构的模数转换器,其结构框图如图11-1所示。从图11-1可以看到,F28335的ADC模块一共具有16个采样通道,分成了两组,一组为ADCINAO~ ADCINA7,另一组为ADCINBO~ADCINB7。A组的通道使用采样保持器A,也就是图…

【SCI论文解读复现NO.1】基于Transformer-YOLOv5的侧扫声纳图像水下海洋目标实时检测

前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

【小学信息技术教资面试】《制作通讯录》教案

1.题目&#xff1a;制作通讯录 2.内容&#xff1a; 3.基本要求&#xff1a; &#xff08;1&#xff09;使用任务驱动法进行教学。 &#xff08;2&#xff09;掌握表格的插入和信息的填写。 &#xff08;3&#xff09;试讲时间是10分钟。 《制作通讯录》教案 一、教学目标&am…

我国核桃种植深加工行业供给较为充足 未来大健康消费时代将带来广阔市场

根据观研报告网发布的《2022年中国核桃种植深加工行业分析报告-行业竞争策略与发展动向研究》显示&#xff0c;核桃加工分为初加工与深加工。其中核桃深加工包括核桃油的压榨、核桃蛋白粉的制备、以核桃仁为原料生产休闲食品、以核桃青皮、壳等为原料生产加工日化产品等&#x…

Java agent 使用

一、前言 于一个即将上线的应用来说&#xff0c;系统监控是必不可少的&#xff0c;为什么需要监控呢&#xff1f;应用是跑在服务器上的&#xff0c;应用在运行过程中会发生各自意想不到的问题&#xff0c;像大家熟知的OOM&#xff0c;mysql故障&#xff0c;服务器宕机&#xff…

SpringBoot+Vue实现前后端分离的教务评教系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

将spark的数据保存到MySQL

文章目录前言环境的准备是必要的下载解压放置文件代码书写注意事项结束语前言 我们用spark对数据进行分析和提取数据后要对得到的数据进行保存接下来的内容是将数据保存到MySQL数据库中 环境的准备是必要的 下载 &#xff08;本小博主已经为看官大人准备好了下载地址点击下载…

【JVM实战系列】「监控调优体系」实战开发arthas-spring-boot-starter监控你的微服务是否健康

前提介绍 相信如果经历了我的上一篇Arthas的文章[【JVM实战系列】「监控调优体系」针对于Alibaba-Arthas的安装入门及基础使用开发实战指南]之后&#xff0c;相信你对Arthas的功能和使用应该有了一定的理解了。那么我们就要进行下一步的探索功能。 Arthas对于SpringBoot2的支…

无效回表谁的锅?存储引擎:这事儿不赖我

明确场景 要回答这个问题&#xff0c;我们一般分几步来走&#xff1a; 1.确认问题&#xff0c;对齐Sql语句&#xff1b; 2.解答问题本身&#xff0c;也就是时间复杂度分析&#xff1b; 3.针对本身提出这个场景&#xff0c;可能出现的性能瓶颈进行分析&#xff1b; 4.针对瓶…