# IoT-app **Repository Path**: davie/io-t-app ## Basic Information - **Project Name**: IoT-app - **Description**: open respurce - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2021-06-17 - **Last Updated**: 2025-06-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 智能家居 ## 1. 项目介绍 项目共包含三个页面 * 首页 * 设备页 * 我的 image-20210618112814788 image-20210618112837994 image-20210618112853401 每个页面都有一个公共的底部Tab,由于我们还没有讲到Vue和路由,所以这里不做成SPA(单页应用),而是把footer放到每一个页面中。 这是一个移动端项目,为了适应移动端设备,需要首先自适应的布局,布局方式,主要使用了flex弹性盒和vw作为单位。 项目开发分为两个阶段,第一阶段,实现页面布局,第二阶段,通过jQuery的ajax,请求数据,然后使用art-template模板引擎渲染。 ## 2. 页面布局实现 ### 2.1单位 页面布局主要使用了flex和vw技术。flex这里不多说,主要讲下vw。 vw也是一种相对单位,它把页面宽度分成100份,每一份的大小就是1vw。这样当所有元素大小都是用vw作为单位时,页面缩放的时候,元素大小也就会实现同步缩放。 具体到本项目来说,我们按照宽度为750px来计算。 100vw = 750px 所以: 1vw = 7.5px 比如,设计图中,某个元素的宽度为30px,那么使用vw表示就是 4vw,某个文字大小为24px,则使用vw表示为3.2vw。 ### 2.2 ACSS 随着项目的开发,样式代码也会越来越多,为了规范css命名方式,出现了很多css命名规范,例如:BEM, OOCSS,AMCSS,SMACSS,SUITCSS,ITCSS,ACSS等。 关于BEM命名规范,大家可以参考这个链接学习:https://bemcss.com/ 这里我们重点说下ACSS。 #### 什么是ACSS **ACSS 即: Atomic CSS,是一套将样式原子化的方式。** 什么意思呢?首先让我们思考这样一个场景: 比如要定义一双球鞋,球鞋有很多属性,比如:品牌,尺码,颜色,重量,季节,材料等。 如果用以前的方式定义样式,那写出来就是: ``` 球鞋A{ 品牌:"李宁"; 尺码:42; 颜色:红色; 重量:300g; 季节:夏季; 材料:䨻; } ``` 好,然后又有第二双鞋: ``` 球鞋B{ 品牌:"匹克"; 尺码:42; 颜色:红色; 重量:280g; 季节:夏季; 材料:态极; } ``` 我们发现在这两双球鞋的属性中有很多相同的属性,比如颜色,季节等,但是在定义每双鞋的时候要重复写一遍,如果还有第三双,第四双鞋,任然有可能有重复的属性,可能是这两个属性,也可能是其他属性,那么有没有办法更好的复用这些属性呢? 还有一个问题,就是球鞋的命名时候,也是我们经常犯愁的问题,常常不知道定义什么名字合适,或者又怕和其他的元素的类名重复造成覆盖。基于这些问题,有没有什么好的解决办法呢? 当然有,就是我们接下来要介绍的ACSS。 ACSS这种方式将CSS属性进行原子化,也就是一个属性定义成一个类! 比如定义球鞋的时候,有品牌,尺码,颜色,重量,季节,材料等这些属性,那就可以定义为: ```css .brand-ln{ 品牌:李宁; } .brand-pk{ 品牌:匹克; } .size-42{ 尺码:42; } .size-43{ 尺码:43; } .color-red{ 颜色:红色; } .seazon-sum{ 季节:夏天; } .material-beng{ 材料:䨻; } .material-tj{ 材料:态极; } ``` 当这些原子化的类定义好之后,一双李宁,红色,夏天穿的,采用了䨻材料的42码球鞋就表示为: ```html <球鞋 class="brand-ln color-red seazon-sum material-beng size-42" /> ``` 而一双匹克,同样红色,夏天穿的,采用了太极科技材料的43码鞋就表示为: ```html <球鞋 class="brand-pk color-red seazon-sum material-tj size-43" /> ``` 看明白了吗? 这样虽然貌似定义了很多类,但是可以在最大程度上复用这些类,而且不用在费尽心机去想元素的类名了。还有就是,之前我们会经常采用父子嵌套的方式定义样式,比如:` .banner div ul li h1`。这种方式一但DOM结构发生变化,那么样式就很容易出问题,给后期迭代维护造成不便。 在本次项目中,我们就讲采用ACSS的方式来定义样式。 #### ACSS 在项目的应用 比如下面的样式,我们就采用了ACSS的方式定义了一组文本大小的样式: ```css /* 按照屏幕宽度 750px 计算 1vw = 7.5px */ .f-60 { font-size: 8vw; } .f-54 { font-size: 7.2vw; } .f-40 { font-size: 5.3vw; } .f-34 { font-size: 4.5vw; } .f-32 { font-size: 4.3vw; } .f-30 { font-size: 4vw; } .f-28 { font-size: 3.7vw; } .f-26 { font-size: 3.5vw; } .f-24 { font-size: 3.2vw; } .f-20 { font-size: 2.7vw; } .f-22 { font-size: 2.9vw; } ``` 在`.f-60`这个类中,定义了`font-size`等于`8vw`,1vw = 7.5px,所以8vw就是60px,其它以此类推。 这样我们就是可以使用这些类来给元素添加样式了: ```html

环境检测

客厅

52

PM2.5/1h

``` 效果: image-20210618175937757 ## 3. 前后端交互 首页的设备数据我们定义为: ```js { "id":0, "title":"环境检测", "pos":"客厅", "source":"./images/furnishing_1.png", "info":{ "PM2dot5":30, "level":"优" }, "status":true } ``` 使用 jQuery请求数据: ```javascript $.ajax({ url: "./data/data.json", method: "GET", success: function (res) { console.log(res) } }) ``` ## 4. 模板引擎 数据获取之后,需要渲染到页面上,通常我们可能会使用字符串拼接的方式来渲染一组数据,但是当页面结构比较复杂的时候,甚至包含判断逻辑的时候,字符串拼接就显得不那么方便和优雅了。这时可以使用模板引擎。 ### 4.1 **art-template模板引擎** 官网: https://aui.github.io/art-template/zh-cn/index.html art-template支持以插值的方式输出值 ```js {{if user}}

{{user.name}}

{{/if}} ``` 并且可以很方便的实现条件判断和循环 条件判断: ```javascript {{if value}} ... {{/if}} {{if v1}} ... {{else if v2}} ... {{/if}} ``` 循环: ```javascript {{each target}} {{$index}} {{$value}} {{/each}} ``` ### 4.2 安装 在使用之前,首先要进行安装: 下载 [template-web.js](https://unpkg.com/art-template@4.13.2/lib/template-web.js) 然后使用script标签引入。 ### 4.3 定义模板 在页面中使用script标签定义模板,模板需要有id属性 ```javascript ``` 使用模板生成字符串,把模板的id和数据传入`template`函数,然后就会返回即将渲染的字符串,在插入到容器元素中即可。 ```javascript var html = template('tpl', res) $('.block-list').html(html) ``` # 系列课程: * 人人都能学的人工智能课:https://www.bilibili.com/cheese/play/ss10318 > 课程主要内容:ChatGPT提示词工程,提示词结构和技巧,最主要是教会你如何使用AI进行辅助编程,提高开发效率。通过个人网站,游戏和聊天机器人三个案例演示AI如何在开发中应用AI. * Uni-app+AI大模型小程序开发实战: https://www.bilibili.com/cheese/play/ss10160 > 课程主要内容:主要讲解如何调用ChatGPT等大模型接口,使其作为应用底层驱动。就像是你有了发动机,然后如何用这款发动机做出汽车,飞机各种设备。而AI大模型就是这款通用的发动机。 * 每个程序员必学的Linux基础课:https://www.bilibili.com/cheese/play/ss10979 > 这个不用多说吧,是个程序员都得会点Linux * 鸿蒙应用开发指南:https://www.bilibili.com/cheese/play/ss18082 > 我坚信,未来必定是iOS,安卓和鸿蒙三分天下。安卓和iOS的红利期是十年前,而现在鸿蒙的诞生,也必将带来一波技术红利。 ## 学习建议: * 适合有一定编程经验的同学学习 * 特别适合前端同学学习,学习成本低,上手快 * ios和安卓的同学也可以多学个鸿蒙