当前位置:   article > 正文

js简单项目实战_js实战

js实战

js简单案例

1.localStorage本地存储
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>注册</title>
  7. </head>
  8. <body>
  9. <div>
  10. <input type="text" class="username" placeholder="请输入用户名">
  11. <input type="password" class="pwd" placeholder="请输入密码">
  12. <button>注册</button>
  13. </div>
  14. </div>
  15. <script>
  16. //获取用户名框
  17. let username =document.querySelector('.username');
  18. //获取密码框
  19. let pwd =document.querySelector('.pwd');
  20. //获取按钮
  21. let button=document.querySelector('button');
  22. //给按钮添加鼠标点击事件
  23. button.addEventListener('click',function(){
  24. //定义goods对象
  25. const goods = {
  26. usernameVal:username.value.trim(),
  27. //获取用户名框里的内容
  28. //trim()去除前面与后面的空格
  29. pwdVal:pwd.value.trim()
  30. /获取密码框里的内容
  31. }
  32. // localStorage.setItem('goods', goods)
  33. // console.log(localStorage.getItem('goods'))
  34. // 1. 把对象转换为JSON字符串 JSON.stringify
  35. //使用localStorage本地存储goosJSON字符串
  36. localStorage.setItem('goods', JSON.stringify(goods))
  37. window.location.href = "./login.html";//跳转到登录页面
  38. })
  39. </script>
  40. </body>
  41. </html>
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>登录</title>
  7. </head>
  8. <body>
  9. <div>
  10. <input type="text" class="username" placeholder="请输入用户名">
  11. <input type="password" class="pwd" placeholder="请输入密码">
  12. <button>登录</button>
  13. </div>
  14. </div>
  15. <script>
  16. let username =document.querySelector('.username');
  17. let pwd =document.querySelector('.pwd');
  18. let button=document.querySelector('button');
  19. button.addEventListener('click',function(){
  20. let usernameVal=username.value.trim();
  21. let pwdVal=pwd.value.trim();
  22. //将传过来的goods字符串转换为goods对象
  23. let goods=JSON.parse(localStorage.getItem('goods'));
  24. console.log(goods);
  25. //获取对象里的usernameVal,pwdVal
  26. let getUsernameVal=goods.usernameVal;
  27. let getPwdVal=goods.pwdVal;
  28. if(usernameVal!==getUsernameVal){
  29. alert('用户名错误');
  30. }else if(pwdVal!==getPwdVal){
  31. alert('密码错误');
  32. }else{
  33. alert('登录成功')
  34. }
  35. })
  36. </script>
  37. </body>
  38. </html>

localStorage 和 sessionStorage 属性允许在浏览器中存储 key/value 对的数据。

localStorage 用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去删除。

localStorage 属性是只读的。

JSON 通常用于与服务端交换数据。

在接收服务器数据时一般是字符串。

我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象。

2.动态时钟
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>动态时钟</title>
  7. </head>
  8. <body>
  9. <div class="time"></div>
  10. <script>
  11. //未满10加零函数
  12. function addZero(item){
  13. item=item >= 10 ? item : "0" + item;
  14. return item
  15. }
  16. const time=document.querySelector('.time');
  17. // 2. 格式化日期对象-转换成开发中常见的日期和时间格式
  18. function getNewData(){
  19. const myDate = new Date();
  20. let month = myDate.getMonth() + 1; // 得到月份 数字型的 0 需要加1
  21. let day = myDate.getDate(); // 得到几号 数字型的 27
  22. let week=myDate.getDay(); // 得到星期 数字型 5
  23. let weekCN=['日','一','二','三','四','五','六'] ;
  24. let hour=myDate.getHours(); // 得到小时
  25. let minute=myDate.getMinutes(); // 得到分钟
  26. let second=myDate.getSeconds();// 得到秒数
  27. month = addZero(month);
  28. day = addZero(day);
  29. hour = addZero(hour);
  30. minute = addZero(minute);
  31. second = addZero(second);
  32. time.innerHTML=`现在的日期是:${myDate.getFullYear()}${month}${day}
  33. ${hour}:${minute}:${second} 星期${weekCN[week]}`;
  34. }
  35. setInterval(function(){getNewData();},1000);//每秒自动执行一次getNewData函数
  36. </script>
  37. </body>
  38. </html>

Date 对象用于处理日期和时间。 

setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。

setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。

提示: 1000 毫秒= 1 秒.

3.小米密码框素材

  1. //找到元素
  2. const mi_input=document.querySelector('.mi-input');
  3. const label=document.querySelector('.mi-control label');
  4. const mi_password=document.querySelector('.mi-password')
  5. let isClose=true;
  6. mi_input.addEventListener('focus',function(){
  7. label.classList.add('active');//添加类名
  8. })
  9. mi_password.addEventListener('click',function(){
  10. if(mi_input.type==='password'){
  11. mi_password.classList.add('active');
  12. mi_input.type='text';
  13. isClose=false;
  14. }else{
  15. mi_password.classList.remove('active');
  16. mi_input.type='password';
  17. isClose=false;
  18. }
  19. })
  20. mi_input.addEventListener('blur',function(){
  21. label.classList.remove('active');
  22. })

classList 属性返回元素的类名,作为 DOMTokenList 对象。

该属性用于在元素中添加,移除及切换 CSS 类。

classList 属性是只读的,但你可以使用 add() 和 remove() 方法修改它。

将输入框的type设为password将密码隐藏

将输入框的type设为text将密码显示

3.购物车案例
  1. //用fruit对象水果数据
  2. const fruit = [
  3. {
  4. icon: 'img/火龙果.png',
  5. num: 2,
  6. price: 6,
  7. },
  8. {
  9. icon: 'img/荔枝.png',
  10. num: 7,
  11. price: 20,
  12. },
  13. {
  14. icon: 'img/榴莲.png',
  15. num: 3,
  16. price: 40,
  17. },
  18. {
  19. icon: 'img/鸭梨.png',
  20. num: 10,
  21. price: 3,
  22. },
  23. {
  24. icon: 'img/樱桃.png',
  25. num: 20,
  26. price: 34,
  27. },
  28. ];
  29. let str='';
  30. // 1. 获取元素
  31. let tbody=document.querySelector('.main .tbody');
  32. let price=document.querySelector('.main .bottom .right-box .price-box .price');
  33. let pay=document.querySelector('.main .bottom .right-box .pay');
  34. let sum=0;//总价
  35. let allNum=0;//总数
  36. //循环写入动态html页面
  37. for(let i=0;i<fruit.length;i++){
  38. str+=`<div class="tr">
  39. <div class="td"><input type="checkbox" class="check"/></div>
  40. <div class="td"><img src="${fruit[i].icon}" alt="" /></div>
  41. <div class="td">${fruit[i].price}</div>
  42. <div class="td">
  43. <div class="my-input-number">
  44. <button class="decrease">-</button>
  45. <span class="my-input__inner">${fruit[i].num}</span>
  46. <button class="increase">+</button>
  47. </div>
  48. </div>
  49. <div class="td">${fruit[i].price*fruit[i].num}</div>
  50. <div class="td"><button>删除</button></div>
  51. </div>`;
  52. }
  53. tbody.innerHTML=str;
  54. let check= document.querySelectorAll('.tbody .tr .td .check');
  55. let flag=new Array();
  56. for(let i=0;i<check.length;i++){
  57. flag[i]=false;
  58. }
  59. //按下按钮时遍历全部checkbox得到总价与总数
  60. check.forEach(function(checkbox,i){
  61. checkbox.onclick=function () {
  62. if(flag[i]===false){//奇数次数按下会加
  63. sum+=fruit[i].price*fruit[i].num;
  64. allNum+=fruit[i].num;
  65. flag[i]=true;
  66. }else{{//偶数次数按下会加
  67. sum-=fruit[i].price*fruit[i].num;
  68. allNum-=fruit[i].num;
  69. flag[i]=false;
  70. }
  71. price.innerHTML=+sum;
  72. pay.innerHTML=`结算(${allNum})`;
  73. };
  74. });
  75. // 1. 获取元素
  76. const input = document.querySelectorAll('.tbody .tr .td input');
  77. console.log(input);
  78. input.forEach(function(el){
  79. //通过input元素找button元素
  80. const button = el.parentElement.parentElement.children[5].children[0];
  81. console.log(button);
  82. button.addEventListener('click',function(){
  83. //通过input元素找checkbox元素
  84. if(this.parentElement.parentElement.children[0].children[0].checked){
  85. this.parentElement.parentElement.remove();
  86. }
  87. })
  88. })

querySelector() 方法返回文档中匹配指定 CSS 选择器的一个元素。

let	tbody=document.querySelector('.main .tbody');

对应 

  1. <div class="tbody">
  2. <!-- 需要渲染的列表 核心代码区域 -->
  3. </div>
  1. let price=document.querySelector('.main .bottom .right-box .price-box .price');
  2. let pay=document.querySelector('.main .bottom .right-box .pay');
  3. let sum=0;//总价

对应  

  1. <div class="right-box">
  2. <!-- 所有商品总价 -->
  3. <span class="price-box">
  4. 总价&nbsp;&nbsp;:&nbsp;&nbsp;¥&nbsp;
  5. <span class="price"></span>
  6. </span>
  7. <!-- 结算按钮 -->
  8. <button class="pay"></button>
  9. </div>

parentElement 

parentNode 属性可返回某节点的父节点。

如果指定的节点没有父节点则返回 null 。

children 属性返回元素的子元素的集合,是一个 HTMLCollection 对象。

提示: 根据子元素在元素中出现的先后顺序进行排序。使用 HTMLCollection对象的 length属性获取子元素的数量,然后使用序列号(index,起始值为0)访问每个子元素。

children 属性与 childNodes 属性的差别:

  • childNodes 属性返回所有的节点,包括文本节点、注释节点;
  • children 属性只返回元素节点;

 

 

4.返回数组中出现次数最多的两个数字及其出现次数
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>返回数组中出现次数最多的数字及其出现次数</title>
  6. <div id="Divisibility6"></duv>
  7. </head>
  8. <body>
  9. <!-- 外部形式:通过 script 的 src 属性引入独立的 .js 文件 -->
  10. <script>
  11. function GetMostTimeNum(arr){
  12. let time;//次数
  13. let timeArr=[];//次数数组
  14. maxtime=0;//最大次数
  15. max=arr[0];//最多相同次数的数
  16. indexArr=[];//下标数组
  17. //得到每个数与后面的数的相同次数
  18. for(let i=0;i<arr.length;i++){
  19. time=0;
  20. for(let j=i+1;j<arr.length;j++){
  21. if(arr[j]===arr[i]){
  22. time++;
  23. }
  24. }
  25. timeArr.push(time);
  26. indexArr.push(i);
  27. }
  28. //得到最多相同次数的数与下标
  29. for(let i=0;i<timeArr.length;i++){
  30. if(timeArr[i]>maxtime){
  31. maxtime=timeArr[i];
  32. maxIndex=indexArr[i]
  33. max=arr[maxIndex]
  34. }
  35. }
  36. }
  37. function GetMostNum(arr){
  38. GetMostTimeNum(arr)
  39. let maxtime1=maxtime;
  40. let max1=max
  41. arr.splice(maxIndex,maxtime);//将最大次数的数删除
  42. GetMostTimeNum(arr);
  43. let maxtime2=maxtime;
  44. let max2=max;
  45. if(maxtime1===maxtime2){
  46. console.log(`此数组中出现次数最多两个数字的数字为${max1},${max2},出现次数为${maxtime+1}次`);
  47. }else{
  48. console.log(`此数组中出现次数最多两个数字的数字为:\n${max1},出现次数为${maxtime1+1}次\n${max2},出现次数为${maxtime2+1}次`);
  49. }
  50. }
  51. let arr1=[1,2,2,3,3,3,3,4,4,4,4]
  52. let arr2=[1,2,2,3,3,3,4,4,4,4]
  53. let maxtime;
  54. let max;
  55. let indexArr;
  56. let maxIndex;
  57. GetMostNum(arr1);
  58. GetMostNum(arr2);
  59. </script>
  60. </body>
  61. </html>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/1001425
推荐阅读
相关标签
  

闽ICP备14008679号