使用Javascript实现获取网页反馈
序言
在本人的突发奇想之下,网页版本立直麻将点数计算工具初版堂堂发布。与此同时,你也可以在这里体验基础版的使用。虽然有着极其简陋的设计,单一且毫无技术水平的功能,繁杂低效的代码水平。作为本人首个基于HTML,CSS,Javascript的前端项目,本人将在此次项目中所学习到的有关上述内容的使用整理待用,一则方便自己后续的学习与使用,二则望为大佬有抛砖引玉之功效
在HTML网页中插入CSS与JS脚本
- 内联方式
你可以在HTML文件中直接包含JS和CSS代码。这种方式适用于非常小的文件或需要在HTML中动态生成的代码。例如:
1 | <head> |
这种方式的缺点是,如果你有多个页面需要使用相同的CSS或JS代码,就需要在每个页面中复制相同的代码,不便于维护。
- 外部链接方式
这是最常用的方式,允许你在多个页面之间共享相同的JS和CSS文件。使用<link>
元素来链接CSS文件,使用<script>
元素来链接JS文件。例如:
1 | <head> |
在上述示例中href
属性和src
属性指定了CSS和JS文件的路径。rel
属性定义了链接元素与当前文档之间的关系,type
属性定义了链接资源的媒体类型(MIME 类型)
你可以使用相对路径或绝对路径来指定文件的位置。相对路径是相对于HTML文件的位置,而绝对路径是完整的URL路径。
绝对路径:
1 | <link rel="stylesheet" type="text/css" href="https://example.com/css/styles.css"> |
你还可以使用CDN来引入公共的JS和CSS库,例如jQuery、Bootstrap等。CDN通常提供高速的全球分发,减轻了服务器负载。
实际应用
Ⅰ.选择框与信息获取
按钮
对于这样的一个按钮,你可以按下以代表确认选择,也可以再次按下取消选择
在HTML当中,它的简单代码如下:
1 | <input type="checkbox" id="example001">按钮 |
在这里使用了复选框(checkbox)元素。复选框允许用户选择或取消选择一个选项,并且你可以使用JavaScript来记录用户的选择状态。其中,id
代表了其唯一确定的关系
在Javascript当中,如何确定其是否已经被选择呢?
1 | var value001 = 0; |
通过声明的变量value001
的数值,你可以通过后续编程实现数理逻辑的运算
如果你需要一次性操作大量的复选框识别呢?对于本工具而言,以所有一番役种为例,每个复选框在对结果的影响当中是等值的。
在HTML当中,对于一番役种,我们使用class="checkbox-label-1fan"
标明其属于的类。与此同时,class
属性也可以用于CSS当中进行设计优化
对于前四个一番役种:
1 | <label> |
虽然其一一对应的id
不同,但是我们注意到,其同属于一个类checkbox-label-1fan
下。每标记一个复选框,玩家所获得的番数+1
1 | var value1fan = 0; |
Ⅱ.输入框与信息获取
对于这样的一个输入框,你可以在其中输入你想要的数值
在HTML当中,它的简单代码如下:
1 | <div class="input-container"><label for="example002">输入框 <input type="number" id="example002"></label></div> |
与按钮等HTML元素一样,id
代表了其唯一确定的关系for
属性通常用于<label>
元素中,用于建立与表单元素之间的关联。当你在<label>
元素中使用for
属性,并将其值设置为表单元素的id
属性的值时,单击<label>
元素的文本或标签本身将会触发关联的表单元素。
如何使用JavaScript来获取和记录用户输入的值呢?如示例:
1 | var InputValue; |
其中,parseInt()
用于确保将其转换成整型以确保是数字
若用户不需要输入任何数值,则默认状态下其值为空。为确保算术运算准确,你可以在JS当中,将其初始值赋值为0
1 | document.getElementById("example002").value = 0; |
Ⅲ.多重选择项与信息获取
对于如上选择框,你可以在有限多项当中选择一项
用户可以按住Ctrl
键(在Windows系统上)或Command
键(在Mac系统上)来多选多个选项
对于其在HTML当中的使用:
1 | <select id="example004" name="example004" multiple>//删去multiple属性改为单选 |
在上面的示例中,我们使用<select>
元素来创建一个下拉菜单,添加multiple
属性允许多选。然后,我们使用<option>
元素列出了可供选择的选项,每个选项都有一个value
属性,它是在提交表单时将被发送的值,以及显示在下拉菜单中的文本。
在JavaScript中获取用户所选择的数值:
1 | var selectElement = document.getElementById("example004"); |
Ⅳ.表格项选择框
20 | 25 | 30 | 40 | 50 |
对于这样的一个选择项,我们可以直接点击选择,并且反馈点击的结果。同时,可以通过Javascript直接获取点击数据,并对其加以处理
在HTML当中,我们写入如下内容:
1 | <table id="table1"> |
我们需要CSS规定其格式:
1 | .table-container { |
还需要通过Javascript实现检测点击,反馈点击的结果,以及获取点击数据。其中,table1
在这里是使其唯一确定的id
1 | const table1Cells = document.querySelectorAll('#table1 td'); |
在这里,我们通过变量numberValue
获取整型读取的点击数据data-number
Ⅴ.确定按钮
你可以使用如下HTML来构建一个确定按钮:
1 | <button onclick="recordInput()">确定</button> |
当按下按钮后,将执行recordInput()
函数
在Javascript当中:
1 | function recordInput() |
以执行函数下的指令
Ⅵ.JS数理逻辑的运算
对于立直麻将的符数,求和后对结果进行切上处理,即向上舍入,即个位不是零,则个位变成零,整体加10
与此同时,对于点数,由于日麻点棒的最低计算单位为100,当计算得出总支付点数后,还需要进行切上处理,即十位非零时置为零,百位加一
在Javascript当中,对于算出的单位点数get_a
,庄家自摸,子家每人支付2a的点数,并进行切上处理:
1 | Math.ceil((2*parseInt(get_a))/100)*100 |
parseInt()
用于确保将其转换成整型以确保是数字。在Javascript当中,var
作为动态类型,你可可以进行诸如字符串的运算
1 | yiman+"倍役满" |
Ⅶ.实现网页信息反馈
在HTML当中,你可以使用如下方式,表示接下来需要显示的内容:
1 | <span id="example005"> </span> |
在Javascript当中,你可以使用如下方式,显示在HTML页面当中:
1 | document.getElementById("example005").textContent = "测试";//文字 |
JS脚本的部分语法使用
var与let类型 ——From ChatGPT
在JavaScript中,let
和var
都用于声明变量,但它们在变量作用域和生命周期方面有一些重要的区别。
let
:let
是ECMAScript 6(ES6)引入的关键字。- 声明的变量使用
let
具有块级作用域,这意味着它们只在包含它们的代码块(通常是{}
中)内可见。 - 使用
let
声明的变量不会被提升(hoisting),在声明之前访问它们会导致引发暂时性死区(Temporal Dead Zone,TDZ)错误。 let
声明的变量可以被重新赋值。
1
2
3
4
5
6let x = 10;
if (true) {
let x = 20; // 在此块级作用域内重新声明 x
console.log(x); // 输出 20
}
console.log(x); // 输出 10var
:var
是早期版本的JavaScript中使用的关键字。- 使用
var
声明的变量具有函数级作用域,而不是块级作用域,这意味着它们在包含它们的函数内可见。 var
声明的变量会被提升,这意味着变量的声明会被提升到其所在函数或全局作用域的顶部。var
声明的变量可以被重新赋值。
1
2
3
4
5
6var y = 10;
if (true) {
var y = 20; // 在函数级作用域内重新赋值 y
console.log(y); // 输出 20
}
console.log(y); // 输出 20,而不是 10
总之,let
和var
都用于声明变量,但由于let
具有块级作用域、不会被提升以及更严格的变量处理,它通常被认为是更安全和更可预测的选项,尤其是在现代JavaScript中。因此,在编写新代码时,通常建议使用let
而不是var
。
立直麻将点数计算相关
单位点数(a) = 符数 × 2(2+番数)
大于等于5番时,单位点数固定:
番数 | 名称 | a |
---|---|---|
5番 | 满贯 | 2000 |
6~7番 | 跳满 | 3000 |
8~10番 | 倍满 | 4000 |
11~12番 | 三倍满 | 6000 |
13番 | 役满 | 8000 |
根据身份与和牌方式的不同,和牌时以a为基准进行如下赔付结算:
身份 | 点和 | 自摸 |
---|---|---|
亲 | 放铳者支付6a | 每人2a |
子 | 放铳者支付4a | 亲支付2a,子支付a |
由于日麻点棒的最低计算单位为100,当计算得出总支付点数后,还需要进行切上处理,即十位非零时置为零,百位加一