网页方向第四次培训总结

HTML、CSS、JavaScript实现计算器

一、基本效果展示

计算器Demo

二、基本框架确定

整个页面由一个表单组成,分为三类输入框,一类输入框type为“button”类型,表示输入数字或者是运算符;一类输入框type为“text”类型,用于显示数字以及运算结果,最后一类输入框type为“button”类型,表示特殊功能即清零与“=”。

代码实现:

<body>
<!--
    分为两类,一类是数字btn number,一类是运算符btn operator,一类是显示框 display
-->
<div class="center">
        <h1>HTML CSS, JavaScript 计算器</h1>
        <a href="https://github.com/guuibayer/simple-calculator" target="_blank"><i class="fa fa-github"></i></a>
        <form name="calculator">
            <input type="button" id="clear" class="btn other" value="C" onclick="clear2();">
            <input type="text" id="display">
                <br>
            <input type="button" class="btn number" value="7" onclick="get(this.value);">
            <input type="button" class="btn number" value="8" onclick="get(this.value);">
            <input type="button" class="btn number" value="9" onclick="get(this.value);">
            <input type="button" class="btn operator" value="+" onclick="get(this.value);">
                <br>
            <input type="button" class="btn number" value="4" onclick="get(this.value);">
            <input type="button" class="btn number" value="5" onclick="get(this.value);">
            <input type="button" class="btn number" value="6" onclick="get(this.value);">
            <input type="button" class="btn operator" value="*" onclick="get(this.value);">
                <br>
            <input type="button" class="btn number" value="1" onclick="get(this.value);">
            <input type="button" class="btn number" value="2" onclick="get(this.value);">
            <input type="button" class="btn number" value="3" onclick="get(this.value);">
            <input type="button" class="btn operator" value="-" onclick="get(this.value);">
                <br>
            <input type="button" class="btn number" value="0" onclick="get(this.value);">
            <input type="button" class="btn operator" value="." onclick="get(this.value);">
            <input type="button" class="btn operator" value="/" onclick="get(this.value);">         
            <input type="button" class="btn other" value="=" onclick="getres();">
        </form>
    </div>
</body>


三、基本功能实现

  1. 设定全局变量Value,用于储存输入数字以及运算符
  2. get(value)函数,即得到相应的值并显示在文本框中(每得到相应的值就加到全局变量中,形成一个字符型等式)
  3. getres()函数,函数使用eval(Value)计算结果,注意,在getres()函数中,分为两步,第一步为清楚原始文本框的内容,第二步为将计算结果显示到文本框
  4. clear2()函数,完成清零功能,即清空文本框中内容,清空全局变量内容
  5. 代码实现:
    <script type="text/javascript">
            var value1="";
            function get(value){
                value1+=value;
                document.getElementById("display").value +=value;
            }
            function getres(){
                document.getElementById("display").value = "";
                document.getElementById("display").value +=eval(value1);
            }
            function clear2(){
                document.getElementById("display").value = "";
                value1=""; 
        }
    </script>

PS:关于eval()

定义和用法: eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
语法: eval(string) 参数 描述 string 必需。要计算的字符串,其中含有要计算的 JavaScript表达式或要执行的语句。
返回值 :通过计算 string 得到的值(如果有的话)。
说明 :该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval()函数传递 String 对象来作为参数。如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。

抛出 :如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。如果非法调用 eval(),则抛出 EvalError 异常。如果传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者。

四、总体代码实现(包括css样式)

<!DOCTYPE html>
<html>
<head>
    <title>计算器</title>
    <style type="text/css">
    * {
    border: none;
    font-family: 'Open Sans', sans-serif;
    margin: 0;
    padding: 0;
}
body {

}
.center {
    background-color: #fff;
    border-radius: 50%;
    height: 600px;
    margin: auto;
    width: 600px;
}
h1 {
    color: #495678;
    font-size: 30px;    
    margin-top: 20px;
    padding-top: 50px;
    display: block;
    text-align: center;
    text-decoration: none;
}
a {
    color: #495678;
    font-size: 30px;    
    display: block;
    text-align: center;
    text-decoration: none;
    padding-top: 20px;
}
form {
    background-color: #495678;
    box-shadow: 4px 4px #3d4a65;
    margin: 40px auto;
    padding: 40px 0 30px 40px;  
    width: 280px;
}
.btn {
    outline: none;
    cursor: pointer;
    font-size: 20px;
    height: 45px;
    margin: 5px 0 5px 10px;
    width: 45px;
}
.btn:first-child {
    margin: 5px 0 5px 10px;
}
.btn, #display, form {
    border-radius: 25px;
}
#display {
    outline: none;
    background-color: #98d1dc;
    box-shadow: inset 6px 6px 0px #3facc0;
    color: #dededc;
    font-size: 20px;
    height: 47px;
    text-align: right;
    width: 165px;
    padding-right: 10px;
    margin-left: 10px;
}
.number {
    background-color: #72778b;
    box-shadow: 0 5px #5f6680;
    color: #dededc;
}
.number:active {
    box-shadow: 0 2px #5f6680;
    -webkit-transform: translateY(2px);
    -ms-transform: translateY(2px);
    -moz-tranform: translateY(2px);
    transform: translateY(2px);
}
.operator {
    background-color: #dededc;
    box-shadow: 0 5px #bebebe;
    color: #72778b;
}
.operator:active {
    box-shadow: 0 2px #bebebe;
    -webkit-transform: translateY(2px);
    -ms-transform: translateY(2px);
    -moz-tranform: translateY(2px);
    transform: translateY(2px);
}
.other {
    background-color: #e3844c;
    box-shadow: 0 5px #e76a3d;
    color: #dededc;
}
.other:active {
    box-shadow: 0 2px #e76a3d;
    -webkit-transform: translateY(2px);
    -ms-transform: translateY(2px);
    -moz-tranform: translateY(2px);
    transform: translateY(2px);
}
    </style>
    <script type="text/javascript">
        alert("ssss");
        var value1="";
        function get(value){
            value1+=value;
            document.getElementById("display").value += value;
        }
        function getres(){
            document.getElementById("display").value = "";
            document.getElementById("display").value += eval(value1);
        }
        function clear2(){
            document.getElementById("display").value = "";
            value1=""; 
        }
    </script>
</head>
<body>
<div id="center">
<form>
<input type="button" id="clear" class="btn other" value="C" onclick="clear2();">
            <input type="text" id="display">
                <br>
            <input type="button" class="btn number" value="7" onclick="get(this.value);">
            <input type="button" class="btn number" value="8" onclick="get(this.value);">
            <input type="button" class="btn number" value="9" onclick="get(this.value);">
            <input type="button" class="btn operator" value="+" onclick="get(this.value);">
                <br>
            <input type="button" class="btn number" value="4" onclick="get(this.value);">
            <input type="button" class="btn number" value="5" onclick="get(this.value);">
            <input type="button" class="btn number" value="6" onclick="get(this.value);">
            <input type="button" class="btn operator" value="*" onclick="get(this.value);">
                <br>
            <input type="button" class="btn number" value="1" onclick="get(this.value);">
            <input type="button" class="btn number" value="2" onclick="get(this.value);">
            <input type="button" class="btn number" value="3" onclick="get(this.value);">
            <input type="button" class="btn operator" value="-" onclick="get(this.value);">
                <br>
            <input type="button" class="btn number" value="0" onclick="get(this.value);">
            <input type="button" class="btn operator" value="." onclick="get(this.value);">
            <input type="button" class="btn operator" value="/" onclick="get(this.value);">         
            <input type="button" class="btn other" value="=" onclick="getres();">

</form>
</div>
</body>
</html>


JavaScript补充内容

一、正则表达式

1.1 基本概念

正则表达式是由一个字符序列形成的搜索模式。当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。正则表达式可以是一个简单的字符,或一个更复杂的模式。正则表达式可用于所有文本搜索和文本替换的操作。

1.2 基本语法

语法: /正则表达式主体/修饰符(可选)

实例:var patt = /runoob/i

runoob 是一个正则表达式主体 (用于检索)。
i 是一个修饰符 (表示搜索不区分大小写)。

1.3 几个实例

在 JavaScript 中,正则表达式通常用于两个字符串方法 : search() 和 replace()。

search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。

replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

将/World/i换为“World”会是一样的结果。字符串参数会转换为正则表达式

1.3.2 replace()

将/World/i换为“World”也会是一样的结果。
这里写图片描述
正则表达式参数可用在以上方法中 (替代字符串参数)。
正则表达式使得搜索功能更加强大(如实例中不区分大小写)。

1.4 正则表达式修饰符

修饰符用于执行区分大小写和全局匹配:

修饰符描述
i执行对大小写不敏感的匹配。
g执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m执行多行匹配。

1.5 正则表达式模式

1.5.1 方括号

方括号用于查找某个范围内的字符:

表达式描述
[abc]查找方括号之间的任何字符。
[0-9]查找任何从 0 至 9 的数字。
(x|y)查找任何以|分隔的选项。
[a-z]查找任何从小写 a 到小写 z 的字符。
[A-Z]查找任何从大写 A 到大写 Z 的字符。
[A-z]查找任何从大写 A 到小写 z 的字符。
[adgk]查找给定集合内的任何字符。
[^adgk]查找给定集合外的任何字符。
(red|blue|green)查找任何指定的选项。
1.5.2 元字符
元字符描述
.查找单个字符,除了换行和行结束符。
\w查找单词字符。
\W查找非单词字符。
\d查找数字。
\D查找非数字字符。
\s查找空白字符。
\S查找非空白字符。
\b匹配单词边界。
\B匹配非单词边界。
\0查找 NULL 字符。
\n查找换行符。
\f查找换页符。
\r查找回车符。
\t查找制表符。
\v查找垂直制表符。
\xxx查找以八进制数 xxx 规定的字符。
\xdd查找以十六进制数 dd 规定的字符。
\uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符。

举例:
var str=”Hello World!”;
var patt1=/h.l/g;
对字符串的“h.l”进行搜索,匹配的是:Hello World!

var str="Hello World!";
var patt1=/\w/g;

对字符串中的单词字符进行全局搜索:Hello World!

var str="Hello World!";
var patt1=/\W/g;

对字符串中的非单词字符进行全局搜索:Hello World!

1.5.3 量词
量词描述
n+匹配任何包含至少一个 n 的字符串。
n*匹配任何包含零个或多个 n 的字符串。
n?匹配任何包含零个或一个 n 的字符串。
n{X}匹配包含 X 个 n 的序列的字符串。例如,/a{2}/ 不匹配 “candy,” 中的 “a”,但是匹配 “caandy,” 中的两个 “a”,且匹配 “caaandy.” 中的前两个 “a”。
n{X,}X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。例如,/a{2,}/ 不匹配 “candy” 中的 “a”,但是匹配 “caandy” 和 “caaaaaaandy.” 中所有的 “a”。
n{X,Y}X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。例如,/a{1,3}/ 不匹配 “cndy”,匹配 “candy,” 中的 “a”,”caandy,” 中的两个 “a”,匹配 “caaaaaaandy” 中的前面三个 “a”。注意,当匹配 “caaaaaaandy” 时,即使原始字符串拥有更多的 “a”,匹配项也是 “aaa”。
n$匹配任何结尾为 n 的字符串。
^n匹配任何开头为 n 的字符串。
?=n匹配任何其后紧接指定字符串 n 的字符串。
?!n匹配任何其后没有紧接指定字符串 n 的字符串。


二、RegExp对象

2.1 基本概念

在 JavaScript 中,RegExp 对象是一个预定义了属性和方法的正则表达式对象。

2.2 基本语法

var patt=new RegExp(pattern,modifiers);

或者更简单的方式:

var patt=/pattern/modifiers;

pattern(模式) 描述了表达式的模式
modifiers(修饰符) 用于指定全局匹配、区分大小写的匹配和多行匹配,如:/i、/g等

2.3 基本方法

2.3.1 exec()

exec() 方法用于检索字符串中的正则表达式的匹配。

如果字符串中有匹配的值返回该匹配值,否则返回 null。

语法:RegExpObject.exec(string)


举例:
这里写图片描述

2.3.2 test()

test()方法用于检测一个字符串是否匹配某个模式.

如果字符串中有匹配的值返回 true ,否则返回 false。

语法:RegExpObject.test(string)


举例:
这里写图片描述

2.4支持正则表达式的String对象方法

search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。

如果找到返回子字符串位置
如果没有找到任何匹配的子串,则返回 -1。
举例:
这里写图片描述

2.4.2 match()

match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

注意: match() 方法将检索字符串 String Object,以找到一个或多个与 regexp
匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。如果 regexp 没有标志 g,那么 match()
方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回
null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。

举例:
这里写图片描述

2.4.3 replace()

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串
语法
string.replace(searchvalue,newvalue)
参数值
searchvalue:规定子字符串或要替换的模式的 RegExp 对象。
newvalue:一个字符串值。规定了替换文本或生成替换文本的函数。
返回值:一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。
举例:
这里写图片描述

2.4.4 split()

split() 方法用于把一个字符串分割成字符串数组。

提示: 如果把空字符串 (“”) 用作 separator,那么 stringObject 中的每个字符之间都会被分割。

注意: split() 方法不改变原始字符串。

用正则表达式实现表单验证

JS Demo

/*是否带有小数*/
function    isDecimal(strValue )  {  
   var  objRegExp= /^\d+\.\d+$/;
   return  objRegExp.test(strValue);  
}  

/*校验是否中文名称组成 */
function ischina(str) {
    var reg=/^[\u4E00-\u9FA5]{2,4}$/;   /*定义验证表达式*/
    return reg.test(str);     /*进行验证*/
}

/*校验是否全由8位数字组成 */
function isStudentNo(str) {
    var reg=/^[0-9]{8}$/;   /*定义验证表达式*/
    return reg.test(str);     /*进行验证*/
}

/*校验电话码格式 */
function isTelCode(str) {
    var reg= /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/;
    return reg.test(str);
}

/*校验邮件地址是否合法 */
function IsEmail(str) {
    var reg=/^([a-zA-Z0-9_-])+@([a -zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+$/;
    return reg.test(str);
}


function  fun1(){
    // if(!isStudentNo(document.getElementById("sno").value)){
    //  alert("学生编号是8位数字");
    //  document.getElementById("sno").focus();
    //  return false;
    // }

    // if(!ischina(document.getElementById("username").value)){
    //  alert("学生姓名必须填写中文");
    //  document.getElementById("username").focus();
    //  return false;  
    // }

    if(!IsEmail(document.getElementById("email").value)){
        alert("邮箱地址错误");
        document.getElementById("email").focus();
        return false;  
    }

    // if(!isTelCode(document.getElementById("tel").value)){
    //  alert("电话号码不对");
    //  document.getElementById("tel").focus();
    //  return false;  
    // }

    /*运行到这里说明验证通过返回true    submit提交按钮起作用提交表单*/
    alert("提交成功")
    return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值