• JS-项目实战-鼠标悬浮设置字体颜色以及控制键盘输入


    1、fruit.js

    1. //当页面加载完成后执行后面的匿名函数
    2. window.onload = function () {
    3. //get:获取 Element:元素 By:通过...方式
    4. //getElementById()根据id值获取某元素
    5. let fruitTbl = document.getElementById("fruit_tbl");
    6. //table.rows:获取这个表格的所有的行,返回数组
    7. let rows = fruitTbl.rows;
    8. //从 1 开始,因为 第 0 行是表头,不需要绑定事件
    9. for (let i = 1; i < rows.length-1; i++) {
    10. let tr = rows[i];
    11. //事件动态绑定
    12. tr.onmouseover = showBGColor;
    13. tr.onmouseout = clearBGColor;
    14. //cell:单元格、细胞
    15. //获取这一行的所有的单元格
    16. let tds = tr.cells;
    17. let priceTD = tds[2];
    18. //绑定鼠标悬浮事件
    19. priceTD.onmouseover = showHand;
    20. //绑定点击事件
    21. priceTD.onclick=editPrice
    22. }
    23. zj();
    24. };
    25. editPrice = function () {
    26. let priceTD = event.srcElement;
    27. //inner:在...内部
    28. let oldPrice = priceTD.innerText;
    29. //innerHTML:在节点内部填充一段HTML代码
    30. //priceTD.innerHTML = "";
    31. priceTD.innerHTML = "";
    32. /**
    33. *
    34. * first:第一个 child:孩子
    35. * firstChild:第一个子节点
    36. * @type {ActiveX.IXMLDOMNode | ChildNode | (() => (Node | null))}
    37. */
    38. let priceInput = priceTD.firstChild;
    39. priceInput.value = oldPrice;
    40. priceInput.select();
    41. //绑定失去焦点事件
    42. priceInput.onblur = updatePrice;
    43. //输入框绑定键盘摁下事件,用于判断摁下的值是否合法
    44. priceInput.onkeydown = ckInput;
    45. };
    46. ckInput = function () {
    47. // 0-9:48-57 backspace:8 enter:13
    48. let kc = event.keyCode;
    49. if (!((kc >= 48 && kc <= 57) || kc == 8 || kc == 13)) {
    50. //取消事件
    51. event.returnValue = false;
    52. }
    53. if (kc == 13) {
    54. event.srcElement.blur();
    55. }
    56. };
    57. updatePrice = function () {
    58. let priceInput = event.srcElement;
    59. let newPrice = priceInput.value;
    60. let priceTD = priceInput.parentElement;
    61. priceTD.innerText = newPrice;
    62. xj(priceTD.parentElement)
    63. };
    64. xj = function (tr) {
    65. if (tr && tr.tagName == "TR") {
    66. let tds = tr.cells;
    67. let priceTD = tds[2];
    68. let fcountTD = tds[3];
    69. let xjTD = tds[4];
    70. let price = parseInt(priceTD.innerText);
    71. let fcount = parseInt(fcountTD.innerText);
    72. let xj = price*fcount;
    73. xjTD.innerText = xj;
    74. //同时更新总计
    75. zj();
    76. }
    77. };
    78. zj = function () {
    79. let fruitTbl = document.getElementById("fruit_tbl");
    80. let rows = fruitTbl.rows;
    81. let total = 0;
    82. for (let i = 1; i < rows.length - 1; i++) {
    83. let tr = rows[i];
    84. let xj = parseInt(tr.cells[4].innerText);
    85. total += xj;
    86. }
    87. rows[rows.length-1].cells[1].innerText = total;
    88. };
    89. function showHand() {
    90. let priceTD = event.srcElement;
    91. //cursor光标
    92. priceTD.style.cursor = "pointer";
    93. }
    94. function showBGColor() {
    95. //window.event表示当前发生的事件 ”window.“可以省略
    96. // console.log(window.event);
    97. // alert(window.event);
    98. let obj = window.event.srcElement;
    99. //alert(obj);
    100. //console.log(obj); //发现obj是td,而不是tr。事件传递现象
    101. if (obj.tagName == "TD") {
    102. let td=obj;
    103. //parentElement:父元素 td的父元素是tr。tr有很多td子元素
    104. let tr = td.parentElement;
    105. tr.style.backgroundColor = "purple";
    106. //获取当前所有单元格,然后设置单元格中字体的颜色
    107. let tds = tr.cells;
    108. for (let i = 0; i length; i++) {
    109. tds[i].style.color = "white";
    110. }
    111. }
    112. }
    113. function clearBGColor() {
    114. let td = window.event.srcElement;
    115. if (td.tagName == "TD") {
    116. let tr = td.parentElement;
    117. tr.style.backgroundColor = "transparent";
    118. //获取当前行所有单元格,然后设置单元格中字体的颜色
    119. let tds = tr.cells;
    120. for (let i = 0; i < tds.length; i++) {
    121. tds[i].style.color = "#031f02";
    122. }
    123. }
    124. }

    2、fruit.html

    1. html>
    2. <html lang="zh_CN">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>js-DOM/BOM实战title>
    8. <link href="style/fruit.css" rel="stylesheet">link>
    9. <script src="js/鼠标悬浮和离开事件.js">script>
    10. head>
    11. <body>
    12. <div id="div0">
    13. <div id="div_title">欢迎使用水果库存系统div>
    14. <div id="div2">
    15. <table id="fruit_tbl">
    16. <tr>
    17. <th class="w10"><input type="checkbox" />th>
    18. <th class="w20">名称th>
    19. <th class="w20">单价th>
    20. <th class="w20">数量th>
    21. <th class="w20">小计th>
    22. <th class="w10">操作th>
    23. tr>
    24. <tr>
    25. <td><input type="checkbox" />td>
    26. <td>苹果td>
    27. <td>5td>
    28. <td>2td>
    29. <td>10td>
    30. <td><img src='imgs/del.png' class="delBtn"/>td>
    31. tr>
    32. <tr>
    33. <td><input type="checkbox" />td>
    34. <td>菠萝td>
    35. <td>3td>
    36. <td>5td>
    37. <td>15td>
    38. <td><img src='imgs/del.png' class="delBtn"/>td>
    39. tr>
    40. <tr>
    41. <td><input type="checkbox" />td>
    42. <td>哈密瓜td>
    43. <td>4td>
    44. <td>5td>
    45. <td>20td>
    46. <td><img src='imgs/del.png' class="delBtn"/>td>
    47. tr>
    48. <tr>
    49. <td><input type="checkbox" />td>
    50. <td>葡萄td>
    51. <td>10td>
    52. <td>5td>
    53. <td>50td>
    54. <td><img src='imgs/del.png' class="delBtn"/>td>
    55. tr>
    56. <tr>
    57. <td><input type="checkbox" />td>
    58. <td>青梅td>
    59. <td>10td>
    60. <td>5td>
    61. <td>50td>
    62. <td><img src='imgs/del.png' class="delBtn"/>td>
    63. tr>
    64. <tr>
    65. <td><input type="checkbox" />td>
    66. <td>人参果td>
    67. <td>10td>
    68. <td>5td>
    69. <td>50td>
    70. <td><img src='imgs/del.png' class="delBtn"/>td>
    71. tr>
    72. <tr>
    73. <td><input type="checkbox" />td>
    74. <td>菠萝蜜td>td>
    75. <td>10td>
    76. <td>5td>
    77. <td>50td>
    78. <td><img src='imgs/del.png' class="delBtn"/>td>
    79. tr>
    80. <tr>
    81. <td><input type="checkbox" />td>
    82. <td>西红柿td>
    83. <td>10td>
    84. <td>5td>
    85. <td>50td>
    86. <td><img src='imgs/del.png' class="delBtn"/>td>
    87. tr>
    88. <tr>
    89. <td colspan="2">总结:td>
    90. <td colspan="4">0td>
    91. tr>
    92. table>
    93. div>
    94. div>
    95. body>
    96. html>

    3、fruit.css

    1. *{
    2. color:rgb(3, 31, 2);
    3. font-weight: lighter;
    4. }
    5. body{
    6. padding:0;
    7. margin:0;
    8. background-color: rgb(3, 31, 2);
    9. }
    10. #div0{
    11. width:80%;
    12. border:0px solid red;
    13. background-color: rgb(209, 230, 235);
    14. margin-left:10%;
    15. padding-top:48px;
    16. padding-bottom:48px;
    17. margin-top:8px;
    18. }
    19. #div_title{
    20. width:80%;
    21. margin-left:10%;
    22. text-align: center;
    23. font-size:24px;
    24. letter-spacing: 4px;
    25. margin-bottom:16px;
    26. }
    27. #div2{
    28. margin-left:10%;
    29. border:0px solid red;
    30. width:80%;
    31. }
    32. .delBtn{
    33. width:16px;
    34. height:16px;
    35. }
    36. #fruit_tbl , #fruit_tbl td, #fruit_tbl th {
    37. border:1px solid lightgray;
    38. text-align: center;
    39. }
    40. #fruit_tbl{
    41. width:100%;
    42. line-height: 32px;
    43. border-collapse: collapse;
    44. }
    45. .w10{
    46. width:10%;
    47. }
    48. .w15{
    49. width:15%;
    50. }
    51. .w20{
    52. width:20%;
    53. }

    变量kc存储的是键盘事件对象event的keyCode属性,即按下的键盘键的编码值。不同的按键有不同的编码值,下面是一些常见按键的编码值:

    • 退格键:8
    • Tab键:9
    • 回车键:13
    • Shift键:16
    • Ctrl键:17
    • Alt键:18
    • Caps Lock键:20
    • Esc键:27
    • 空格键:32
    • Page Up键:33
    • Page Down键:34
    • End键:35
    • Home键:36
    • 左箭头键:37
    • 上箭头键:38
    • 右箭头键:39
    • 下箭头键:40
    • Delete键:46
    • 0键:48
    • 1键:49
    • ...以此类推,一直到9键:57
    • A键:65
    • B键:66
    • ...以此类推,一直到Z键:90
  • 相关阅读:
    vue3 响应式对象的 api ,你全用过了吗?
    Linux 离线安装mysql
    权限模型 DAC ACL RBAC ABAC
    Java也能做OCR!SpringBoot 整合 Tess4J 实现图片文字识别
    Leaflet 加载高德地图
    substrate轻松学3:substrate构建一条链的体验
    Java 命令行工具
    【计组】存储器
    关于#svn#的问题:如何导出svn里面所有文件目录存入excel中比如 项目管理/启动阶段/项目调研/调研记录/20230701调研记录.xsl按层级导出目录结构
    12. 机器学习 - 拟合
  • 原文地址:https://blog.csdn.net/m0_65152767/article/details/134435759