移动端页面布局

移动端提供页面布局组件和细节布局组件

页面布局

移动端提供页面布局组件:布局、导航栏、标签栏、折叠面板、步骤条、标签页,单元格组、粘性布局。界面效果如下面几张图所示

  • 布局,将页面分为上、中、下三个部分,其中“上”粘贴在页面顶部,“下”粘贴在页面底部

1720495108597

  • 导航栏,顶部导航栏,粘贴在页面顶部

1720495854248

  • 标签栏,底部导航栏,粘贴在页面底部

1720514909953

  • 折叠面板

1720496038837

  • 步骤条

  • 标签页

  • 单元格组

1730855630660

  • 粘性布局

1730861064761

导航栏

页面顶部标题栏,系统提供默认导航栏和自定义导航栏。默认导航栏只有页面标题和返回按钮(左图),自定义导航栏支持在左右两侧增加按钮(右图),如下图所示

1720513521245 1720513499613

特别说明

  • 移动端门户单独运行时,需要显示顶部导航栏,在 URL 中添加 standalone=true 表示独立运行
  • 移动端门户在第三方 APP 中打开,且第三方 APP 提供导航栏时,不需要显示顶部导航栏,否则会显示为双层导航栏的效果。URL 中没有 standalone 参数或 standalone=false 时表示嵌入运行
  • 默认导航栏感知 standalone 参数,参数为 true 时显示,否则不显示
  • 导航栏组件不感知 standalone 参数,需要开发者自行处理

默认导航栏

导航栏支持全局配置和页面配置。在全局配置中,设置全局导航栏样式,如下图所示

  • 导航栏样式:“默认”表示使用默认导航栏,页面默认会显示一个导航栏;“自定义”表示页面不显示导航栏
  • 导航栏标题背景色:选择一个颜色
  • 导航栏标题文字:无需设置,默认使用页面标题
  • 导航栏标题文字颜色:只有黑和白两种颜色

1720513152563

在页面组件上设置单个页面的导航栏样式,如下图所示

1720513201797

设置“全局配置”或“页面组件”中的“导航栏样式”为自定义,页面不显示默认导航栏。

自定义导航栏

在页面上添加导航栏组件,支持定制标题、定制左侧和右侧,在右侧添加两个图标,设计界面如下图所示

1720514430476

运行效果如下图所示

1720495854248

标签栏

页面底部导航栏,企业门户移动端提供底部导航栏,如下图所示,配置方式参考《移动端门户导航栏配置

1720515266937

标签栏组件,显示多项,有一项是当前选中的(颜色不同),运行效果如下图所示

1720514909953

标签栏组件支持添加项,设置默认激活项,设计界面如下图所示,默认激活颜色是主题色

1720514807715

标签栏组件的“项”支持设置图标、文本、名称等,设计界面如下图所示

1720514866183

标签栏的“项”支持显示图片,图片需要设置激活图片和非激活图片,设计界面如下图所示

1720515733653

折叠面板

将一组内容放置在多个折叠面板中,点击面板的标题可以展开或收缩其内容,运行效果如下图所示

1720496038837

标签页、步骤条

标签页:选项卡组件,用于在不同的内容区域之间进行切换 步骤条:用于展示操作流程的各个环节,让用户了解当前的操作在整体流程中的位置

具体介绍参考《移动端列表类组件》中的标签页和步骤条

单元格组

单元格组提供分组标题、为其中的单元格提供上下外边框、支持显示为卡片风格,运行效果如下图所示

1730855630660

设计界面如下图所示

1730855798708

粘性布局

粘性布局组件与 CSS 中 position: sticky 属性实现的效果一致,当组件在屏幕范围内时,会按照正常的布局排列,当组件滚出屏幕范围时,始终会固定在屏幕顶部。vant 支持固定在屏幕底部。运行效果如下图所示

1730861064761

设计界面如下图所示

1730860308225

挂载节点(指定容器)属性支持指定组件所在的容器,页面滚动时,组件会始终保持在容器范围内,当组件即将超出容器底部时,会固定在容器的底部

react 实现

通过“指定容器”函数指定组件的容器,设计界面如下图所示

1730860360848

本例粘性布局组件放在视图组件中,w 代码如下

    <vantui:View id="stick-in-view" style="height:275px;background-color:#fcf8bd;">
        <vantui:Sticky container="{$page.sticky0ContainerFn()}" id="sticky0">
            <vantui:Button id="button1" text="指定容器">
            </vantui:Button>
        </vantui:Sticky>
    </vantui:View>

指定容器的 js 代码如下,其中 stick-in-view 是粘性布局组件所在容器(本例为视图)的 id

import { createSelectorQuery } from '@tarojs/taro';
sticky0ContainerFn = () => {
    return createSelectorQuery().select(`#stick-in-view`);
}

vue 实现

通过“挂载节点”函数指定组件的容器,设计界面如下图所示

1732697150667

本例粘性布局组件放在 div 中,div 使用 ref 属性将 js 文件中声明的 ref 对象与 DOM 元素关联起来,w 代码如下

    <div id="container0" ref="{container0}" style="height:294px;background-color:#fcf8bd;">
        <vant:Sticky container="{sticky1ContainerFn()}" id="sticky1">
            <vant:Button id="button1" text="指定容器">
            </vant:Button>
        </vant:Sticky>
    </div>

使用 ref() 方法声明一个 ref 对象,在挂载节点中返回 ref 对象,js 代码如下

import { reactive, ref, watch } from "vue";
import { usePage, useData } from "vue_addon/core";
let $page = usePage();
let container0 = ref();

let sticky1ContainerFn = () => {
    return container0;
}

上中下布局

上中下布局组件,将页面分为上、中、下三个部分,其中“上”粘贴在页面顶部,“下”粘贴在页面底部

1720495108597

特别说明

  • 实现定头定底,不需要使用布局组件,在组件上设置粘性布局 sticky 即可实现定头定底
  • 使用布局组件实现定头定底,需要设置页面组件的自动充满为 true

间距

间距组件用于设置元素之间的水平间距或垂直间距,运行效果如下图所示

1731396094019

组件属性说明如下

  • 间距方向:垂直还是水平
  • 间距大小:单位 px
  • 对齐方式:支持开头、居中、结尾、基线
  • 自动换行:采用水平间距时,内部元素是否换行
  • 填充父元素:是否让间距组件成为一个块级元素,填充整个父元素

1731396164052

细节布局

移动端提供细节布局组件:单元格、滑动单元格、商品卡片、提交栏、动作栏(商品导航)、行列,界面效果如下面几张图所示

  • 单元格

1720496087926

  • 滑动单元格

1730856060457

  • 商品卡片

1720496196706

  • 提交栏

1720496251615

  • 动作栏(商品导航)

1720517616381

  • 行列

1720518672617

单元格

单元格组中可以包括多个单元格,单元格也可以单独使用,单元格用于展示左标签右内容的形式,运行效果如下图所示

1720496087926

单元格组件支持配置和定制,设计界面如下图所示,简单情况使用配置和样式,复杂情况使用定制

1720519194326

本例单元格组和单元格样式定义如下

react 代码

:global{
    .van-cell-group{
        background-color: transparent;
    }
    .van-cell-group .van-cell{
        margin-bottom: 0.744rem;
        padding: 0.744rem;
    }
    .van-cell-group .van-cell>.van-cell__left-icon{
        font-size: 1.2rem;
        color: var(--primary-color);
    }
    .van-cell-group .van-cell>.van-cell__title{
        font-size: 0.7rem;
        padding-left: 0.4rem;
    }
    .van-cell-group .van-cell>.van-cell__value{
        color: #999;
        font-size: 0.6rem;
    }
}

vue 代码

:deep{
    .van-cell-group{
        background-color: transparent;
    }
    .van-cell-group > .van-cell{
        margin-bottom: 0.744rem;
    }
    .van-cell-group > .van-cell .van-field__left-icon .van-icon{
        font-size: 1.2rem;
        color: var(--van-primary-color);
    }
    .van-cell-group > .van-cell>.van-cell__title{
        font-size: 0.7rem;
        padding-left: 0.4rem;
    }
    .van-cell-group  .van-cell>.van-cell__value{
        color:#999;
        font-size: 0.6rem;
        text-align: right;
    }
}

单元格组件提供点击事件,在事件中判断是否点击了箭头,代码如下

event.target.className.indexOf("van-icon-arrow") >= 0

在事件中使用“操作组合”,在“是否执行”中使用上面的代码判断是否点击了箭头,设计界面如下图所示

1735094653829

滑动单元格

滑动单元格组件是可以左右滑动来展示操作按钮的单元格组件,运行效果如下图所示

1730856060457

提供左侧和右侧两个插槽,用于定义两侧滑动区域的内容,支持设置宽度。滑动单元格可以嵌套任意内容,比如嵌套一个商品卡片

1730856579454

vantui 异步关闭

设置“异步关闭”属性为是,在“关闭事件”中,调用 e.detail.instance?.close(); 方法关闭

1730859414408

在关闭事件中

  • e.detail.position 为关闭时点击的位置,left 表示点击了左侧插槽,right 表示点击了右侧插槽
  • e.detail.name 为名称属性绑定的值
  • e.detail.instance 表示滑动单元格实例

左侧插槽放置删除按钮,删除数据实现异步关闭,代码如下

    onSwipeCell0Close = ({ e }) => {
        if (e.detail.position == "left") {
            this.comp("productData").deleteData().then(() => {
                e.detail.instance?.close();
            }, () => {

            })
        }else{
            e.detail.instance?.close();
        }
    }

vant 异步关闭

在“关闭前回调”方法中返回 promise,执行 resolve(true) 关闭,执行 resolve(false) 不关闭

position 为关闭时点击的位置,left 表示点击了左侧插槽,right 表示点击了右侧插槽,cell 表示点击了内部区域,outside 表示点击外部区域

商品卡片

商品卡片组件用于展示图片及其它信息,运行效果如下图所示

1720496196706

商品卡片组件支持配置和定制,设计界面如下图所示,简单情况使用配置和样式,复杂情况使用定制

1720516545002

vue 商品卡片组件的价格只支持文本,可以使用“数值转字符串”方法将数值转换为字符串,如下图所示

1729852409425

提交栏

提交栏组件用于展示一个数字和一个按钮,运行效果如下图所示

1720496251615

上图的设计界面如下图所示

  • 左侧:多选框是拖拽到提交栏组件中的组件
  • 右侧:是通过提交栏组件的属性配置出来的
  • 价格:提交栏组件会将价格除以100,所以使用时需要乘以100

1720516954755

提交栏组件在页面上默认不占高度,设置“生成占位元素”为是,才能在页面上有高度

1734342387027

动作栏(vant)商品导航(vantui)

商品导航组件用于展示两个一边是半圆形的按钮,运行效果如下图所示

1720517616381

动作栏组件支持添加导航按钮(上图中的红色按钮)和导航图标(上图中带图标的按钮),设计界面如下图所示

1720518131115

动作栏组件在页面上默认不占高度,设置“生成等高占位元素”为是,才能在页面上有高度

1734342055853

行列

行列组件是用弹性盒子实现的,用于在一行显示多个内容的组件,支持垂直居中,固定宽度,运行效果如下图所示

1720518672617

上图的设计界面如下图所示

  • 固定:“是”表示列宽由内容宽度决定,未定义列宽的列平分剩余宽度
  • 垂直对齐方式:“中”表示垂直居中

1720518542088

布局类组件

布局类组件提供很多属性用于界面展现和用户交互,鉴于官网介绍的比较详细,本文不再赘述。

组件 用途 Vantui 官网 Vant 官网
导航栏 页面顶部标题栏 导航栏 导航栏
标签栏 页面底部导航栏 标签栏 标签栏
折叠面板 将一组内容放置在多个折叠面板中,点击面板的标题可以展开或收缩其内容 折叠面板 折叠面板
步骤条 用于展示操作流程的各个环节,让用户了解当前的操作在整体流程中的位置 步骤条 步骤条
标签页 选项卡组件,用于在不同的内容区域之间进行切换 标签页 标签页
单元格组 单元格组提供分组标题、为其中的单元格提供上下外边框、支持显示为卡片风格 单元格 单元格
粘性布局 用于实现吸附顶部和吸附底部 粘性布局 粘性布局
单元格 单元格为列表中的单个展示项 单元格 单元格
滑动单元格 可以左右滑动来展示操作按钮的单元格组件 滑动单元格 滑动单元格
商品卡片 用于展示商品的图片、价格等信息 商品卡片 商品卡片
提交栏 用于展示订单金额与提交订单 提交订单栏 提交订单栏
动作栏(商品导航) 用于为页面相关操作提供便捷交互 商品导航 动作栏
间距 设置元素之间的间距 间距

案例位置

移动-页面-页面布局-*.w

results matching ""

    No results matching ""