Administrator
Published on 2025-01-04 / 16 Visits
0
0

微信小程序开发

基本使用

相关文档

微信开发者官方地址:

https://mp.weixin.qq.com/

小程序注册:

小程序注册使用邮箱作为注册,一个微信号可对应多个小程序。

https://mp.weixin.qq.com/wxopen/waregister?action=step1

小程序文档地址:

https://developers.weixin.qq.com/miniprogram/dev/framework/

基本项目结构文件说明:

https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart/code.html#JSON-%E9%85%8D%E7%BD%AE

组件(标签):

https://developers.weixin.qq.com/miniprogram/dev/component/

开发工具下载:

https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

使用

注册小程序后,在开发与服务-开发管理中,可以看到AppID,这是小程序唯一的ID,很多地方会用到。

安装开发工具后,打开工具可以看到:

注意,尽量不使用游客模式,不然会发现AppID无法修改,固定为touristappid。

扫描登录后,可以看到对应微信下面的小程序,并选择对应的AppID,demo使用JS基本版即可。

创建完成后,可以看到基本的项目目录,参考上面的微信的基本项目结构文件说明链接:

基本认知

  • 小程序使用的标签是自己的,与HTML标签无关,开发中不使用HTML标签。样式设计与CSS基本一致。控制使用JS,这与传统的网页开发一致。

  • 小程序增加的新的尺寸单位rpx(responsive pixel 响应式像素),可以根据屏幕宽度进行自适应,基本开发中都使用该单位表示组件的高宽和其他相关尺寸大小。

  • 小程序为了方便一些功能开发,自带了一些封装好的方法(微信文档中称为做API),比如网络请求,录音等,可以在官网文档中查询。

  • 小程序的设计采取了双线程模型, AppService(处理业务逻辑) 和 WebView (处理显示渲染),此外,在 WebView 渲染之外新增了一个渲染引擎 Skyline。在我们查看组件的时候,会发现微信说明文档中会说明该组件是否支持Skyline / WebView。

  • 小程序原生支持对直播推拉流的处理,使用live-pusher和live-player可以进行rtmp等流的处理。

  • 小程序支持生成原生应用android / ios。

  • 在高级用法中,我们可以实现自定义组件,开发插件,与硬件通信,3D(xr-frame)等功能。

语法

说明

微信小程序的语句,基本由WXML,WXSS,WXS,JS构成。

  • WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构。页面的结构使用wxml来编写,其对应的是传统网页开发的html。语法类似,但是在标签的功能上不相同,传统网页的html标签在wxml中也是不支持的,wxml有自己的一些功能标签(组件),详细见官方文档。

  • WXSS (WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式。WXSS 用来决定 WXML 的组件应该怎么显示。WXSS 具有 传统网页开发的CSS 大部分特性。WXSS 对 CSS 进行了扩充以及修改,增加了尺寸单位,样式导入等,详细见官方文档。

  • WXS(WeiXin Script)是内联在 WXML 中的脚本段。通过 WXS 可以在模版中内联少量处理脚本,丰富模板的数据预处理能力。另外, WXS 还可以用来编写简单的 WXS 事件响应函数。从语法上看, WXS 类似于有少量限制的 JavaScript 。

WXML和HTML标签对应关系参考:

HTML

WXML

<div></div>

<h1></h1>...<h6></h6>

<p></p>

<span></span>

<view></view>

<img src="" />

<image src="" />

<iput type="text">

<iput type="checkbox">

<iput type="radio">

<input />

<checkbox />

<radio />

组件

view

视图容器,可存放任意组件,view 容器内的多个组件的显示顺序遵循文档流,即从上到下进行布局,是否换行,需要看其子组件属于什么元素,如text组件则不会自动换行,button组件会自动换行。

view跟传统div标签一样,可以设置为Flex布局。

经验

  • 在小程序中,本地图片名称不要用中文,在小程序中正常,但是生成原生应用(安卓),就不会正常显示。

  • 在使用wx:for时flex布局不生效,设置方向无用,将wx:for写在内层即可。
    参考:https://blog.csdn.net/qwe122343/article/details/117435582

HTML基本语法

元素类型

任意一个组件,会被设计属于什么类型的元素,决定其功能和定位:

块级元素的特点包括:

  • 占据整行空间,即宽度会自动扩展以填满其父容器。

  • 在垂直方向上,一个块级元素会紧跟在前一个块级元素下面。

  • 可以设置宽度、高度、内边距(padding)、外边距(margin)等属性。

  • 可以包含其他块级元素或内联元素(inline elements)。

内联块级元素(Inline-Block Elements):

  • 内联块级元素兼具内联元素和块级元素的特点,它们可以设置宽度和高度,同时也可以与其他元素在同一行显示。

  • 在CSS中,可以通过设置 display: inline-block; 来将元素设置为内联块级元素。

  • 微信小程序中的某些组件可能具有内联块级的行为,具体取决于它们的默认样式和布局属性。

表格元素(Table Elements):

  • 表格元素用于创建表格结构,包括 <table>, <tr>, <td> 等。

  • 在微信小程序中,可以使用 wx:for 控制属性结合 view 组件来模拟表格布局。

替换元素(Replaced Elements):

  • 替换元素通常是指那些内容不受CSS样式影响的元素,例如 <img> 元素。

  • 在微信小程序中,可以使用 image 组件来显示图片,它就是一种替换元素。

格式化元素(Formatting Elements):

  • 格式化元素用于对文本进行格式化,例如 <b>, <i>, <strong>, <em> 等。

  • 在微信小程序中,可以使用 text 组件的 selectable, space, decode 等属性来实现文本格式化。

匿名行内盒子(Anonymous Inline Boxes):

  • 这是一种特殊的行内元素,它不与特定的HTML元素关联,通常是由文本内容直接生成的

改变定位

另外,可以通过一些配置改变元素的本身或其子组件的定位方式:

定位(Positioning):如果使用了绝对定位(position: absolute;)或固定定位(position: fixed;),则组件的显示顺序可能会受到 z-index 属性的影响。具有更高 z-index 值的组件会显示在具有更低 z-index 值的组件之上。

以下是一些影响组件排序显示的因素:

源代码顺序:在没有使用定位覆盖的情况下,组件的显示顺序通常与它们在 WXML 中的定义顺序一致。

CSS 属性:CSS 中的 display、float、flex、grid 等属性可以改变组件的布局和显示顺序。

Flexbox 布局:如果 view 容器使用了 Flexbox 布局(通过设置 display: flex;),则子组件的排序可以由 order 属性控制。order 值越小的组件越排在前面。

z-index:当使用定位属性时,z-index 可以用来控制组件的堆叠顺序。z-index 值越大,组件越在顶层。

定位方式

  • 静态定位(Static Positioning):

功能:静态定位是默认的定位方式,不使用任何定位属性(如 position: static;),元素按照正常文档流进行布局。

特点:静态定位的元素不会受到 top、right、bottom、left 和 z-index 属性的影响。

  • 相对定位(Relative Positioning):

功能:相对定位元素相对于其正常位置进行移动(使用 position: relative;)。

特点:元素仍然占据在文档流中的原始空间,可以通过 top、right、bottom、left 属性来设置偏移量。

如果绝对定位的元素的所有祖先元素都没有设置定位(即它们的 position 属性都不是 relative, absolute, fixed, 或 sticky),那么这个绝对定位的元素会相对于初始包含块(initial containing block)进行定位。

初始包含块通常等同于视口(viewport),即浏览器窗口或者 <html> 元素(在规范中,初始包含块被定义为视口,但在实际浏览器实现中,它通常是 <html> 元素)。因此,如果没有已定位的祖先元素,绝对定位的元素会相对于浏览器窗口进行定位,就像固定定位(fixed)的元素一样,但是它不会随着页面的滚动而移动。

  • 绝对定位(Absolute Positioning):

功能:绝对定位元素相对于最近的已定位祖先元素进行定位(使用 position: absolute;)。

特点:元素脱离正常文档流,不占据空间,可以通过 top、right、bottom、left 属性来定位,如果没有已定位的祖先元素,则相对于 <html> 元素定位。

  • 固定定位(Fixed Positioning):

功能:固定定位元素相对于浏览器窗口进行定位(使用 position: fixed;)。

特点:即使页面滚动,元素也会保持在相同的位置,同样是通过 top、right、bottom、left 属性来定位。

  • 粘性定位(Sticky Positioning):

功能:粘性定位是相对定位和固定定位的混合体(使用 position: sticky;)。

特点:元素在滚动到特定位置之前表现为相对定位,达到特定位置后则表现为固定定位。

文档流

文档流(Document Flow)是指HTML页面中元素按照其在文档中的位置顺序自然排列的一种布局方式。它是网页布局的基础,决定了元素在页面上的默认位置和显示顺序。以下是关于文档流的一些关键点:

块级元素(Block-level Elements):

块级元素会占据其父元素的全部宽度,并且通常会在垂直方向上一个接一个地排列。

常见的块级元素包括 <div>、<h1> 到 <h6>、<p>、<form> 等。

内联元素(Inline Elements):

内联元素只占据必要的宽度,并且会在水平方向上一个接一个地排列,直到行宽不足以容纳下一个元素,此时它会换行。

常见的内联元素包括 <span>、<a>、<img>、<input> 等。

正常文档流的特点:

元素按照它们在HTML文档中的顺序显示。

块级元素从上到下依次排列,内联元素从左到右排列。

元素的高度和宽度通常由其内容决定,除非显式地设置了宽度和高度。

元素之间的垂直间距通常由元素的 margin、padding 和 border 决定。

脱离文档流:

当使用绝对定位(position: absolute;)或固定定位(position: fixed;)时,元素会脱离正常文档流,这意味着它们不再占据文档流中的空间,也不会影响其他元素的布局。

使用浮动(float)属性也可以使元素脱离文档流的垂直排列,但它们仍然会影响文档流的水平布局。

理解文档流对于进行有效的网页布局和定位非常重要,因为它决定了元素如何在没有额外样式干预的情况下在页面上排列。

居中问题

  • 水平居中

内联元素(Inline Elements):

使用 text-align: center; 在父元素上可以使得所有内联元素水平居中,需要注意的是对定位的元素是无效的。

块级元素(Block-level Elements):

设置元素的 margin: 0 auto; 可以使其水平居中,但这要求元素有固定的宽度。

Flexbox:

在父元素上设置 display: flex; 和 justify-content: center; 可以轻松实现子元素的水平居中。

Grid:

在父元素上设置 display: grid; 和 place-items: center; 或 justify-content: center; 可以实现子元素的水平居中。

  • 垂直居中

单行内联元素:

设置父元素的 line-height 等于其 height 可以使内联元素垂直居中。

Flexbox:

在父元素上设置 display: flex; 和 align-items: center; 可以实现子元素的垂直居中。

Grid:

在父元素上设置 display: grid; 和 place-items: center; 可以实现子元素的垂直居中。

绝对定位与负边距:

对于已知高度的元素,可以使用绝对定位,并将 top 和 bottom 设置为 0,然后通过 margin: auto; 来垂直居中。

绝对定位与transform:

使用绝对定位将元素的 top 设置为 50%,然后使用 transform: translateY(-50%); 来垂直居中。

  • 水平垂直同时居中

Flexbox:

在父元素上设置 display: flex;,然后使用 justify-content: center; 和 align-items: center; 可以同时实现水平和垂直居中。

Grid:

在父元素上设置 display: grid;,然后使用 place-items: center; 可以同时实现水平和垂直居中。

绝对定位与transform:

使用绝对定位将元素的 top 和 left 都设置为 50%,然后使用 transform: translate(-50%, -50%); 来同时实现水平和垂直居中。

Flexbox布局

说明

  1. 父容器使用Flexbox布局后,其子组件的行为会与传统的文档流(normal flow)有所不同,组件将按照Flexbox 的规则进行布局,而不是按照标准文档流。

  2. 在Flex中,组件分为两个概念:

  • Flex Container(弹性容器):

使用 display: flex; 或 display: inline-flex; 属性声明的元素。

  • 子元素称为 Flex Items(弹性项目)。

Flex Items(弹性项目):

弹性容器的直接子元素自动成为弹性项目。

  1. 在Flex中,子组件的排列布局方式将按照父容器设定的主轴(与之对应的是交叉轴)方向进行排序,主轴方向可以配置,详见下面的语法。另外,当Flex布局中子组件过多换行后,相当于存在多个主轴(也对应存在多个交叉轴),每个主轴都可以独立地根据 justify-content 属性来对齐其上的子组件,而不同的行(即不同的主轴)之间则可以通过 align-content 属性来设置它们在交叉轴上的对齐方式。

语法

参考

https://blog.csdn.net/Oxford1151/article/details/141531279

flex

设置容器为Flex布局,主轴方式默认为row,即从左到右。

<view style="display: flex;"></view>
flex-direction

设置主轴的方向,决定组件的排列方式,有四种取值:

  • row(默认值):主轴为水平方向,起点在左端(项目从左往右排列)。

  • row-reverse:主轴为水平方向,起点在右端(项目从右往左排列)。

  • column:主轴为垂直方向,起点在上沿(项目从上往下排列)。

  • column-reverse:主轴为垂直方向,起点在下沿(项目从下往上排列)。

<view style="display: flex;flex-direction: column;"></view>
flex-wrap

默认情况下,项目都排在一主轴线上,如果父容器的宽度或高度不够,子组件是不会自动换行的,会强制撑开。

利用flex-wrap属性,我们可以配置父容器空间不够的情况下,子组件的换行效果,有三种取值:

  • nowrap(默认):不换行。

  • wrap:主轴为横向时:从上到下换行。主轴为纵向时:从左到右换列。

  • wrap-reverse:主轴为横向时:从下到上换行。主轴为纵向时:从右到左换列。

<view style="display: flex;flex-wrap: wrap;"></view>
flex-flow

flex-direction和flex-wrap的结合。

<view style="display: flex;flex-flow: <flex-direction> <flex-wrap>;"></view>
justify-content

定义了项目在主轴上的对齐方式(主轴对应的方向需要有确定长度才有效),如果存在多个主轴,对多个主轴都有效,有五种取值:

  • flex-start(默认):与主轴的起点对齐。

  • flex-end:与主轴的终点对齐。

  • center:与主轴的中点对齐。

  • space-between:两端对齐主轴的起点与终点,项目之间的间隔都相等。

  • space-around:每个项目两侧的间隔相等。

<view style="display: flex;justify-content: flex-start;"></view>
align-items

定义了项目在交叉轴上的对齐方式(纵向交叉轴始终自上而下,横向交叉轴始终自左而右)(交叉轴对应的方向需要有确定长度才有效),如果存在多个交叉轴,对多个交叉轴都有效,有五种取值:

  • flex-start:交叉轴的起点(交叉轴方向上)对齐。

  • flex-end:交叉轴的终点对齐。

  • center:交叉轴的中点对齐。

  • baseline: 项目的第一行文字的基线对齐。

  • stretch(默认值):如果项目未设置高度或设为auto,项目将占满整个容器的高度。

<view style="display: flex;align-items: flex-start;"></view>
align-content

align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。有六种取值:

  • flex-start:与交叉轴的起点对齐。

  • flex-end:与交叉轴的终点对齐。

  • center:与交叉轴的中点对齐。

  • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。

  • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。

  • stretch(默认值):主轴线占满整个交叉轴。

<view style="display: flex;align-content: flex-start;"></view>
flex-grow

flex-grow 是一个 CSS 属性,用于设置 Flexbox 布局中的 flex 容器(flex container)内 flex 项(flex item)的放大比例。当 flex 容器有可用空间时,flex-grow 属性决定了 flex 项如何相对于其他 flex 项增长以填充额外的空间。该属性也可用于让某个项填充从容器剩下的长度空间。

注意在如果内容长于容器宽度,容器宽度会被撑开,而不是保持比例。

//高度上1:2的高度
<view style="display: flex;height: 300rpx;flex-direction: column;">
  <view style="flex-grow: 1;background-color: aqua;"></view>
  <view style="flex-grow: 2;background-color: bisque;"></view>
</view>
//宽度上1:2的宽度
<view style="display: flex;">
  <view style="flex-grow: 1;height: 100rpx;background-color: aqua;"></view>
  <view style="flex-grow: 2;height: 100rpx;background-color: bisque;"></view>
</view>
//填充剩余空间
<view style="display: flex;">
  <view style="width: 100rpx; height: 100rpx;background-color: aqua;"></view>
  <view style="flex-grow: 1;height: 100rpx;background-color: bisque;"></view>
</view>
//支持flex-grow下再flex-grow
<view style="display: flex;">
  <view style="flex-grow: 2;height: 100rpx;background-color: aqua;display: flex;flex-direction: column;">
    <view style="flex-grow: 1;background-color: rgb(24, 187, 78);">
    </view>
    <view style="flex-grow: 3;background-color: rgb(107, 13, 126);">
    </view>
  </view>
  <view style="flex-grow: 1;height: 100rpx;background-color: bisque;"></view>
</view>


Comment