uniapp 电商小程序 置顶特效/分享特效/红包特效 简单实现效果

uniapp 电商小程序 首页特效展示效果

首页特效视频

电商小程序首页动效

  1. 回到顶部(置顶)特效
  2. 分享特效
  3. 红包特效

回到顶部特效

uniapp 电商小程序 置顶特效/分享特效/红包特效 简单实现效果_第1张图片
要求:页面一开始是隐藏置顶按钮,页面上拉加载,如果滚动距离超过一屏幕的高度时,显示置顶按钮。

知识点:

  1. 获取手机屏幕高度
  2. 监听手机滚动的距离

获取手机屏幕高度

uniapp getSystemInfo方法使用文档:
getSystemInfo
uniapp 电商小程序 置顶特效/分享特效/红包特效 简单实现效果_第2张图片

uni.getSystemInfo({
     
    success: res => {
     
		this.phoneHeight = res.windowHeight;
	}
});

监听页面上拉滚动

我是在onShow中获取屏幕的高度,然后放在data中的phoneHeight参数中。
onPageScroll函数可以监听屏幕滚动,传递的参数为e,e.scrollTop参数就是页面滚动的距离。
这个距离是从屏幕顶部为0,基于这个基准,如果e.scrollTop数值超过phoneHeight,则代表此时已经翻页了,可以展示置顶按钮了。所以用this.toTopFlag参数来展示“置顶”图标的显示与隐藏。

onPageScroll(e){
     
	if(e.scrollTop > this.phoneHeight){
     
		this.toTopFlag = true;
	}else{
     
		this.toTopFlag = false;
	}			
}

分享特效

要求:如果页面滚动的时候,分享图标隐藏,如果页面没有滚动,分享图标显示。
知识点:

  1. 使用animate动画,隐藏与显示 分享图标时,有动效。
  2. 监听页面滚动,如果延时函数0.5秒后页面没有滚动,则认定为滚动结束,可以显示分享图标。

animate动画中文官网:
animate动画中文官网

uniapp 电商小程序 置顶特效/分享特效/红包特效 简单实现效果_第3张图片
对于uniapp这种基于vue框架的编辑器,使用方法可以如下:
1) 下载animate.css或者animate.min.css,放在static静态目录下
2) 在App.vue文件中引入animate.css或者animate.min.css文件
3) 在需要使用动画特效的组件中,写入 animated xxxx的类名即可

<view class="toShare animated" :class="onscroll?'slideOutRight':'slideInRight'">
	<button type="text" open-type="share" plain style="border:none;background:transparent;" class="shareBtn">
		<image src="http://58d.oss-cn-hangzhou.aliyuncs.com/goods/share_1596073200000.png" alt="share"></image>
	</button>
</view>

知识点:
1) 分享功能只能通过button按钮 open-type="share"的方式来处理
2) 使用animatecss动画实现分享按钮的显示与隐藏
3) 判断页面滚动停止后,延时0.5秒如果页面没有滚动,则认为页面停止滚动

uniapp 电商小程序 置顶特效/分享特效/红包特效 简单实现效果_第4张图片

分享按钮样式

button:type=“text” 可以将按钮背景色改为白色 plain 可以将button改为透明色带边框的样式
行间样式写为:style=“border:none;background:transparent;” 背景颜色改为transparent透明色,border边框改为None.
加入Image,绑定外部链接图,之前有提到过,image如果直接绑定动态参数会失效的问题,这个可以翻看之前的博客内容。

分享图标的显示与隐藏

onscroll 通过这个变量来处理。如果在页面滚动过程中,οnscrοll=false,对应的animate动画样式为sliderOutRight,如果页面停止滚动,οnscrοll=true,对应的animate动画样式为sliderInRight.

监听页面滚动与停止滚动

先全局定义一个let timer = null;

onPageScroll(e){
     
	//这段代码是置顶部分的代码
	if(e.scrollTop > this.phoneHeight){
     
		this.toTopFlag = true;
	}else{
     
		this.toTopFlag = false;
	}		
	//这段代码是置顶部分的代码
	// 清理定时器
	clearTimeout(timer); // 每次滚动前 清除一次
	//onscroll设置为true,则分享按钮隐藏
	this.onscroll=true;
	timer = setTimeout(()=> {
      
		console.log('滚动结束了');
		// 分享按钮显示
		this.onscroll=false;
	}, 500);
}

红包动效

uniapp 电商小程序 置顶特效/分享特效/红包特效 简单实现效果_第5张图片
uniapp 电商小程序 置顶特效/分享特效/红包特效 简单实现效果_第6张图片
uniapp 电商小程序 置顶特效/分享特效/红包特效 简单实现效果_第7张图片

红包样式代码

<template>
	<view>
		<!-- 左侧红包 -->
		<view class="r_bag">
			<image class="bag1 animated tada infinite" v-if="!rbagmodelshow && !openrbagmodelshow" :animation="bag1animation" src="/static/icon/bag1.png" mode="" @click="openrbagbtn()"></image>
		</view>
		<!-- 红包封面 -->
		<view class="rbag_model" v-if="rbagmodelshow" @touchmove.prevent.stop>
			<view class="close animated rubberBand">
				<image class="redBag" src="http://58d.oss-cn-hangzhou.aliyuncs.com/goods/redBagClose_1596018067000.png" mode="widthFix"></image>
				<view class="redBag-word">
					<view class="subTit">活动专享</view>
					<view class="tips">送您一个购物津贴</view>
				</view>
				<button class='getMoney' type='primary' :animation="openbrnanimation" open-type="getUserInfo" hover-class="btnDown" withCredentials="true" lang="zh_CN" @getuserinfo="wxGetUserInfo">
					立即领取
				</button>
				<view class="hide_btn" @click.stop="hidebtn">
					<icon type="cancel" color="#fbd977" size="28" />
				</view>
			</view>
		</view>

		<!-- 打开红包 -->
		<view class="open_rbag_model" v-if="openrbagmodelshow" @touchmove.prevent.stop>
			<view class="close animated rubberBand">
				<image class="redBag" src="http://58d.oss-cn-hangzhou.aliyuncs.com/goods/redBagOpen_1596018109000.png" mode="widthFix"></image>
				<view v-if="!isTake">
					<view class="youhuiTip">
						<view class="youhuiTips" v-if="openredBag">
							<countup :num="num" color="#ffcc1a" width='24' height='40' fontSize='40' :fontWeight="500"></countup></view>
							<view class="youhuiTit">购物津贴</view>
					</view>
					<view class="redBag-word">
						<view class="subTit">恭喜您获得</view>
					</view>
					<button class='getYouhui' type='primary' lang="zh_CN" @click="checkMoney" hover-class="btnDown">
						查看购物津贴
					</button>
				</view>
				<view v-else class="youhuiTip">
					<view class="subTit">您已领取过购物津贴</view>
					<button class='getYouhui old' type='primary' lang="zh_CN" @click="checkMoney" hover-class="btnDown">
						查看购物津贴
					</button>
				</view>
				<view class="hide_btn" @click.stop="hidebtnALL">
					<icon type="cancel" color="#fbd977" size="28" />
				</view>
			</view>
		</view>
	</view>
</template>
//  红包动画
imageanimation: function() {
     
	var that = this;
	var next = true;
	var animation = uni.createAnimation({
     
		duration: 1000,
		timingFunction: 'ease',
	})
	that.bag1animation = animation;
	animation.rotateY(360).step();
	setInterval(function() {
     
		if (next) {
     
			animation.rotate(360).step();
			next = !next;
		} else {
     
			animation.rotate(-360).step();
			next = !next;
		}
		that.bag1animation = animation.export()
	}, 1100)
}

你可能感兴趣的:(uniapp电商app开发,vue)