电商小程序 留住用户秘诀

news2024/11/28 18:48:34

你是否也收到这样的用户反馈?

  • 商品列表滚动区域太小,很难找到想要的商品。
  • 头部的搜索广告占据了半个屏幕,挤占了实际空间。
  • 在我手机这样小的屏幕上,展示区域太小了,能否把它放大点?

f2c10202307261038281290.png

在电商页面中,我们需要向用户展示众多的商品、广告等信息。

然而,如何在有限的屏幕空间中更好地展示它们,是一个需要我们深入思考的问题。

由于小程序 webview 渲染框架在技术存在一定的局限性,我们需要在不同的设计之间进行抉择。

  • 当广告具有较高的优先级时,我们会考虑突出广告的展示,同时减小商品列表在界面中所占比例。
  • 当商品列表具有较高的优先级时,我们会考虑优先展示商品,而放弃广告的展示。

c86ce202307261039191329.gif

但是当广告和商品列表同样重要的情况下,要怎么办呢?

常见的一种设计方式是设计一个隐藏按钮,当用户不想看广告的时候把广告隐藏掉,隐藏之后商品列表就有更多展示空间

19c7b202307261039336767.png

但是这种情况也只是针对愿意手动点击隐藏按钮的情况下,还是有一定的局限性。

那么,有没有办法做到在无形中隐藏广告呢?

5d518202307261039421593.png

说到这里,当然是可以的啦✌️

1、吸顶布局 + worklet 轻松实现

在常见的电商小程序首页,通常是顶部展示类目、接着展示商品详情,商品详情顶部也有热门等等的分类。

当页面滚动的时候,我们希望商品详情热门分类可以吸在顶部,便于切换。

c0afa202307261040038949.gif

这里我们用到了 scroll-view 的 sticky-header、sticky-section 吸顶布局容器即可轻松实现。

<scroll-view
 type="custom"
 scroll-y
 show-scrollbar="false"
 worklet:onstartstart="handleScrollStart"
 worklet:onscrollupdate="handleScrollUpdate"
 worklet:onscrollend="handleScrollEnd"
>
	<sticky-section push-pinned-header="false">
		<sticky-header>
			<!-- 搜索框 -->
			...
		</sticky-header>
		<!-- 类目展示 -->
	</sticky-section>


	<sticky-section push-pinned-header="false" padding="[
  0,
  16,
  0,
  16
]">
		<sticky-header>
			<!-- 商品详情热门分类 -->
			...
		</sticky-header>
		<grid-view cross-axis-count="2" type="masonry">
			<!-- 两列的瀑布流 -->
			...
		</grid-view>
	</sticky-section>
</scroll-view>

当 scroll-view 滚动的时候,根据滚动位置把搜索框放到标题的位置,可以再节省一点空间

attached() {
	// nav-bar 隐藏或展示
	this.applyAnimatedStyle('.nav-bar', () => {
	'worklet'
	return {
		opacity: this.navBarOpactiy.value
	}
	})


	// 改变搜索框宽度
	this.applyAnimatedStyle('.search', () => {
	'worklet'
	return {
		width: `${this.searchBarWidth.value}%`,
	}
	})
},


// scroll-view 监听函数
handleScrollUpdate(evt) {
	'worklet'
	const maxDistance = 60
	const scrollTop = clamp(evt.detail.scrollTop, 0, maxDistance)
	const progress = scrollTop / maxDistance
	const EasingFn = Easing.cubicBezier(0.4, 0.0, 0.2, 1.0)
	this.searchBarWidth.value = lerp(100, 70, EasingFn(progress))
	this.navBarOpactiy.value = lerp(1, 0, progress)
},

2、手势 + worklet 操作更灵活

小程序新渲染框架支持了手势系统,手势在这里可以发挥大作用~

我们可以使用手势协商让小程序页面中的广告、商品等无缝切换和更好的展示

3a404202307261040376640.gif

// .wxml
<pan-gesture-handler
	tag="pan"
	simultaneousHandlers="[
  "scroll-view"
]"
	shouldResponseOnMove="shouldPanResponse"
	onGestureEvent="handlePan"
>
	<view class="page">
		<vertical-drag-gesture-handler
			tag="scroll-view"
			native-view="scroll-view"
			simultaneousHandlers="[
  "pan"
]"
			shouldResponseOnMove="shouldScrollViewResponse"
        >
          	<scroll-view
				class="product-list"
				type="custom"
				scroll-y
				show-scrollbar="false"
				adjustDecelerationVelocity="adjustDeceleration"
				bindscroll="handleScroll"
			>
			...
			</scroll-view>
        </vertical-drag-gesture-handler>
	</view>
</pan-gesture-handler>


// .js
handlePan(e) {
      'worklet'
      ...


      if (e.state === GestureState.ACTIVE) {
        if (this._interactionState.value === InteractionState.UNFOLD) {
          // 展开状态下,往上滑才折叠起来
          if (e.absoluteY - this._startY.value < 0) {
            this._interactionState.value = InteractionState.ANIMATING
            this._translY.value = timing(0.0, { duration: 250 }, () => {
              'worklet'
              this._interactionState.value = InteractionState.RESET
            })
          }
        } else {
          // 其它情况,跟随手指滑动
          this._translY.value = e.absoluteY - this._startY.value
        }
      }


      // 其他状态下的处理
	  ...
},

加入手势之后,除了可以隐藏广告,我们还可以将一些头部信息隐藏

在用户查看商品列表时,隐藏大部分无用信息,将商品列表展示区域最大化

// 最外层 .page 往上挪
this.applyAnimatedStyle('.page', () => {
	'worklet'
	const translY = clamp(this._translY.value, -this._tabsTop.value, 0)
	return {
		transform: `translateY(${translY}px)`
	}
})


// 改变 .navigation-bar 背景色
this.applyAnimatedStyle('.navigation-bar', () => {
	'worklet'
	const translY = clamp(this._translY.value, -this._tabsTop.value, 0)
	const opacity = translY / -this._tabsTop.value
	return {
		backgroundColor: `rgba(255, 255, 255, ${opacity})`
	}
})
	
// 输入框:改变宽度并且展示
this.applyAnimatedStyle('.search-input', () => {
	'worklet'
	const translY = clamp(this._translY.value, -this._tabsTop.value, 0)
	const percentage = translY / -this._tabsTop.value
	return {
		width: `${percentage * 60 + 40}%`,
		opacity: percentage,
	}
})

除此之外,我们这里可以利用手势来展示商家的一些信息

当在商品列表往下拉到顶部时,触发整个列表下拉展示出商家信息

再往上滑动则商品列表重新展示~

e8ecd202307261041163694.gif

// 商品详情往下拉
this.applyAnimatedStyle('.main', () => {
	'worklet'
	const translY = clamp(this._translY.value, 0, Number.MAX_VALUE)
	console.log(222, translY)
	return {
		transform: `translateY(${translY}px)`
	}
})


// 简单的 header 渐隐
// 商品详情展示时,仅显示简单的 header:学堂名称和几个标签
this.applyAnimatedStyle('.header-shop-info-simple', () => {
	'worklet'
	const min = 50
	const max = 100
	const translY = clamp(this._translY.value, min, max) - min
	return {
		opacity: 1 - (translY / (max - min))
	}
})


// 复杂的 header 渐显
// 商品详情下拉,显示复杂 header:展示热门活动、公告等等信息
this.applyAnimatedStyle('.header-shop-info-detail', () => {
	'worklet'
	const min = 100
	const max = 150
	const translY = clamp(this._translY.value, min, max) - min
	return {
		opacity: translY / (max - min)
	}
})

加入手势动画之后,我们的页面展示对比之前有了以下的优势:

  • 更加自然:更符合用户操作习惯,用户自然滚动屏幕时不会感到突兀
  • 更节省空间:滚动隐藏更为灵活、省空间,使页面更清爽
  • 更高效的展示:可以将要展示的内容更好的展示,无需做取舍

借助手势动画,我们可以优化小程序界面展示、提升用户体验,从而获得更高的商业价值。

如果你也想更好的留住用户,mark 下这个 源码 [ 瀑布流页面 / 分类页面 ] 直接接到到你的小程序吧~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/793258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web3将自己写在合约中的代币添加到MetaMask中管理

上文 Web3带着大家根据ERC-20文档编写自己的第一个代币solidity智能合约 带着大家在智能合约中创建了一个自己的代币系统 我们可以在MetaMask中去导入 ganache环境下模拟出来的第一和第二个账号 我们这里 可以看到他们的 ETH 但看不到自己的代币符号 没关系 我们点击这下面的…

linux 内核总结

注意&#xff1a;队列只是一格以前的称呼&#xff0c;底层是链表 进程 多个cpu&#xff0c;每个cpu都有自己的进程队列 进程分类&#xff1a; 实时进程 与用户交互的进程&#xff0c;需要及时的响应&#xff08;优先级 0~100&#xff09; 普通进程 响应不需要那么及时的…

Ubuntu的安装与部分配置

该教程使用的虚拟机是virtuabox&#xff0c;镜像源的版本是ubuntu20.04.5桌面版 可通过下面的链接在Ubuntu官网下载&#xff1a;Alternative downloads | Ubuntu 也可直接通过下面的链接进入百度网盘下载【有Ubuntu20.04.5与hadoop3.3.2以及jdk1.8.0_162&#xff0c;该篇需要使…

openlayers点线面绘制工具栏

效果大概如上&#xff0c;点击了按钮之后在地图上绘制相对应的点/线/面。 代码部分&#xff1a; 首先放个容器 <div id"toolbar"></div> js部分&#xff08;因为地图已经创建好了&#xff0c;我这里就不放地图的代码了&#xff0c;如果需要可以看我上…

《Docker调试技巧与工具:解决常见容器问题,助力容器应用稳定运行》

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

Leetcode 滑动窗口题目总结

(Leetcode 滑动窗口题目总结) 1&#xff1a; 3.无重复字符的最长子串 https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/子串 和 子序列的区别&#xff1a;字串是连续的&#xff0c;子序列是非连续的。快慢指针 i 和 j&#xff0c;…

登录页的具体实现 (小兔鲜儿)【Vue3】

登录页 整体认识和路由配置 整体认识 登录页面的主要功能就是表单校验和登录登出业务 准备模板 <script setup></script><template><div><header class"login-header"><div class"container m-top-20"><h1 cl…

【外卖系统】员工信息分页查询

需求分析 当数据较多时&#xff0c;如果将数据在一个页面中全部展示出来会显得比较乱&#xff0c;不便于查看&#xff0c;所以一般系统都会以分页的方式来展示列表数据。 代码开发 页面发送ajax请求&#xff0c;将分页查询参数&#xff08;page、pageSize、name&#xff09;…

精密空调监控太难?手动太慢?这才是最牛的工具!

在医疗设施中&#xff0c;精密空调监控是一项至关重要的系统。它扮演着保障患者健康和医疗操作顺利进行的关键角色。 精密空调系统能够确保手术室、实验室和重症监护室等关键区域内的恒温、湿度和空气质量处于合适状态&#xff0c;从而保证医疗设备的正常运行和医护人员的舒适工…

【考研前阳了】成电858上岸学长经验分享

这个系列会邀请往届学长学姐进行经验分享~欢迎后台回复经验分享&#xff0c;进行投稿&#xff01; 经验贴征集&#xff1a;前人栽树&#xff0c;后人乘凉&#xff0c;上岸同学也是看着经验贴一点一点过来的&#xff0c;有偿征集各位同学的经验分享&#xff0c;以此来帮助更多的…

power dns recursor 4.5以后版本的奇葩问题

问题 最近升级了 pdns-recursor 从 4.1.X 升级至 4.8.x 出现下面问题 效果为 nslookup 可以返回 ip 地址 dig 无法返回对应 ip 地址 ad dns 服务器转发过来的解析都不响应 tcp 抓包如下 当使用 nslookup 请求时 addition rrs 请求为 0 当使用 dig 请求时 addition rrs 请求为 1…

[Ubuntu 22.04] 安装Harbor

1. docker安装 [Ubuntu 22.04] 安装docker&#xff0c;并设置镜像加速 2. Harbor脚本功能 Harbor安装包文件作用解释&#xff1a; prepare 环境准备 common.sh 环境检测脚本&#xff0c;在安装过程中会运行该脚本来检测docker、docker-compose、golang等是否符合要求 harbor…

51单片机--AD/DA

AD/DA介绍 AD和DA是模拟信号和数字信号之间的转换过程。 AD&#xff0c;全称为模拟到数字&#xff08;Analog-to-Digital&#xff09;&#xff0c;指的是将模拟信号转换为数字信号的过程。在AD转换中&#xff0c;模拟信号经过采样、量化和编码等步骤&#xff0c;被转换为离散的…

liteflow 2.10 配置中心简单记录

除nacos是一个key 同时管理chain和script node外,可以理解为配置文件整体放到一个key下nacos下的文件必须是xml格式,系统只实现了xml parser其它etcd,zk,Apollo 是两个namespace/path(chain及script node各一)下多个key,每个key对应一个chain/node所有配置中心的核心代码…

跟我一起从零开始学python(十)Hadoop从零开始入门

前言 回顾之前讲了python语法编程 &#xff0c;必修入门基础和网络编程&#xff0c;多线程/多进程/协程等方面的内容&#xff0c;后续讲到了数据库编程篇MySQL&#xff0c;Redis&#xff0c;MongoDB篇&#xff0c;和机器学习&#xff0c;全栈开发&#xff0c;数据分析前面没看…

【Windows】不要让你的win键落灰!掌握常用的组合快捷键,使用电脑更高效了

Windows 操作系统提供了丰富的键盘快捷键&#xff0c;能够大幅提高工作效率和操作便利性。在此介绍一些与 Win 键相关的常用快捷键&#xff0c;帮助你更好地利用 Windows 系统。想要在使用电脑时更高效吗&#xff1f;掌握常用的组合快捷键&#xff0c;让你的 Win 键从此不再落灰…

phkit - 中英音素处理、文本转拼音、文本正则化

文章目录 关于 phkit安装包含组件pinyinkitchinesesymbolsequencepinyinphonemenumberconvertstyleenglish关于 phkit phoneme toolkit: 拼音相关的文本处理工具箱,中文和英文的语音合成前端文本解决方案。 github : https://github.com/KuangDD/phkit

【Lua学习笔记】Lua进阶——Table(2)

文章目录 Table的一万种用法二维数组类和结构体Table操作insert & removesortconcat 接上文【Lua学习笔记】Lua进阶——Table&#xff0c;迭代器 Table的一万种用法 二维数组 a {{ 1, 2, 3 },{ 4, 5, 6 }, } print(#a) -->2 for i1,#a dob a[i]for j1,#b doprint(b[…

opencv-25 图像几何变换04- 透视 cv2.warpPerspective()

什么是透视&#xff1f; 透视是一种几何学概念&#xff0c;用于描述在三维空间中观察物体时&#xff0c;由于视角的不同而产生的变形效果。在现实世界中&#xff0c;当我们从不同的角度或位置观察物体时&#xff0c;它们会呈现出不同的形状和大小。这种现象被称为透视效果。 透…

web-文件上传和upload-labs靶场通关

目录 前端过滤 uploads-lab-1: 后端验证 upload-labs-2&#xff1a;mime验证 upload-labs-3&#xff1a;黑名单绕过 upload-labs-4&#xff1a;黑名单绕过-.htaccess(这里得用旧版的phpstudy&#xff0c;新版的不行) upload-labs-5&#xff1a;后缀名绕过 upload-labs-…