js逐步教你实现DOM系统(html逻辑 css逻辑 js逻辑)

简介: js逐步教你实现DOM系统(html逻辑 css逻辑 js逻辑)

html部分:

<h1>DOM数组方法</h1>
    <div class="container">
        <aside>
        <button id="add-user">添加账户 👱‍♂️</button>
        <button id="double">资金翻倍 💰</button>
        <button id="show-millionaires">查询百万富翁 💵</button>
        <button id="sort">财富榜 ↓</button>
        <button id="calculate-wealth">计算总金额 🧮</button>
        </aside>
        <main id="main">
                    <h2><strong>Person</strong>Wealth</h2>
        </main>
    </div>

效果:
在这里插入图片描述
html逻辑:
全部是container,侧边栏是aside。中间是main.

css部分:

*{padding: 0px;margin: 0px;}
        body
        {
            background-color: #f4f4f4;
            font-family: Arial, Helvetica, sans-serif;
            display: flex;
            flex-direction: column;
            align-items: center;
            min-height: 100vh;/*为什么,因为用户是数不完的.*/
        }
        .container
        {
            display: flex;
            padding: 20px;
            margin: 0 auto;
            max-width: 100%;
            widows: 800px;
        }
        aside
        {
            padding: 10px 20px;
            widows: 250px;
            border-right: 1px solid #111;
        }
        button
        {
            cursor: pointer;
            background-color: #fff;
            border: solid 1px #111;
            border-radius: 5px;
            display: block;
            padding: 10px;
            margin-bottom: 20px;
            font-weight: bold;
            font-size: 14px;
        }
        main {
  padding: 10px 20px;
}
        h2 {
  border-bottom: 1px solid #111;
  padding-bottom: 10px;
  display: flex;
  justify-content: space-between;
  font-weight: 300;
  margin: 0 0 20px;
}

h3 {
  border-bottom: 1px solid #111;
  padding: 10px;
  display: flex;
  justify-content: space-between;
  font-weight: 300;
  margin: 20px 0 0;
  background-color: #fff;
}
        .person
        {
            display: flex;
            justify-content: space-between;
            font-size: 20px;
            margin-bottom: 10px;
        }

css逻辑:
第一步:让body下的所有东西全部flex布局,display: flex;
然后是垂直为主轴flex-direction: column;,侧轴x轴center align-items: center;。
记住,只要flex-direction: column;代表默认的的已经交换了.
第二:
container下面的flex布局,自己变大20px.自身居中模式,
第三步;aside自身扩大20px,大小为250px,
第四步:button是小手手,。。。
第五步;自身左边10px,上下20px.
第六步;
图片:
在这里插入图片描述

js逻辑;

// 获取节点
        const main = document.getElementById("main");
        const addUserBtn = document.getElementById("add-user");
        const doubleBtn = document.getElementById("double");
        const showMillionairesBtn = document.getElementById("show-millionaires");
        const sortBtn = document.getElementById("sort");
        const calculateWealthBtn = document.getElementById("calculate-wealth");
        let data = [];
        getRandomUser();
        getRandomUser();
        getRandomUser();
        //第一:添加用户
        addUserBtn.addEventListener("click",getRandomUser);
        doubleBtn.addEventListener("click", doubleMoney);//翻倍.
        sortBtn.addEventListener("click", sortByRichest);//排行榜
        showMillionairesBtn.addEventListener("click", showMillionaires);//查询百万富豪
        calculateWealthBtn.addEventListener("click", calculateWealth);//总金额
        async function getRandomUser()
        {
            const res=await fetch("https://randomuser.me/api");//异步处理.等条件满足也就是fetch完毕之后再执行以下的.
            const data=await res.json();
            const user=data.results[0];/*results[0]代表api的result数组里面的第一个*/
            const newUser={
                name:`${user.name.first} ${user.name.last}`,//找到一个人
                money:Math.floor(Math.random()*1000000)/*钱是随机生成的.因为是0~1,所以*1000000.并向下取整.*/
            };
            addData(newUser);
        }
        function addData(obj)
        {
            data.push(obj);
            updateDOM();
        }
        function updateDOM(providedData = data)//添加用户到main中
        {
              main.innerHTML = " <h2><strong>Person</strong>Wealth</h2>";
            providedData.forEach(item=>
            {
                const element=document.createElement("div");//先创建一个div.
                element.classList.add("person");//div上面添加person类
  element.innerHTML = `<strong>${item.name}</strong> ${formatMoney(
      item.money
    )}`;                main.appendChild(element);/*名字与钱添加到main中*/
            });

        }
        function doubleMoney()
        {
            data=data.map(user=>
            {
                return {...user,money:user.money*2};//所有用户,与该用户的钱*2
            });
            updateDOM();
        }
        function sortByRichest()//排序(财富榜)
        {
            data.sort((a,b)=>b.money-a.money);/*这是升序*/
             updateDOM();
        }
        function showMillionaires()//查询百万富豪
        {
            data=data.filter(user=>user.money>1000000);
              updateDOM();
        }
        function calculateWealth()//计算总财富
        {
            const wealth = data.reduce((acc, user) => (acc += user.money), 0);
  // console.log(formatMoney(wealth));

  const wealthEl = document.createElement("div");
  wealthEl.innerHTML = `<h3>Total Wealth: <strong>${formatMoney(
    wealth
  )}</strong></h3>`;
  main.appendChild(wealthEl);
        }
        // 转换为货币格式
function formatMoney(number) {
  return "$" + number.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, "$&,");
}

js逐步:
第一步:获取节点在这里插入图片描述

当什么时候执行什事件,事件监听.
在这里插入图片描述

第一步;
从上至下.
1:当点击添加账户时,执行
2;当点击资金翻倍时,执行。
3;当点击排行榜时执行.
4;当点击查询百万富豪时.
5;当点击计算总金额时执行.

下面是函数的功能:
在这里插入图片描述

功能是:异步执行函数,什么是异步执行,条件满足时.
执行的函数.
async代表这个函数异步执行,await代表等待完毕后就可以继续下去了.这和then差不多把.
第一步;下载,然后是转换成对象,然后是拿到第一个对象,第一个对象是
在这里插入图片描述

第二步:因为外国人是姓与名的,所以.
在这里插入图片描述

第二步:
在这里插入图片描述功能是:添加到data中.data是要展示的数组.

第三步:
在这里插入图片描述
功能是:添加用户到main中.

第四步:

在这里插入图片描述翻倍资金.
...user代表所有的在已经在main中的用户.
全部资金*2;

第五步:
在这里插入图片描述

在这里插入图片描述

第六步;
在这里插入图片描述

函数的功能是;过滤掉小于一百万的人.

第七步:
在这里插入图片描述

累加用reduce累加,后面的0代表累加器的初始值.

第八步:
在这里插入图片描述

转换为美元格式,保留两位小数,后面正则.

图片;
在这里插入图片描述

相关文章
|
4月前
|
移动开发 前端开发 JavaScript
征信报告修改器,征信报告生成器,制作软件无痕修改软件【js+html+css】
本项目为信用评分模拟器教学工具,采用HTML5实现,仅供学习参考。核心功能通过JavaScript构建,包含虚拟数据生成、权重分配及信用因素分析(如还款记录、信用使用率等)。
|
4月前
|
存储 自然语言处理 前端开发
抖音快手小红书虚拟评论截图生成器,模拟对话制作工具,html+js+css
这是一款纯前端实现的多平台虚拟评论生成器,支持抖音、快手、小红书风格,适用于产品演示与UI设计。采用Vanilla JS与Flexbox布局,利用IndexedDB存储数据,CSS Variables切换主题。
|
4月前
|
前端开发 JavaScript
个人征信电子版无痕修改, 个人信用报告pdf修改,js+html+css即可实现【仅供学习用途】
本代码展示了一个信用知识学习系统的前端实现,包含评分计算、因素分析和建议生成功能。所有数据均为模拟生成
|
4月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法详解
本指南详细介绍在Linux系统中安装和管理Node.js的步骤。首先检查现有环境,包括查看当前版本和清除旧版本;接着通过NodeSource仓库安装最新版Node.js并验证安装结果。推荐使用nvm(Node Version Manager)进行多版本管理,便于切换和设置默认版本。同时,提供常见问题解决方法,如权限错误处理和全局模块迁移方案,以及版本回滚操作,确保用户能够灵活应对不同需求。
340 0
|
4月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法
Debian 11更新Node.js主要就是这三种方式,无论你是初涉其中的新手还是找寻挑战的专家,总有一种方式能满足你的需求。现在,你已经是这个
371 80
|
4月前
|
存储 前端开发 安全
病历单生成器在线制作,病历单生成器app,HTML+CSS+JS恶搞工具
本项目为医疗病历模拟生成器,旨在为医学教学和软件开发测试提供数据支持,严格遵守《医疗机构病历管理规定》。
|
4月前
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
4月前
|
前端开发 容器
处方单图片生成器, 处方单在线制作免费,js+css+html恶搞神器
这是一个电子处方模拟生成系统,使用html2canvas库实现图片导出功能。系统生成的处方单包含多重防伪标识,并明确标注为模拟数据,仅供学习
|
4月前
|
前端开发
个人征信PDF无痕修改软件,个人征信模板可编辑,个人征信报告p图神器【js+html+css仅供学习用途】
这是一款信用知识学习系统,旨在帮助用户了解征信基本概念、信用评分计算原理及信用行为影响。系统通过模拟数据生成信用报告,涵盖还款记录

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
  • 3
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
  • 9
    响应式企业网站源码JavaL/PHP带后台管理​:Bootstrap HTML5模板
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改