几天没有更新,最近参加了前端学习的夏令营,收获了很多东西。
学习周期
7月26~8月4日

学习内容
1. 统一讲授基础的技术(前端 + 后端)
2. 暂定时间 7月30日 结束基础技术讲解
3. 7月31日 开始进入到团队项目

整个B站项目 - 基于B站小程序视频播放平台
1. 前端架构 - 小程序技术支撑
1)完成界面开发
2)完成数据渲染
3)动态效果设计

2. 后端架构 - Java技术支撑1)提供前端小程序所需要的数据接口2)提供一个管理数据的平台a:统计数据 - 今天又多少人访问我们小程序b:新增视频 - 难道请数据库管理员(DBA)进行数据添加???

今日头条 - 聚会类型平台 - 用户群体面向(个人;媒体)
1. 自媒体 - 新闻;抖音;视频
2. 类似知了堂视频平台管理端

思考:
1. 尽量满足用户需求 - 开发人员职责
2. 后端同学需不需开发一个后端数据管理中心???

项目去学习技术
1. 需求分析 - 功能(团队)
1)前端
a:主页 - 提供怎样的功能(需要多少数据 - 参数)
b:分类 - 提供怎样的功能(需要多少数据 - 参数)
c:个人 - 提供怎样的功能(需要多少数据 - 参数)
d:视频 - 播放页面(需要多少数据 - 参数)
结论:找后端开发人员给我数据

 2)后端a:数据库怎么设计b:视频主页 - 提供怎样的功能c:发表视频 - 提供怎样的功能d:内容管理 - 提供怎样的功能e:评论管理 - 提供怎样的功能f:视频数据 - 提供怎样的功能产出内容:需求分析 - 思维导图2. 原型图设计 - axure 工具3. 开发文档设计 - 前端和后端开发规范1)设计接口文档2)如下非常重要内容a:接口地址 - 网络地址 - 访问地址,则可以获取服务器上数据b:接口功能c:请求参数d:请求方式e:返回数据类型f:返回数据结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CCNw73uD-1595950549581)(day0.assets/image-20200726140338845.png)]

具体的接口文档格式,请参考上课word文档

任务 - 团队合作任务

  • 梳理项目需求,提交文件格式 思维导入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QIqLVrQt-1595950549587)(day0.assets/image-20200726150800623.png)]

  • 完成原型图设计,提交线框图的原型

    1. 前端界面 - 线框图
    2. 后端界面 - 线框图
  • 完成接口开发文档,提交word文档

工具

  • axure - 原型图
  • typora - markdown工具
  • xmind - 思维导图

1.1 课程介绍

  • 项目:基于B站小程序视频播放平台
  • 整个课程主要分为四个部分
    1. Java后端技术基础知识讲解
    2. 前端技术基础知识讲解
    3. 基于项目功能模块技术讲解
    4. 最终以团队形式完成此项目
  • 项目技术栈 + 项目工程化能力管理
    1. 前端技术基础:HTML+CSS+JavaScript+Ajax
    2. Java Web开发技术基础:Servlet + Tomcat + JSP + JavaBean + JDBC
    3. 前端框架:微信小程序
    4. 后端框架:DButils + 数据库连接池
    5. 数据库:MySQL
    6. 项目构建工具:Maven
    7. 项目源代码管理:SVN + 协同开发平台

1.2 课程收获

1.2.1 理论知识 - 收获

  • 微信小程序组件化开发
  • 掌握后台数据交互逻辑和数据绑定,了解前后端的概念
  • 全面了解前端开发的知识体系与学习路线及方法
  • 全面了解后端开发的知识体系与学习路线及方法

1.2.2 应用能力 - 收获

  • 微信小程序组件化开发
  • 微信小程序数据绑定
  • JS程序业务逻辑代码实现
  • 数据请求异步封装
  • Ajax数据响应
  • 原生Web请求与响应的原理与流程
  • Maven项目构建技术应用
  • 扩展:SpringBoot搭建主流后台框架引擎(依据同学能力和时间)

1.2.3 工程化能力 - 收获

  • 项目开发思维提升,找到如何解决一个技术问题方法
  • 学习能力提高,主动学习和查阅技术开发文档
  • 怎么有效去组织团队开发和团队之间的合作
  • 掌握项目业务流程分析和逻辑实现

1.3 项目功能截图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g4da4zsd-1595950602505)(day1.assets/image-20200723141241139.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WEvvZzY8-1595950602507)(day1.assets/image-20200723141337217.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RWTpjLU5-1595950602509)(day1.assets/image-20200723141437942.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-64RM2Ie4-1595950602511)(day1.assets/image-20200723141530324.png)]

2.前端基础

2.1 HTML

前端展示型标签:

  • DIV:布局型标签(前端,后端)
  • A:超链接标签
  • UL:列表标签
  • IMG:图片标签
  • SPAN:语义标签(修饰性)

后端数据控制中心标签:

  • form:表单标签

    1. input:text; password; file; submit; reset; radio, checkbox, hidden
    2. textarea:文本域
    3. select:下拉框
  • table:表格标签
    1. th
    2. td
    3. tr
    4. thead
    5. tbody

2.2 CSS

CSS概念:层叠样式表,用于美化我们网页标签外观样式。比如:图片圆角;阴影效果;动画效果

CSS版本:CSS2 ;CSS3

2.2.1 CSS编码规范

  • 外部样式
/* 独立新建样式文件,后缀名.css */
body {...}
img {...}
ul {...}
<!-- 1.html,则我们可以通过link标签引入外部css样式 -->
<html><head><link href='1.css' type='text/css' rel='stylesheet'></head>
</html>
  • 内部样式:在网页html文件里面去编写CSS样式代码。需要在
<html><head><style>body {...}img {...}ul {...}</style></head>
</html>
  • 内嵌样式:在网页标签上面写CSS样式代码
<html><head></head><body><img style='width:100px; height: 100px'></body>
</html>

注意:

1.样式有一个优先级,内嵌样式 > 内部样式 > 外部样式

2.样式代码需要用分号 ; 结束

2.2.2 CSS语法

选择器:给标签指定样式(不是所有标签都需要进行样式美化)

选择器分类:

  • ID选择器
  • 类选择器
  • 标签选择器
  • 群组选择器
  • 层次选择器
第1钟:id选择器,根据标签属性id值来进行样式定义
<div id="d1"></div>
#d1 {样式代码
}第2钟:class选择器,根据标签属性class值来进行样式定义
<div class='d2'></div>
.d2 {样式代码
}第3钟:标签选择器,根据标签的名字来进行样式定义
<div></div>
div {样式代码
}第4钟:群组选择器,可以一次性为多个不同的标签统一的去定义相同样式
<div></div>
<button></button>
<div class='d3'></div>
div, button, .d3 {样式代码
}第5钟:层次选择器,如果我想去定义div里面button标签的样式
<div class='d4'><button></button><button></button><button></button>
</div>
.d4 > button { // 使用大于号,则定义直接子元素样式样式代码
}.d4 button {  // 空格,则定义子元素,或 子元素的子元素样式(儿子,孙子,孙子的孙子)样式代码
}
<!DOCTYPE html>
<html>
<head><title></title><style type="text/css">#d1 {width: 300px;height: 100px;background-color: red;}.d2 {width: 400px;height: 100px;background-color: black;}div {width: 500px;height: 100px;background-color: blue;}.d3 {width: 600px;height: 100px;background-color: yellow;}/* 层次选择器 */.d3 > button {width: 50px;}/* 群组选择器 */.d4, p {width: 700px;height: 100px;background-color: gray;}</style>
</head>
<body>
<div id="d1"></div>
<div class="d2"></div>
<div></div>
<div class="d3"><button>按钮1</button><button>按钮2</button><button>按钮3</button>
</div>
<div class="d4">我是一个div</div>
<p>我是一个p标签</p>
</body>
</html>

2.2.3 样式用法

  • 根据样式功能(作用)进行分类

    1. 文本样式
    2. 背景样式
    3. 盒模型样式
    4. 布局样式
    5. 新增CSS3样式
  • 文本样式
    1. color:颜色
    2. font-size:大小
    3. font-weight:粗度
    4. line-height:行高
    5. text-align:文字水平居中
  • 背景样式
    1. background,背景样式简写,包含:颜色;图片;定位;大小;平铺;渐变色
    2. background-color,颜色
    3. background-image,图片
    4. background-size,大小
    5. background-position,定位
    6. background-repeat,平铺
  • 盒模型样式
    1. width,宽度
    2. height,高度
    3. margin,外边距
    4. padding,内边距
    5. border,边框
    6. border-radius,圆角
    7. box-shadow,边框阴影
  • 布局样式
    1. position,相对定位(relative),固定定位(fixed),绝对定位(absolute),默认(static)
    2. left,相对要定位元素左侧距离
    3. right,相对要定位元素右侧距离
    4. top,相对要定位元素顶部距离
    5. bottom,相对要定位元素底部距离
    6. float,浮动,让元素脱离文档流(重要;恐怖)
    7. display,设置为flex,弹性布局
    8. flex-wrap,设置换行
    9. flex-direction,设置弹性布局方向
    10. justify-content,主轴方向的布局设置(对齐方式设置)
    11. align-item,纵轴方向的布局设置(对齐方式设置)
  • 新增CSS3样式
    1. transform,缩放(scale),移动(translate),旋转(rotate)
    2. transition,过渡 - 当一个样式变化为另一个样式所需要耗费时间(自带动画效果)
    3. @keyframes,自定义动画
    4. animation,执行动画(名称,时间,速度,次数,逆向)
<!DOCTYPE html>
<html>
<head><title></title><style type="text/css">div {/* 文本样式 */color: red; /* 颜色 */font-size: 20px;font-weight: bold;line-height: 50px; /* 当行高 = 盒子高度 垂直居中效果 */text-align: center;/*盒模型*/width: 200px;height: 50px;border: 1px solid black;margin: 0 auto;  /* margin 设置 上右下左 外边距距离 */padding: 0 10px; /* 文字内容 与 div的边框左右距离 10px */border-radius: 5px; /* 设置 div的四个角 */box-shadow: 10px 10px 10px gray; /* 边框阴影设置 (x,y,blur,color) */}</style>
</head>
<body>
<div>HelloWorld</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head><title></title><style type="text/css">.d1 {width: 100%;height: 300px;margin: 0 auto;background: rgb(74,36,121);}.d2 {width: 800px;height: 300px;margin: 0 auto;background-image: url(img/109951165132818526.jpg);background-size: cover;}</style>
</head>
<body>
<div class="d1"><div class="d2"></div>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head><title></title><style type="text/css">.d1 {width: 500px;height: 300px;background-color: gray;margin: 0 auto;position: relative; /* 加入了一个相对定位,则它里面的子元素就可以针对它定位了 */}.d2 {width: 200px;height: 100px;background-color: black;/* 如果是绝对定位, 针对父元素进行定位, 绝对定位往往有一个坑(它的父元素设置定位没有) *//* 如果父元素没有设置定位,则相对浏览器定位 */position: absolute;left: 10px;top: 30px;}</style>
</head>
<body>
<!-- d2是d1子元素,了解绝对定位,针对父元素进行定位 -->
<div class="d1"><div class="d2"></div>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head><title></title><style type="text/css">.d2 {width: 200px;height: 30px;color: white;line-height: 30px;background-color: black;position: fixed; /* 固定定位, 针对浏览器的定位 */right: 0;top: 100px;}</style>
</head>
<body>
<div class="d1"># 2.系统架构演变随着互联网的发展,网站应用的规模不断扩大。需求的激增,带来的是技术上的压力。系统架构也因此不断的演进、升级、迭代。从单一应用,到垂直拆分,到分布式服务,到SOA,以及现在火热的微服务架构,还有在Google带领下来势汹涌的Service Mesh。我们到底是该乘坐微服务的船只驶向远方,还是偏安一隅得过且过?其实生活不止眼前的苟且,还有诗和远方。所以我们今天就回顾历史,看一看系统架构演变的历程;把握现在,学习现在最火的技术架构;展望未来,争取成为一名优秀的Java工程师。## 2.1.集中式架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键。![1525529091749](day1.assets/1525529091749.png)存在的问题:- 代码耦合,开发维护困难
- 无法针对不同模块进行针对性优化
- 无法水平扩展
- 单点容错率低,并发能力差## 2.2.垂直拆分当访问量逐渐增大,单一应用无法满足需求,此时为了应对更高的并发和业务需求,我们根据业务功能对系统进行拆分:![1525529671801](day1.assets/1525529671801.png)优点:- 系统拆分实现了流量分担,解决了并发问题
- 可以针对不同模块进行优化
- 方便水平扩展,负载均衡,容错率提高缺点:- 系统间相互独立,会有很多重复开发工作,影响开发效率## 2.3.分布式服务当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式调用是关键。![1525530657919](day1.assets/1525530657919.png)优点:- 将基础服务进行了抽取,系统间相互调用,提高了代码复用和开发效率缺点:- 系统间耦合度变高,调用关系错综复杂,难以维护## 2.4.流动计算架构(SOA)SOA :面向服务的架构当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键![1525530804753](day1.assets/1525530804753.png)以前出现了什么问题?- 服务越来越多,需要管理每个服务的地址
- 调用关系错综复杂,难以理清依赖关系
- 服务过多,服务状态难以管理,无法根据服务情况动态管理服务治理要做什么?- 服务注册中心,实现服务自动注册和发现,无需人为记录服务地址
- 服务自动订阅,服务列表自动推送,服务调用透明化,无需关心依赖关系
- 动态监控服务状态监控报告,人为控制服务状态缺点:- 服务间会有依赖关系,一旦某个环节出错会影响较大
- 服务关系复杂,运维、测试部署困难,不符合DevOps思想## 2.5.微服务前面说的SOA,英文翻译过来是面向服务。微服务,似乎也是服务,都是对系统进行拆分。因此两者非常容易混淆,但其实却有一些差别:微服务的特点:- 单一职责:微服务中每一个服务都对应唯一的业务能力,做到单一职责
- 微:微服务的服务拆分粒度很小,例如一个用户管理就可以作为一个服务。每个服务虽小,但“五脏俱全”。
- 面向服务:面向服务是说每个服务都要对外暴露Rest风格服务接口API。并不关心服务的技术实现,做到与平台和语言无关,也不限定用什么技术实现,只要提供Rest的接口即可。
- 自治:自治是说服务间互相独立,互不干扰- 团队独立:每个服务都是一个独立的开发团队,人数不能过多。- 技术独立:因为是面向服务,提供Rest接口,使用什么技术没有别人干涉- 前后端分离:采用前后端分离开发,提供统一Rest接口,后端不用再为PC、移动段开发不同接口- 数据库分离:每个服务都使用自己的数据源- 部署独立,服务间虽然有调用,但要做到服务重启不影响其它服务。有利于持续集成和持续交付。每个服务都是独立的组件,可复用,可替换,降低耦合,易维护微服务结构图:![1526860071166](day1.assets/1526860071166.png)# 3.后端技术能力要求同学们一定要注意,目前企业的后端技术开发趋势,务必是前后端技术整合对于目前应届生同学需要学习技术内容如下,这个也是企业的要求## 3.1 前端技术前端技术:- 基础的HTML、CSS、JavaScript(基于ES6标准)
- Vue.js 2.0以及基于Vue的UI框架:Vuetify
- 前端构建工具:WebPack
- 前端安装包工具:NPM
- Vue脚手架:Vue-cli
- Vue路由:vue-router
- ajax框架:axios
- 基于Vue的富文本框架:quill-editor## 3.2 后端技术后端技术:- 基础的SpringMVC、Spring 5.0和MyBatis3
- Spring Boot 2.0.1版本
- Spring Cloud 最新版 Finchley.RC1
- Redis-4.0
- RabbitMQ-3.4
- Elasticsearch-5.6.8
- nginx-1.10.2
- FastDFS - 5.0.8
- MyCat
- Thymeleaf
- JWT## 3.3 技术解读上面的技术组合可以在项目中解决以下的典型问题:- 利用Node.js及Vue.js技术栈,实现前后端分离开发- 利用SpringCloud技术栈,实现真正的微服务实战开发,并且是基于SpringBoot2.0和SpringCloud最新版本Finchley.RC1实现,业内领先。- 基于FastDFS解决大数据量的分布式文件存储问题- 基于Elasticsearch高级聚合功能,实现商品的智能过滤搜索- 基于Elasticsearch高级聚合功能,实现销售业务的复杂统计及报表输出- 基于LocalStorage实现离线客户端购物车,减轻服务端压力。- 基于JWT技术及RSA非对称加密实现真正无状态的单点登录。- 结合JWT和RSA非对称加密,自定义Feign过滤器实现自动化服务间鉴权,解决服务对外暴露的安全问题- 基于RabbitMQ实现可靠消息服务,解决服务间通信问题- 基于RabbitMQ实现可靠消息服务,解决分布式事务问题- 使用微信SDK实现微信扫码支付,符合主流付款方式- 基于Redis搭建高可用集群,实现可靠缓存服务即热点数据保存。持久化,集群,哨兵,主从,缓存击穿- 基于Redis和Mq来应对高可用高并发的秒杀场景- 基于MyCat实现数据库的读写分离和分库分表- 基于Thymeleaf实现页面模板和静态化,提高页面响应速度和并发能力- 基于Nginx实现初步的请求负载均衡和请求限流
</div><div class="d2">对话框: 正在讲话 刘阳
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head><title></title><style type="text/css">.d1 {/* 如果没有设置定位,则div是在浏览器的左上角 */width: 200px;height: 50px;background-color: black; transition: 5s all; /* 动态的特效 */}.d1:hover {/* 相对原来的位置移动 10px;50px; */position: relative;top: 200px;left: 100px;}</style>
</head>
<body>
<div class="d1"></div>
</body>
</html>

2.3 弹性布局

目的:

  • 有效帮助我们去定位每个元素在网页中一个位置,主要对齐的方式
  • 原理 - 主要是通过父级标签控制子级标签布局。原因:因为布局从上到下,从左到右,先大后小

学习弹性布局,最关键的因素,同学必须了解什么是块级元素标签

  • 何谓块级元素:不管元素宽度多大;多小。这个元素是独自占据浏览器的一行
  • div是块级元素;p标签是块级元素

弹性布局样式

.d1 {display: flex; /* 表示当前div是一个弹性布局 */jusitfy-content: space-around; /* 控制元素在X轴一个对齐方式(主轴) */
}
<!DOCTYPE html>
<html>
<head><title></title><style type="text/css">/* 弹性布局用于在父级标签上, 作用控制子级标签的布局 */.d1 {width: 90%;height: 80px;background-color: green;margin: 0 auto;display: flex;justify-content: center;}/* 层次选择器,设置d1下面的所有div的样式 */.d1 > div {width: 180px;height: 80px;background-color: blue;margin: 0 3px;}</style>
</head>
<body>
<div class="d1"><div></div><div></div><div></div><div></div><div></div>
</div>
<div class="d1"></div>
</body>
</html>

2.4 西瓜视频

完成西瓜视频首页实战 - 弹性布局练习

难点:

  • 布局,出现一个元素的宽度 或者 高度的计算
  • calc() 函数用于动态计算长度值来解决元素宽度或高度计算
  • 网页整体全屏模式,局部区域有滚动条。overflow-y: auto

整体布局代码

<!DOCTYPE html>
<html>
<head><title></title><meta charset="utf-8"><style type="text/css">* {margin: 0;padding: 0;}html,body {width: 100%; /* 相当于能够针对不同浏览器能够全屏显示 */height: 100%; /* 相当于整个网页是整屏显示,局部滚动 */overflow: hidden; /* 局部内容的高度肯定会大于整个浏览器的高度,那么超出部分要隐藏 */}.xg-nav {width: 100%;height: 73px;background-color: #000;}.xg-body {width: 100%;height: calc(100vh - 73px); /* 自动计算出下方div的高度,针对不同浏览器分辨率算出div高度 */background-color: blue;display: flex;}.xg-menu {width: 200px;height: 100%;background-color: yellow;}.xg-ctn {width: calc(100vw - 200px);height: 100%;background-color: red;}</style>
</head>
<body>
<div class="xg-nav"></div>
<div class="xg-body"><div class="xg-menu"></div><div class="xg-ctn"></div>
</div>
</body>
</html>

局部带滚动条的代码

<!DOCTYPE html>
<html>
<head><title></title><meta charset="utf-8"><style type="text/css">* {margin: 0;padding: 0;}html,body {width: 100%; /* 相当于能够针对不同浏览器能够全屏显示 */height: 100%; /* 相当于整个网页是整屏显示,局部滚动 */overflow: hidden; /* 局部内容的高度肯定会大于整个浏览器的高度,那么超出部分要隐藏 */}.xg-nav {width: 100%;height: 73px;background-color: #000;}.xg-body {width: 100%;height: calc(100vh - 73px); /* 自动计算出下方div的高度,针对不同浏览器分辨率算出div高度 */background-color: blue;display: flex;}.xg-menu {width: 200px;height: 100%;background-color: yellow;}.xg-ctn {width: calc(100vw - 200px);height: 100%;background-color: rgb(247,247,247);display: flex;justify-content: space-around;flex-wrap: wrap; /* 自动换行 当屏幕的宽度不够,则自动换行*/overflow-y: auto;}/* 内容区的样式 */.xg-item {width: 270px;height: 212px;background-color: hotpink; /* #代表颜色取值是一个十六进制数 0~F */margin-top: 30px;border-radius: 5px;display: flex; /* 调整弹性布局的方向,默认方向是水平方向 */flex-direction: column; /* 调整弹性布局为垂直方向 */justify-content: space-between; /* 上下对齐,均匀分布 */}/* 内容区的样式中图片 */.xg-item > img {width: 100%;height: 145px;border-radius: 5px;}</style>
</head>
<body>
<div class="xg-nav"></div>
<div class="xg-body"><div class="xg-menu"></div><div class="xg-ctn"><div class="xg-item"><img src="img/1.jpg"><p>龙珠Z: 复活的菲利沙</p><p>龙珠之宇宙最强对决</p></div><div class="xg-item"><img src="img/2.jpg"><p>吹哨人</p><p>雷佳音汤唯陷两难抉择</p></div><div class="xg-item"></div><div class="xg-item"></div><div class="xg-item"></div><div class="xg-item"></div><div class="xg-item"></div><div class="xg-item"></div><div class="xg-item"></div><div class="xg-item"></div><div class="xg-item"></div><div class="xg-item"></div></div>
</div>
</body>
</html>

2.5 动画样式

  • transform属性设置基础动画:缩放;移动;旋转
  • transition属性设置动画过渡特效:从一个样式转换另一个样式的过渡特效
  • 自定义动画@keyframes;animation

同学需要了解一个伪类:hover,当鼠标移动到元素上时候会触发一个动作(鼠标悬停效果)

<!DOCTYPE html>
<html>
<head><title></title><style type="text/css">.d-scale, .d-translate, .d-rotate {width: 300px;height: 100px;margin: 0 auto;margin-top: 100px;background-color: blue;transition: 2s all; /* 时间 规定设置过渡效果的 CSS 属性的名称 */}/* 伪类:hover设置变大的效果; */.d-scale:hover {transform: scale(1.2);}/* 单独在修改d-translate局部样式 */.d-translate {margin-top: 15px;background-color: green;}/* 伪类:hover鼠标悬停事件 */.d-translate:hover {transform: translateX(-50px); /* 水平X轴反方向移动 */}/* 局部修改部分样式 */.d-rotate {margin-top: 50px;background-color: red;}.d-rotate:hover {transform: rotate(-30deg);}</style>
</head>
<body>
<div class="d-scale"></div>
<div class="d-translate"></div>
<div class="d-rotate"></div>
</body>
</html>

自定义动画语法

/* @keyframes语法一 */
@keyframes 动画名称 {from{ /* 开始动画 */}to{ /* 结束动画 */}
}/* @keyframes语法二 */
@keyframes 动画名称 {0%{ /* 动画执行的时间点 */}30%{ /* 动画执行的时间点 */}50%{ /* 动画执行的时间点 */}100%{ /* 动画执行的时间点 */}
}/* 动画的运行语法, animation必须放到选择器里面 */
/* animation所有动画属性的简写属性 */
animation: 动画名称 时间 速度 延迟多久开始执行 逆向播放 次数

小小技巧扩展:如何让元素垂直居中 + 水平居中

<!-- 方法一:垂直居中 + 水平居中 -->
<!DOCTYPE html>
<html>
<head><title></title><meta charset="utf-8"><style type="text/css">.d-animation {width: 200px;height: 100px;background-color: #000;position: absolute; /* 针对浏览器定位 */left: 50%;top: 50%;margin-left: -100px;margin-top: -50px;}</style>
</head>
<body>
<div class="d-animation"></div>
</body>
</html><!-- 方法二:垂直居中 + 水平居中 -->
<!DOCTYPE html>
<html>
<head><title></title><meta charset="utf-8"><style type="text/css">.d-animation {width: 200px;height: 100px;background-color: #000;position: absolute; /* 针对浏览器定位 */left: 50%;top: 50%;transform: translate(-100px, -50px);}</style>
</head>
<body>
<div class="d-animation"></div>
</body>
</html><!-- 方法三:垂直居中 + 水平居中 -->
<!DOCTYPE html>
<html>
<head><title></title><meta charset="utf-8"><style type="text/css">* {margin: 0;padding: 0;}html,body {width: 100%;height: 100%;display: flex;justify-content: center;align-items: center;}.d-animation {width: 200px;height: 100px;background-color: #000;}</style>
</head>
<body>
<div class="d-animation"></div>
</body>
</html>
<!DOCTYPE html>
<html>
<head><title></title><meta charset="utf-8"><style type="text/css">* {margin: 0;padding: 0;}html,body {width: 100%;height: 100%;display: flex;justify-content: center;align-items: center;}.d-animation {width: 200px;height: 100px;background-color: #000;animation: kf .5s linear 1s infinite;}/* 定义动画 */@keyframes kf {0%{transform: rotate(0deg);}100% {transform: rotate(360deg);}}</style>
</head>
<body>
<div class="d-animation"></div>
</body>
</html>

2.6 比心(画心)

<!DOCTYPE html>
<html>
<head><title></title><meta charset="utf-8"><style type="text/css">* {margin: 0;padding: 0;}.box {width: 180px;height: 160px;position: absolute;left: 50%;top: 50%;margin-left: -90px;margin-top: -80px;animation: kf 1s alternate infinite;}.round1 {width: 100px;height: 100px;border-radius: 50%; /* 圆 */background-color: hotpink;position: absolute;left: 0;top: 0;}.round2 {width: 100px;height: 100px;border-radius: 50%; /* 圆 */background-color: hotpink;position: absolute;right: 0;top: 0;}.bottom {width: 100px;height: 100px;background-color: hotpink;position: absolute;left: 40px;top: 40px;transform: rotate(45deg);}@keyframes kf {0%{transform: scale(0.6);}100%{transform: scale(1);}}</style>
</head>
<body>
<div class="box"><div class="round1"></div><div class="round2"></div><div class="bottom"></div>
</div>
</body>
</html>

2.7 太极

<!DOCTYPE html>
<html>
<head><title></title><style type="text/css">* {margin: 0;padding: 0;}.taiji {margin: 0 auto; /* 水平居中 */margin-top: 100px; /* 顶部距离100px */width: 400px;height: 200px;border-radius: 50%;border: 1px solid black;border-bottom-width: 200px;position: relative; /* 相对定位:针对自己的位置进行定位 */animation: kf 5s 10s infinite;}/* ::before 伪元素(虚拟元素); *//* css的伪元素,之所以被称为伪元素,是因为他们不是真正的页面元素 */.taiji::before {content: '';border: 85px solid black;width: 30px;height: 30px;border-radius: 50%;background-color: white;position: absolute; /* 父元素只要有定位才能控制子元素的在父元素中位置 */top: 50%;left: 0;}.taiji::after {content: '';border: 85px solid white;width: 30px;height: 30px;border-radius: 50%;background-color: black;position: absolute; /* 父元素只要有定位才能控制子元素的在父元素中位置 */top: 50%;right: 0;}@keyframes kf {0%{transform: rotate(0deg);}100%{transform: rotate(360deg);}}</style>
</head>
<body>
<div class="taiji"></div>
</body>
</html>

2.8 魔方

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GjVemG9K-1595950602513)(day1.assets/image-20200727160430449.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Smrc92IJ-1595950602515)(day1.assets/image-20200727160505831.png)]

<!DOCTYPE html>
<html>
<head><title></title><style type="text/css">* {margin: 0;padding: 0;}.box {position: relative;width: 200px;height: 200px;margin: 200px auto;transform-style: preserve-3d; /* 开启 3D 特效 */transition: all 2s ease;}.side {position: absolute;left: 0;top: 0;width: 200px;height: 200px;text-align: center;line-height: 200px;font-size: 36px;color: #fff;background-color: rgba(66, 66, 66, 0.5);}.left {transform: translateX(-100px) rotateY(90deg);background-color: rgba(57, 57, 107, 0.5);}.right {transform: translateX(100px) rotateY(90deg);background-color: rgba(62, 238, 86, 0.5);}.top {transform: translateY(-100px) roateX(90deg);background-color: rgba(164, 57, 226, 0.5); }.bottom {transform: translateY(100px) roateX(90deg);background-color: rgba(212, 214, 53, 0.5); }.before {transform: translateZ(100px);background-color: rgba(216, 107, 53, 0.5);}.after {transform: translateZ(-100px);background-color: rgba(221, 41, 176, 0.5);}.box:hover {transform: rotateX(360deg) rotateY(360deg);}</style>
</head>
<body>
<div class="box"><div class="side before">前</div><div class="side after">后</div><div class="side left">左</div><div class="side right">右</div><div class="side top">上</div><div class="side bottom">下</div>
</div>
</body>
</html>

3.微信小程序

3.1 小程序历史

  • 微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用
  • 2017年1月9日,张小龙在2017微信公开课Pro上发布的微信小程序正式上线
  • 2018年2月,微信官方发布公告称:已对涉及假货高仿、色情低俗和违规“现金贷”等超过2000个微信小程序,进行永久封禁处理
  • 微信小程序是一种不用下载就能使用的应用,也是一项创新,经过将近两年的发展,已经构造了新的微信小程序开发环境和开发者生态。微信小程序也是这么多年来中国IT行业里一个真正能够影响到普通程序员的创新成果,已经有超过150万的开发者加入到了微信小程序的开发
  • 日活用户达到两个亿,微信小程序还在许多城市实现了支持地铁、公交服务。微信小程序发展带来更多的就业机会,2017年小程序带动就业104万人

官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/

3.2 入门小程序

注意:先创建一个空目录,存储小程序源代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lzYnPN9n-1595950602516)(day1.assets/image-20200727165401745.png)]

  • pages:小程序源代码目录
  • utils:工具包,存储JS插件
  • app.js:小程序全局JS文件
  • app.json:小程序全局配置文件
  • app.wxss:小程序全局样式文件

wxml:小程序页面

wxss:小程序样式

js:小程序业务逻辑代码

  "pages":["pages/index/index","pages/logs/logs"],

3.3 wxml语法

WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构

3.3.1 数据绑定

通过 {{}} 表示要绑定数据

<text>{{username}}</text>
<text>{{userage}}</text>
  /*** 页面的初始数据*/data: {'username': '张三','userage': 23},

注意:数据绑定

  • 内容呈现
  • 组件属性

3.3.2 条件渲染

  • wx:if - 使用 wx:if="" 来判断是否需要渲染该代码块
  • wx:elif - 可以用 wx:elif 和 wx:else 来添加一个 else 块
  • wx:else - 可以用 wx:elif 和 wx:else 来添加一个 else 块

3.3.3 列表渲染

  • 在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件
  • 默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item
<text>{{username}}</text>
<text>{{userage}}</text>
<text wx:if='{{useraddress != ""}}'>{{useraddress}}</text><text wx:for='{{users}}'>{{item}}</text>
  /*** 页面的初始数据*/data: {'username': '张三','userage': 23,'useraddress': '成都','users':['李四', 23, '成都']},

1.学习内容

  • 巩固小程序样式应用
  • JavaScript入门 - 小程序
  • 小程序开发 - 实战

2.小程序样式应用

  • 小程序样式 - 关联文件wxss
  • 场景应用 - 小程序手机充电特效
  • 介绍一下小程序里面的组件(标签)
    1. view:容器组件,类似div
    2. image,图片组件
    3. text,文本组件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cyvhaquh-1595950624800)(day2.assets/image-20200728110458673.png)]

<view class='container'><view class="battery"></view>
</view>
/* 设置一个页面样式 */
page {width: 100%;height: 100%;display: flex;
}/* 电池充电壳 - 容器 */
.container {position: relative;width: 340rpx;height: 500rpx;margin: auto;
}/* 存储电量 - 容器*/
.battery {position: absolute;left: 0;top: 0;width: 100%;height: 100%;border-radius: 15rpx 15rpx 5rpx 5rpx;background-color: #fff;filter: drop-shadow(0 1rpx 3rpx rgba(1,188,213, .82));
}/* 电池正极 */
.battery::before {content: '';position: absolute;left: 50%;top: 0;width: 80rpx;height: 30rpx;background-color: rgba(2,119,253, .88);border-radius: 5rpx 5rpx 0 0;transform: translate(-50%, -30rpx);
}/* 电量样式 */
.battery::after {content: '';position: absolute;left: 0;right: 0;bottom: 0;top: 80%;border-radius: 0 0 5rpx 5rpx;background: linear-gradient(to bottom, #7abcff 0%, #00BCD4 44%, #2196F3 100%);animation: chong 6s linear infinite;
}@keyframes chong {95%{top: 5%;border-radius: 0 0 5rpx 5rpx;}100%{top: 0;border-radius: 15rpx 15rpx 5rpx 5rpx;}
}

3.小程序 - JS

3.1 JS 介绍

JavaScript是一种属于网络的高级脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的

JavaScript的标准是ECMAScript 。截至 2012 年,所有浏览器都完整的支持ECMAScript 5.1,旧版本的浏览器至少支持ECMAScript 3 标准。2015年6月17日,ECMA国际组织发布了ECMAScript的第六版,该版本正式名称为 ECMAScript 2015,但通常被称为ECMAScript 6 或者ES6

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iguGiyfn-1595950624803)(day2.assets/image-20200728111750870.png)]

ECMAScript 6(ES6) 目前基本成为业界标准,它的普及速度比 ES5 要快很多,主要原因是现代浏览器对 ES6 的支持相当迅速,尤其是 Chrome 和 Firefox 浏览器,已经支持 ES6 中绝大多数的特性

3.2 ES6 新语法

  • 不一样变量声明:const 和 let

ES6推荐使用let定义局部变量

var x = '全局变量';
{let x = '局部变量';console.log(x); // 局部变量
}
console.log(x); // 全局变量

const表示声明常量,两者都为块级作用域;const 声明的变量都会被认为是常量,意思就是它的值被设置完成后就不能再修改了

const a = 1
a = 0 //报错
  • 模板字符串

ES6之前处理字符串:通过\+ 来构建模板

$("body").html("This demonstrates the output of HTML \
content to the page, including student's\
" + name + ", " + seatNumber + ", " + sex + " and so on.");

ES6的字符串应用

  1. 基本的字符串格式化。将表达式嵌入字符串中进行拼接。用${}来界定
  2. ES6反引号(``)直接搞定
$("body").html(`This demonstrates the output of HTML content to the page,
including student's ${name}, ${seatNumber}, ${sex} and so on.`);
  • 箭头函数

ES6 中,箭头函数就是函数的一种简写形式,使用括号包裹参数,跟随一个 =>,紧接着是函数体

箭头函数三大特点

  1. 不需要function关键字来创建函数
  2. 省略return关键字
  3. 继承当前上下文的this关键字
// ES5
var add = function (a, b) {return a + b;
};
// 使用ES6箭头函数
var add = (a, b) => a + b;// ES5
[1,2,3].map((function(x){return x + 1;
}).bind(this));// 使用ES6箭头函数
[1,2,3].map(x => x + 1);
  • 函数的参数默认值
// ES6之前,当未传入参数时,text = 'default';
function printText(text) {text = text || 'default';console.log(text);
}// ES6;
function printText(text = 'default') {console.log(text);
}printText('hello'); // hello
printText();// default
  • for循环

for…of 用于遍历一个迭代器,如数组

let letters = ['a', 'b', 'c'];
letters.size = 3;
for (let letter of letters) {console.log(letter);
}
// 结果: a, b, c

for…in 用来遍历对象中的属性:

 let stus = ["Sam", "22", "男"];for (let stu in stus) {console.log(stus[stu]);}
// 结果: Sam, 22, 男
  • 对象超类

ES6 允许在对象中使用 super 方法

var parent = {foo() {console.log("Hello from the Parent");}
}var child = {foo() {super.foo();console.log("Hello from the Child");}
}Object.setPrototypeOf(child, parent);
child.foo(); // Hello from the Parent// Hello from the Child

3.3 小程序中的JS原理

  • 小程序JS的开发,完全采用ECMAScript语法标准来执行的。所以,大家学习小程序开发之前一定要把JavaScript学好

  • 小程序中渲染层和逻辑层是理解小程序实现动态数据交互,以及如何操作网页标签和样式的核心

    1. 首先,我们来简单了解下小程序的运行环境。小程序的运行环境分成渲染层和逻辑层,其中 WXML 模板和 WXSS 样式工作在渲染层,JS 脚本工作在逻辑层
    2. 小程序的渲染层和逻辑层分别由2个线程管理:渲染层的界面使用了WebView 进行渲染;逻辑层采用JsCore线程运行JS脚本。一个小程序存在多个界面,所以渲染层存在多个WebView线程,这两个线程的通信会经由微信客户端(下文中也会采用Native来代指微信客户端)做中转,逻辑层发送网络请求也经由Native转发,小程序的通信模型下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N8KOVgGy-1595950624805)(day2.assets/image-20200728120720328.png)]

3.4 小程序运行机制

3.4.1 前台/后台

小程序启动后,界面被展示给用户,此时小程序处于前台状态。

当用户点击右上角胶囊按钮关闭小程序,或者按了设备 Home 键离开微信时,小程序并没有完全终止运行,而是进入了后台状态,小程序还可以运行一小段时间。

当用户再次进入微信或再次打开小程序,小程序又会从后台进入前台。但如果用户很久没有再进入小程序,或者系统资源紧张,小程序可能被销毁,即完全终止运行。

3.4.2 小程序启动

这样,小程序启动可以分为两种情况,一种是冷启动,一种是热启动

  • 冷启动:如果用户首次打开,或小程序销毁后被用户再次打开,此时小程序需要重新加载启动,即冷启动。
  • 热启动:如果用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时小程序并未被销毁,只是从后台状态进入前台状态,这个过程就是热启动。

3.4.3 小程序销毁时机

通常,只有当小程序进入后台一定时间,或者系统资源占用过高,才会被销毁。具体而言包括以下几种情形:

  • 当小程序进入后台,可以维持一小段时间的运行状态,如果这段时间内都未进入前台,小程序会被销毁。
  • 当小程序占用系统资源过高,可能会被系统销毁或被微信客户端主动回收。
    • 在 iOS 上,当微信客户端在一定时间间隔内连续收到系统内存告警时,会根据一定的策略,主动销毁小程序,并提示用户 「运行内存不足,请重新打开该小程序」。具体策略会持续进行调整优化。
    • 建议小程序在必要时使用 wx.onMemoryWarning 监听内存告警事件,进行必要的内存清理。

3.5 小程序生命周期

以下内容你不需要立马完全弄明白,不过以后它会有帮助

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KfzE3Wjs-1595950624807)(day2.assets/page-lifecycle.2e646c86.png)]

4.小程序-实战

4.1 余额提现-界面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8UR5UoJv-1595950624809)(day2.assets/image-20200728143032313.png)]

案例界面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jdo4e9zw-1595950624811)(day2.assets/image-20200728143117700.png)]

涉及到技术

  • JS事件,如何在小程序上定义函数,让函数绑定小程序上事件
  • 小程序事件参数传递,如何能够接收页面(渲染层)传递过来的参数(逻辑层)
  • 目标达成:JS控制组件 + 组件样式
<view class='swiper-tab'><view class="swiper-tab-item {{currentTab == 0 ? 'active': ''}}" data-current='0' bindtap='clickTab'>全部</view><view class="swiper-tab-item {{currentTab == 1 ? 'active': ''}}" data-current='1' bindtap='clickTab'>提现中</view><view class="swiper-tab-item {{currentTab == 2 ? 'active': ''}}" data-current='2' bindtap='clickTab'>已提现</view>
</view><swiper duration="300" current="{{currentTab}}" bindchange='swiperTab'><swiper-item><view>全部页面</view></swiper-item><swiper-item><view>提现中页面</view></swiper-item><swiper-item><view>已提现页面</view></swiper-item>
</swiper>
.swiper-tab {width: 100%;height: 88rpx;border-bottom: 2rpx solid #ccc;text-align: center;line-height: 88rpx;display: flex;flex-flow: row;justify-content: space-around;
}.swiper-tab-item {width: 22%;color: #434343;
}.active {color: #F65959;border-bottom: 4rpx solid #F65959;
}swiper {height: 800rpx;line-height: 800rpx;font-weight: bold;font-size: 45rpx;text-align: center;
}
// pages/aliplay/aliplay.js
Page({/*** 页面的初始数据*/data: {'currentTab': 0},// 滑块左右滑动会触发此事件swiperTab: function(e) {let _this = this;_this.setData({  // 如果要去修改 data 里面变量 currentTab,则需使用 setData() 函数currentTab: e.detail.current // 给变量currentTab进行重新赋值});},// 卡片点击事件clickTab: function(e) {// 当点中卡片需要去改变 currentTab 变量// currentTab 变量的值怎么来// e.target.dataset.current 相当于 <view data-current='0'></view>let _this = this;if(_this.data.currentTab === e.target.dataset.current) {return false;} else {_this.setData({currentTab: e.target.dataset.current})}},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {},/*** 生命周期函数--监听页面初次渲染完成*/onReady: function () {},/*** 生命周期函数--监听页面显示*/onShow: function () {},/*** 生命周期函数--监听页面隐藏*/onHide: function () {},/*** 生命周期函数--监听页面卸载*/onUnload: function () {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh: function () {},/*** 页面上拉触底事件的处理函数*/onReachBottom: function () {},/*** 用户点击右上角分享*/onShareAppMessage: function () {}
})

4.2 侧栏滑动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-utwo6duk-1595950624812)(day2.assets/image-20200728153930723.png)]

目标达成:

  1. JS原理:渲染层 与 逻辑层 交互
  2. 事件用法能够更加熟练
    • 如何获取js里面变量 this.data.变量名
    • 如何设置js里面变量 this.setData(...)
  3. 页面与js数据交互(传递)
    • H5中data属性 <view data-index='100'></view>
    • 增加一个事件 <view data-index='100' bindtap='show'>
    • 在定义show函数时候去委派一个事件对象 function(e) {}e.target.dataset.index
<!-- 容器 -->
<view class='page'><!-- 左侧栏 - 容器  --><view class="page-bottom"><view class="page-content"><view class="wc"><text>第一个item-1</text></view><view class="wc"><text>第二个item-2</text></view><view class="wc"><text>第三个item-3</text></view><view class="wc"><text>第四个item-4</text></view></view></view><!-- 右侧栏 - 容器 --><view class="page-top {{open ? 'c-state1': ''}}"><image src="/images/btn.png" bindtap="tap_ch"></image></view>
</view>
page, .page {height: 100%;
}.page-bottom {height: 100%;width: 750rpx;position: fixed;z-index: 0;background-color: rgb(0, 68, 97);
}.page-content {padding-top: 300rpx;
}.wc {color: #fff;padding: 30rpx 0 30rpx 40rpx;
}.page-top {height: 100%;position: fixed;width: 750rpx;z-index: 0;background-color: rgb(57, 125, 230);transition: 0.4s all ease;
}.page-top image {position: absolute;width: 68rpx;height: 38rpx;left: 20rpx;top: 20rpx;
}.c-state1 {transform: rotate(0deg) scale(1) translate(75%, 0%);
}
// pages/side/side.js
Page({/*** 页面的初始数据*/data: {open: false},tap_ch: function(e) {// 点击控制样式的变化// this 当前页面的对象,包含:js里面函数,变量名,内置方法 setData()let _this = this;if(_this.data.open) {_this.setData({open: false // 关闭状态});} else {_this.setData({open: true // 打开状态});}},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {},/*** 生命周期函数--监听页面初次渲染完成*/onReady: function () {},/*** 生命周期函数--监听页面显示*/onShow: function () {},/*** 生命周期函数--监听页面隐藏*/onHide: function () {},/*** 生命周期函数--监听页面卸载*/onUnload: function () {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh: function () {},/*** 页面上拉触底事件的处理函数*/onReachBottom: function () {},/*** 用户点击右上角分享*/onShareAppMessage: function () {}
})

4.3 天气预报

目标达成:

  • 理解第三方服务器概念 - 作用
  • 接口作用,里面提供数据如何分析它们
  • 学会使用小程序的网络请求 API 来调用第三方服务器的接口

实现步骤:

第一步:寻找提供天气预报第三方服务器,分析服务器提供的数据接口格式

  • 接口就是网络地址,采用天行数据API接口
  • 请求参数,告诉服务器要想获取具体的数据是什么
  • 返回数据

第二步:通过微信小程序网络请求组件,能够拉取第三方服务器发送数据

  • wx.request 函数请求网络数据
  • 根据接口信息,编写如下代码 - 代码样例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xTItlNqU-1595950624813)(day2.assets/image-20200728172025795.png)]

wx.request({url: 'http://api.tianapi.com/txapi/tianqi/index?key=xxx&city=成都',method: 'GET',dataType: 'JSON',success: function(e) {}
});

第三步:设计天气预报界面,然后将数据渲染到界面里面

  1. 解析数据 - 天行api返回数据是一个数组 newslist
  2. 数据绑定
// pages/weather/weather.js
Page({/*** 页面的初始数据*/data: {weatherlist: [] // 给wxml传递数据},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {var _this = this;console.log(_this.data.weatherlist);wx.request({url: 'http://api.tianapi.com/txapi/tianqi/index?key=ed1394ce936a5526c70fea58875538e0&city=成都',method: 'GET',dataType: 'json', // 小写的jsonsuccess: function(e) {// e.newslist 返回存储天气信息数据// let newslist 自己定义的变量, 接收 e.newslist 里面数据let newslist = e.data.newslist;_this.setData({weatherlist: newslist});}})},/*** 生命周期函数--监听页面初次渲染完成*/onReady: function () {},/*** 生命周期函数--监听页面显示*/onShow: function () {},/*** 生命周期函数--监听页面隐藏*/onHide: function () {},/*** 生命周期函数--监听页面卸载*/onUnload: function () {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh: function () {},/*** 页面上拉触底事件的处理函数*/onReachBottom: function () {},/*** 用户点击右上角分享*/onShareAppMessage: function () {}
})

今天学习了微信小程序的开发文档,写了电池的小程序,和天气预报,掌握了小程序开发的主要步骤。

学习前端第三天-----小程序制作相关推荐

  1. 抢饭碗?这位 05 后开发三款小程序!

    整理 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 2017 年 1 月 9 日,微信小程序横空出世.而后,支付宝小程序.百度小程序.12大厂商联盟的快应用等纷纷入局,在短短两年的时间里, ...

  2. 制作电影影评网的html5代码,微信小程序之电影影评小程序制作代码

    本文实例为大家分享了微信小程序制作影评小程序的具体代码,供大家参考,具体内容如下 这是博主的项目包含的文件截图: 首先如图建立文件夹和page页面 然后app.json页面更新代码如下: { &quo ...

  3. 菜鸡教程(1):简易游戏每周推荐小程序制作

    写在前面:   1. 阅读本文最好具备一定html+css+js基础,并已成功注册微信小程序,成功下载了开发工具   2.菜鸡菜笔,如有不正,还请大佬们不吝惜赐教 接下来开始小程序的制作   1.首先 ...

  4. 前端外行的微信小程序瞎折腾之旅

    迁移一批老文章到掘金 前言 惭愧,最近下班回家沉迷山口山了,前一阵子搞antlr语法转换,这一阵子搞微信小程序,一直拖着没写点啥,一步一步来吧,肯定都得总结点东西留给自己看的. 新技术尝鲜 我一直是一 ...

  5. 微信小程序制作和设计入门

    简介以及我的制作过程 我开始的第一版小程序主要还是看了一本书,在书上找自己想要的内容写的第一版的微信小程序,这里推荐一下,叫<微信小程序开发零基础入门>,周文洁编著的.一本白色主导,绿色文 ...

  6. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

  7. 有三AI小程序上线,把你的代码show给世界

    文/编辑 | 言有三 五一期间不发技术文影响大家休假,不过经过有三这几天的折腾,今天有三AI小程序上线了,虽然是很粗糙的一个版本,但是哆哆嗦嗦,勉勉强强地也能用了,给大家介绍一下,体验码如上. 为什么 ...

  8. 代金券制作小程序秒代金券_微信小程序制作工具与方法

    小程序日益火爆,激发了大量商户新的开发需求,租房,购物,出行等场景,都不难见到它的踪影,这也让没有入局小程序的企业开始着急,真分夺秒的着手布局小程序,俗话说,磨刀不误砍柴工,在布局之前,小程序制作流程 ...

  9. 小程序制作预算_小程序商城制作多少钱

    现在有做微信小程序商城需求的企业越来越多,在选择小程序制作公司的时候,很多公司上来就报价几万,导致价格太贵让用户望而却步,其实微信小程序制作的价格是不同的,并且不同的制作公司报价也不一样,那么做一个微 ...

最新文章

  1. 递归/回溯:Combination Sum II数组之和
  2. 试求由a,b,c三个字母组成的n位符号串中不出现aa图像的符号串的数目
  3. 蓝桥杯练习系统习题-历年真题解析1(完整版)
  4. OpenCV使用不同的决策树decision trees的实例(附完整代码)
  5. LINUX下配置bashrc文件/ PATH环境变量修改/别名/提示符
  6. Linux线程(四)
  7. [Leetcode][第141、142题][JAVA][环形链表][哈希表][快慢指针][数学推理]
  8. linux成为管理员_为什么要成为系统管理员
  9. antd权限管理_推荐6款超好看实用的管理后台模版
  10. 成绩排序--清华机试真题;使用运算符重载
  11. mac好用的图片转文字,ocr文字识别工具:Text Scanner
  12. linux的tar命令压缩26g文件,如何使用Linux上的tar命令压缩和解压缩文件 | MOS86
  13. pandas-如何得到某一个值所在的行
  14. Visual Studio Code compile error - launch.json must be configured...
  15. AutoCAD(英文版)中所有英语词汇的翻译
  16. 触摸屏下的MFC程序
  17. 阿里云CDN产品介绍
  18. Y05 - 024、数据的应用①:四则运算、运算优先级
  19. mysql sphinx windows_sphinx安装 Windows端
  20. C语言:运算符-符号常量-输入输出

热门文章

  1. JavaScript一键换肤
  2. IT各个层次角色与职责
  3. Wiremock的使用
  4. weblogic绿色版安装
  5. 用友OA漏洞学习——test.jsp SQL注入漏洞
  6. VC给to B创业者的十条建议 | 【常垒常识】
  7. 用Python制作翻译工具
  8. 《卡拉马佐夫兄弟》:道德权威
  9. <sub>和<sup>标签
  10. 深信服2020校招前端一面面经