news 2026/10/28 19:02:42

微信小程序:scroll‑view组件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
微信小程序:scroll‑view组件

一.前言

scroll‑view是微信小程序内置滚动视图组件,可以实现纵向滚动、横向滚动,不需要使用页面原生滚动。本次完成案例 4.8 课程作业,实现纵向三页滚动、横向四页滚动,横向额外增加一页【阳光灿烂】;滚动时控制台输出日志;页面初始化纵向自动定位到第二页,横向初始偏移 50px。

注意:本案例使用\n换行符,需要在app.json配置"renderer":"webview"WebView 渲染引擎,Skyline 引擎不支持该换行语法。

二. scroll‑view 核心属性

纵向滚动相关

表格

属性作用
scroll‑y="true"开启纵向滚动,必须设置 scroll‑view 固定高度,否则滚动无效
scroll‑into‑view="id值"自动滚动到指定 id 的子元素,id 不能以数字开头
bindscrolltoupper滚动到达顶部触发事件
bindscrolltolower滚动到达底部触发事件
bindscroll滚动过程中持续触发

横向滚动相关

表格

属性作用
scroll‑x="true"开启横向滚动
scroll‑left="数值"横向滚动初始偏移距离,单位 px

横向滚动两个关键 CSS 要求:

  1. scroll‑view 父标签设置white‑space:nowrap;禁止换行;
  2. 直接子元素设置display:inline‑block;,元素才会横向排成一排。

CSS 伪元素 ::before

本案例使用::before伪元素实现页面文字,不需要额外嵌套 text 标签:

  • content:'文字'设置显示文本;
  • position:absolute; top:50%; left:50%; transform:translate(-50%,‑50%)实现文字完全居中。

三.完整源代码实现

1.app.json

{ "pages": [ "pages/index/index" ], "window": { "navigationBarTextStyle": "black", "navigationStyle": "custom" }, "style": "v2", "renderer": "webview" }

关键点:"renderer":"webview",兼容\n换行语法。

2.index.wxml

<!--index.wxml--> <navigation-bar title="scroll-view组件" back="{{false}}" color="black" background="#FFF"></navigation-bar> <scroll-view class="scrollarea" scroll-y type="list"> <view class="box"> <view class="title">滚动视图示例</view> <view class="page-section-title"> <text>Vertical Scroll\n纵向滚动</text> </view> <!--纵向滚动scroll‑y,初始定位page2 --> <scroll-view scroll-y="true" style="height: 300rpx;" class="sheet" scroll-into-view="page2" bindscrolltoupper="upper" bindscrolltolower="lower" bindscroll="scroll_y"> <view id="page1" class="scroll-view-item-y page1"></view> <view id="page2" class="scroll-view-item-y page2"></view> <view id="page3" class="scroll-view-item-y page3"></view> </scroll-view> <view class="page-section-title"> <text>Horizontal Scroll\n横向滚动</text> </view> <!--横向滚动scroll‑x,scroll‑left初始偏移50px;作业新增page4阳光灿烂 --> <scroll-view scroll-x="true" class="scroll-view-x sheet" scroll-left="50" bindscroll="scroll_x"> <view class="scroll-view-item-x page1"></view> <view class="scroll-view-item-x page2"></view> <view class="scroll-view-item-x page3"></view> <!--====作业新增:第四页阳光灿烂====--> <view class="scroll-view-item-x page4"></view> </scroll-view> </view> </scroll-view>

代码解析

  1. 纵向scroll‑into‑view="page2"页面加载完成自动滚动到 id 为page2的元素。
  2. 横向滚动增加第四页page4,完成作业拓展要求。
  3. bindscroll系列事件绑定滚动回调函数。

3.index.js

// index.js Page({ /** * 滚动到顶部/左边触发 */ upper(e) { console.log('to upper'); }, /** * 滚动到底部/右边触发 */ lower(e) { console.log('to lower'); }, /** * 纵向滚动过程持续触发 */ scroll_y(e) { console.log('vertical scrolling'); }, /** * 横向滚动过程持续触发 */ scroll_x(e) { console.log('Horizontal Scrolling'); } })

JS 说明:滚动时控制台打印对应日志,可以打开调试器 Console 面板观察输出信息。

4.index.wxss

/**index.wxss**/ page { height: 100vh; /* flex布局 */ display: flex; /* 按纵向排列 */ flex-direction: column; } .scrollarea { flex: 1; overflow-y: hidden; } .page-section-title { font-size: 40rpx; text-align: center; margin-top: 40rpx; margin-bottom: 20rpx; } .scroll-view-item-y { height: 300rpx; } .scroll-view-item-x { /* 创建了一个内联级块容器,横向滚动必须用inline‑block */ display: inline-block; width: 100%; height: 300rpx; } .sheet { font-size: 50rpx; /* 字符间距 */ letter-spacing: 1.2em; } .page1 { /* 相对定位 */ position: relative; background-color: #1AAD19; color: #FFFFFF; } .page1::before { content: '第一页'; /* 绝对定位 */ position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .page2 { position: relative; background-color: #2782D7; color: #FFFFFF; } .page2::before { content: '第二页'; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .page3 { position: relative; background-color: purple; color: #FFFFFF; } .page3::before { content: '第三页'; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } /* ==========【作业新增样式 page4 阳光灿烂】========== */ .page4 { position: relative; background-color: #d47e28; /*土黄色,匹配截图 */ color: #FFFFFF; } .page4::before { content: '阳光灿烂'; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .scroll-view-x { /* 横向滚动禁止自动换行 white‑space:nowrap */ white-space: nowrap; }

5.app.wxss

/**app.wxss**/ .box { /* 设置外边距 */ margin: 20rpx; /* 设置内边距 */ padding: 20rpx; /* 设置边框 */ border: 2rpx solid silver; } .title { /* 设置字体大小 */ font-size: 40rpx; /* 设置字体加粗 */ font-weight: bolder; /* 设置居中对齐 */ text-align: center; /* 设置下外边框 */ margin-bottom: 30rpx; /* 设置字体颜色 */ color: red; }

四.运行效果

  1. 页面打开,纵向滚动视图自动定位在第二页(蓝色);横向视图初始偏移 50px,可以看到第一页部分区域。
  2. 纵向滚动:上下滑动切换第一、二、三页;滚动到顶部控制台打印to upper,滚动到底部打印to lower,滚动过程打印vertical scrolling。
  3. 横向滚动:一共 4 页,最后一页土黄色页面,居中文字阳光灿烂;滚动时控制台打印Horizontal Scrolling。

五.开发踩坑记录

  1. ❌纵向滚动失效:scroll‑y="true"时,scroll‑view 必须写固定 height 高度,否则不会滚动。
  2. ❌横向滚动元素垂直堆叠,无法横向排列:忘记设置white‑space:nowrap,或者子元素没有写display:inline‑block。
  3. ❌scroll‑into‑view不生效:id 以数字开头,或者 id 前后有空格。
  4. ❌\n换行无效:app.json没有配置"renderer":"webview",Skyline 渲染引擎不支持\n换行。
  5. ❌伪元素文字无法居中:缺少transform: translate(-50%,‑50%),只有 top、left:50% 不能完成居中。

六.拓展思考题

  1. 如果希望横向滚动页面加载完成直接跳到第四页,需要设置哪个属性?

答案:给横向 scroll‑view 设置合适scroll‑left像素值。

  1. bindscrolltoupper什么时候触发?

答案:scroll‑view 滚动到达最顶部边界的时候触发。

博客结语 scroll‑view 组件用来实现局部区域滚动,而不是整个页面滚动。纵向滚动注意设置固定高度,横向滚动记住white‑space:nowrap与inline‑block的组合,配合滚动事件可以实现轮播、局部滑动容器等常见小程序业务。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 18:54:03

4【cesium 扩展 —— 天地图】

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/28 18:51:33

DeepSeek API调用入门:从API Key到流式输出与多轮对话

简介&#xff1a;面向有Python基础的开发者与研究人员&#xff0c;这份DeepSeek API调用指南围绕从注册到流式输出的完整链路展开&#xff0c;帮助读者快速把DeepSeek的语言理解与生成能力集成到聊天机器人、客服系统、智能助理等文本交互项目中。资源包共1个docx文档&#xff…

作者头像 李华
网站建设 2026/10/28 18:48:50

Emoji如何干扰AI语义理解及消除实操指南

Emoji作为自然语言处理中的非标准符号&#xff0c;其多义性与高语境依赖特征会显著增加AI语义理解的噪声&#xff0c;导致模型在情感极性判断、意图识别及实体抽取环节出现偏差&#xff0c;必须通过符号学拆解与结构化清洗机制进行干预。Emoji语义干扰的底层逻辑Emoji并非简单的…

作者头像 李华
网站建设 2026/10/28 18:42:23

AI未来会毁灭人类吗?不,人类正在用AI毁灭自己!

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/28 18:40:34

倾转旋翼机悬停仿真代码拆解:MATLAB/Simulink配平、线性化与避坑指南

简介&#xff1a;这份资源面向倾转旋翼机飞行动力学与控制方向的初学者及研究人员&#xff0c;聚焦悬停状态下的仿真建模与代码实现&#xff0c;帮助读者理解旋翼气动、动力系统与飞行控制之间的耦合关系。压缩包共7个文件&#xff0c;约59KB&#xff0c;以MATLAB脚本&#xff…

作者头像 李华