程序员scholar 程序员scholar
首页
  • Web 三剑客

    • HTML
    • CSS
    • JavaScript
  • 现代 JavaScript

    • ES6
    • TypeScript
  • 前端工具库

    • jQuery
    • Ajax
    • Axios
  • Vue 生态

    • Vue2
    • Vue3
    • Vue3 + TS
    • Vuex
  • 小程序开发

    • 微信小程序
    • uni-app
  • 构建工具

    • Webpack
  • 服务端技术

    • Node.js
  • 实时通信

    • WebSocket
    • 第三方登录
  • Element-UI
  • Apache ECharts
后端 (opens new window)
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Web 三剑客

    • HTML
    • CSS
    • JavaScript
  • 现代 JavaScript

    • ES6
    • TypeScript
  • 前端工具库

    • jQuery
    • Ajax
    • Axios
  • Vue 生态

    • Vue2
    • Vue3
    • Vue3 + TS
    • Vuex
  • 小程序开发

    • 微信小程序
    • uni-app
  • 构建工具

    • Webpack
  • 服务端技术

    • Node.js
  • 实时通信

    • WebSocket
    • 第三方登录
  • Element-UI
  • Apache ECharts
后端 (opens new window)
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 原生微信小程序

  • uniapp多端开发

    • 快速入门

    • 内置组件

      • 视图容器

        • 视图容器组件
          • 1. 什么是 view 组件?
            • 1.1 nvue 模式简介
          • 2. view 组件的常用属性
            • 2.1 hover-class
            • 2.2 hover-stop-propagation
            • 2.3 hover-start-time 和 hover-stay-time
          • 3. 布局案例:横向与纵向布局
          • 4. 跨平台兼容性
        • 局部滚动容器组件
        • 轮播图组件
        • 媒体查询组件
        • 可移动区域组件
        • 可移动视图组件
        • 覆盖视图组件
        • 覆盖图片组件
      • 基础内容

      • 表单组件

      • 路由页面跳转

      • 媒体组件

      • 地图

      • 画布

      • 网页嵌入

      • 页面属性配置节点

      • nvue组件

      • 小程序组件

    • 扩展组件

  • 小程序开发
  • uniapp多端开发
  • 内置组件
  • 视图容器
scholar
2024-10-21
目录

视图容器组件

# 视图容器组件

在 Uniapp 中,view 组件是布局和包裹页面内容的核心组件,类似于 HTML 中的 div 元素。view 组件本身不具有可视化效果,但可以通过包裹其他组件或元素,创建灵活的页面布局。它被广泛应用于页面的分区、模块化布局、内容包裹等场景。

在不同的开发模式和平台中,view 组件的表现可能略有不同,特别是在 nvue 模式 下,view 组件不能直接包裹文本,必须使用 text 组件处理文本内容。

# 1. 什么是 view 组件?

view 组件是 Uniapp 中最常用的容器组件,广泛用于页面布局和内容的包裹。其作用类似于 HTML 中的 div,可以用来组织页面中的元素、处理用户交互以及响应布局变化。

# 1.1 nvue 模式简介

在 Uniapp 中,nvue 是为 原生渲染 提供的开发模式。与 WebView 渲染不同,nvue 页面使用 原生视图(Native View)渲染,因此具有更好的性能,尤其在动画、复杂布局和大数据渲染场景中表现更加出色。

nvue 与 view 的区别:

  • 在 nvue 页面中,文本不能直接放在 view 组件中,必须通过 text 组件来显示文本内容。
  • 这种限制是为了优化渲染性能,确保原生层的高效渲染。相比之下,WebView 渲染模式允许 view 组件直接包裹文本。

# 2. view 组件的常用属性

view 组件提供了丰富的属性,用于控制交互行为、样式以及布局效果。以下是几个常用的属性:

属性名 类型 默认值 说明
hover-class String none 指定按下时的样式类。当 hover-class="none" 时,按下时没有点击态效果。
hover-stop-propagation Boolean false 是否阻止本节点的祖先节点出现点击态。此属性在 App、H5、支付宝小程序、百度小程序上不支持(实测不支持)。
hover-start-time Number 50 按住后多少时间(单位:毫秒)后显示点击态效果。
hover-stay-time Number 400 手指松开后,点击态效果保留的时间(单位:毫秒)。

这些属性使开发者能够控制页面元素的交互效果,特别适用于需要用户点击反馈的场景。

# 2.1 hover-class

  • 说明:当用户按下(点击) view 组件时,应用的样式类。通过该属性,可以为按下时的组件添加点击效果。
  • 类型:String
  • 默认值:none
<template>
  <view class="container" hover-class="hover-style">
    点击或按下会改变样式
  </view>
</template>

<style scoped>
.container {
  width: 200px;
  height: 50px;
  background-color: #007aff;
  color: white;
  text-align: center;
  line-height: 50px;
  border-radius: 8px;
}

.hover-style {
  background-color: #0051aa;
  color: #ffffff;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

在上述代码中,按下时会应用 hover-style 类,改变背景颜色。

recording

# 2.2 hover-stop-propagation

  • 说明:是否阻止 view 组件的祖先节点出现点击态。该属性适用于需要精细控制点击效果的场景。
  • 类型:Boolean
  • 默认值:false
<template>
  <view class="parent" hover-class="parent-hover" hover-stop-propagation="true">
    父容器
    <view class="child" hover-class="child-hover">子容器</view>
  </view>
</template>

<style scoped>
.parent {
  padding: 20px;
  background-color: lightgray;
}

.child {
  padding: 10px;
  background-color: white;
}

.parent-hover {
  background-color: gray;
}

.child-hover {
  background-color: lightblue;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

在这个示例中,点击子容器时,父容器不会出现点击效果,因为 hover-stop-propagation 设置为 true。

recording

# 2.3 hover-start-time 和 hover-stay-time

  • 说明:
    • hover-start-time:按住后多少毫秒显示点击态效果。
    • hover-stay-time:手指松开后,点击态效果保留的时间(单位:毫秒)。
  • 类型:Number
  • 默认值:
    • hover-start-time:50
    • hover-stay-time:400
<template>
  <view class="container" hover-class="hover-style" :hover-start-time="100" :hover-stay-time="500">
    延迟点击效果
  </view>
</template>

<style scoped>
.container {
  width: 200px;
  height: 50px;
  background-color: #007aff;
  color: white;
  text-align: center;
  line-height: 50px;
  border-radius: 8px;
}

.hover-style {
  background-color: #0051aa;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

此代码展示了如何延迟显示点击态,并保持 500 毫秒后消失。

recording

# 3. 布局案例:横向与纵向布局

使用 view 组件结合 flex 布局,可以实现多种页面布局。以下案例演示了横向(水平)和纵向(垂直)的布局。

































 




 




























<template>
  <view>
    <!-- 横向布局 -->
    <view class="layout-title">横向布局 (row)</view>
    <view class="flex-row">
      <view class="flex-item item-red">A</view>
      <view class="flex-item item-green">B</view>
      <view class="flex-item item-blue">C</view>
    </view>

    <!-- 纵向布局 -->
    <view class="layout-title">纵向布局 (column)</view>
    <view class="flex-column">
      <view class="flex-item item-red">A</view>
      <view class="flex-item item-green">B</view>
      <view class="flex-item item-blue">C</view>
    </view>
  </view>
</template>

<style scoped>
/* 布局标题样式 */
.layout-title {
  font-size: 16px;
  font-weight: bold;
  margin-bottom: 10px;
  color: #333;
}

/* Flex 容器 */
.flex-row {
  display: flex;
  flex-direction: row; /* 横向排列 */
}

.flex-column {
  display: flex;
  flex-direction: column; /* 纵向排列 */
}

/* 子项通用样式 */
.flex-item {
  flex: 1;
  padding: 10px;
  text-align: center;
  border: 1px solid #ddd;
  margin: 5px;
}

/* 不同颜色的子项 */
.item-red {
  background-color: red;
  color: white;
}

.item-green {
  background-color: green;
  color: white;
}

.item-blue {
  background-color: blue;
  color: white;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
  • 横向布局:使用 flex-direction: row,让子项沿水平方向排列。
  • 纵向布局:使用 flex-direction: column,让子项沿垂直方向排列。

image-20241021003412530

# 4. 跨平台兼容性

  • 在微信小程序、支付宝小程序等平台中,view 组件与 HTML 中的 div 类似。某些平台会自动将 <div> 转换为 <view>,确保兼容性。
  • 在不同平台(如 H5 和 App)中,view 组件表现一致,确保多端项目的应用体验。

性能优化

  • 在 App 平台,若页面中存在大量的视图节点,可能会影响渲染性能。在这种情况下,考虑使用 <div> 替代 <view>。
  • 在渲染复杂布局时,合理使用 flex 布局和 view 组件可以提高渲染效率,保证流畅的用户体验。

总结

  • view 是 uni-app 中最基础、最常用的页面容器,用来构建布局、包裹内容、处理交互等。
  • 在 nvue 模式 下,需注意文本必须由 text 组件承载,而不能直接写在 view 中。
  • hover-class、hover-stop-propagation、hover-start-time 和 hover-stay-time 等属性,让你能针对用户点击行为进行细腻的交互设计。
  • 结合 CSS flex 布局,可以轻松实现多样化的横纵向排版。
  • 合理地使用和组织 view 组件,对于性能和可维护性都有重要影响,是 uni-app 项目开发中不可或缺的基础知识。
编辑此页 (opens new window)
图片的上传
局部滚动容器组件

← 图片的上传 局部滚动容器组件→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式