【小程序】小程序如何实现滑动翻页(类似刷短视频的交互效果)
在微信小程序中实现上下滑动翻页的效果其实非常简单,可以说一学就会。
这篇文章将非常详细地教大家如何实现这一交互:
数据准备
首先我们在 Page 的 data
属性中添加两个变量:
data: { biases: [ { "title": "Fundenmental Attribution Error", "desc": "We judge others on their personality or fundamental character, but we judge ourselves on the situation.", "ext": "Sally is late to class; she's lazy. You're late to class; it was a bad morning.", "illustration": "biases/fundamental-attribution-error.jpg", }, { "title": "Self-Serving Bias", "desc": "Our failures are situational, but our successes are our responsibility.", "ext": "You won that award due to hard work rather than help or luck. Meanwhile, you failed a test because you hadn't gotten enough sleep.", "illustration": "biases/self-serving-bias.jpg", }, // ... ], index: -1,}
其中 biases
是个数组,我们要实现的效果就是每次展示 biases
的一个元素,上划切换到上一个元素,下划切换到下一个元素。
index
变量则用来表示当前元素的数组下标。
布局文件
数据准备完成之后,我们先来定义 wxml 文件:
<view class="page"> <swiper wx:if="{{index >= 0}}" class="swiper" vertical="true" duration="300" bindchange="swiperChange" current="{{index}}"> <swiper-item class="swiper-item" wx:for="{{list}}" wx:key="index" wx:for-item="bias"> <view class="article"> <view class="article__title"> <text>{{bias.title}}text> view> <text class="article__subtitle" wx:if="{{!!bias.alias}}">({{bias.alias}})text> <view class=" article__body"> <text>{{bias.desc}}text> view> <view class="article__illustration"> <image class="lazy" data-src="../../images/{{bias.illustration}}" mode="aspectFit" /> view> <view class="article__caption"> <text>{{bias.ext}}text> view> view> swiper-item> swiper>view>
结构非常简单:
- - -
CSS 样式代码
我们来逐一分析下每个 css 类的用法。
首先是根元素的 CSS 类 .page
:
.page { height: 100%;}
然后是
的类 swiper
:
.swiper { height: 100vh; width: 100vw; position: fixed; top: 0; left: 0; overflow: hidden; transform: translate3d(0, 0, 0);}
以上 CSS 代码让
元素填充整个视口并保持固定位置,让我们逐行解释每个部分的含义:
规则 | 含义 |
---|---|
height: 100vh; | 这将元素的高度设置为 100 视口高度单位。vh 单位表示相对于视口高度的百分比,因此此规则确保元素将占满整个视口的高度。 |
width: 100vw; | 这将元素的宽度设置为 100 视口宽度单位。vw 单位表示相对于视口宽度的百分比,因此此规则确保元素将占满整个视口的宽度。 |
position: fixed; | 这将元素的定位方式设置为 “fixed”。固定定位将元素从正常文档流中移除,并相对于视口进行定位。即使用户滚动页面,元素仍将保持在相同的位置。 |
top: 0; | 这将元素的顶部位置设置为 0,即与视口顶部对齐。 |
left: 0; | 这将元素的左侧位置设置为 0,即与视口左侧对齐。 |
overflow: hidden; | 这将隐藏超出元素边界的任何内容。如果内容超出元素的尺寸,这将防止出现滚动条。 |
transform: translate3d(0, 0, 0); | 这将对元素应用一个 3D 平移变换。在这种情况下,它将元素在 X 和 Y 轴上平移 0 像素。这可以用于在某些设备上触发硬件加速。 |
对 CSS 不熟悉的读者,可以参考我写的 CSS 全系列教程。
再来看 .swiper-item
:
.swiper-item { height: 100vh; background-color: white; display: flex; align-items: flex-start; justify-content: center;}
也就是说,swiper-item
的高度将填满 swiper
,背景色是 white
,其子元素的布局为 flex
。
JS 交互代码
CSS 分析完了,我们再看来每个元素的 JS 代码:
首先是 swiper
:
<swiper wx:if="{{index >= 0}}" class="swiper" vertical="true" duration="300" bindchange="swiperChange" current="{{index}}">
CSS 规则 | 含义 |
---|---|
vertical="true" | 竖向滑动 |
duration="300" | 滑动动画耗时 300ms |
bindchange="swiperChange" | 滑动事件响应 |
current="{{index}}" | 当前元素下标 |
其中 swiperChange
用于监听滑动事件:
swiperChange(e) { const index = e.detail.current this.setData({ index, }) wx.setNavigationBarTitle({ title: `No.${index + 1}`, })},
以上代码可以看出,通过 e.detail.current
可以获取当前元素下标。
最后来看子元素 swiper-item
:
<swiper-item class="swiper-item" wx:for="{{list}}" wx:key="index" wx:for-item="bias">
代码含义:为每个 list
的元素创建一个 swiper-item
。
以上就是在微信小程序中实现上下滑动翻页的效果的全部代码,希望对你有所帮助。
- 扫码体验
- 代码仓库:self-discipline-toolbox-weapp
来源地址:https://blog.csdn.net/FeeLang/article/details/131414880
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341