小程序UI搭建+波纹按钮特效

本文介绍小程序用户首页的UI以及一点波纹按钮特效的书写心得


效果展示:

chickUI-video


主要的特效实现在于背景图与按钮,下方放css代码

.content {
    height: 100vh;
    overflow: hidden;
    background-image:
        radial-gradient(closest-side,rgba(235,105,78,1),rgba(235,105,78,0)),
        radial-gradient(closest-side,rgba(243,11,64,1),rgba(243,11,64,0)),
        radial-gradient(closest-side,rgba(254,234,131,1),rgba(254,234,131,0)),
        radial-gradient(closest-side,rgba(170,142,245,1),rgba(170,142,245,0)),
        radial-gradient(closest-side,rgba(248,190,147,1),rgba(248,190,147,0));
    background-size:
        600rpx 600rpx,
        800rpx 800rpx,
        700rpx 700rpx,
        700rpx 700rpx,
        900rpx 900rpx;
    background-repeat: no-repeat;
    animation: movement 8s linear infinite;
}

@keyframes movement {
    0% {
        background-position:
        400rpx -50rpx,
        500rpx 300rpx,
        -250rpx 600rpx,
        200rpx 700rpx,
        -300rpx 0rpx;
    }
    25% {
        background-position:
        300rpx 100rpx,
        350rpx 400rpx,
        -50rpx 700rpx,
        100rpx 900rpx,
        -200rpx -100rpx;
    }
    50% {
        background-position:
        200rpx 150rpx,
        500rpx 600rpx,
        0rpx 500rpx,
        200rpx 700rpx,
        0rpx -150rpx;
    }
    75% {
        background-position:
        300rpx 100rpx,
        800rpx 300rpx,
        -100rpx 750rpx,
        300rpx 500rpx,
        -150rpx -50rpx;
    }
    100% {
        background-position:
        400rpx -50rpx,
        500rpx 300rpx,
        -250rpx 600rpx,
        200rpx 700rpx,
        -300rpx 0rpx;
    }
}

 content是标签盒子主体,背景图片设置为五个扩散的圆形,再添加移动动画即可

接下来的就是波纹按钮

波纹按钮是点击添加span元素,span元素绑定了一个放大的动画,等到动画结束时就将span标签移除,即可达到效果。

本项目用的技术时uniapp,没有找到如何动态添加标签,希望有大佬能指出一下。所以变换了一个思路,将直接添加span标签改为添加标签数组,通过v-for渲染数组中的标签,增删标签逻辑改为数组的增删,也能达到同样的效果。代码如下:

····html····

<view class="wave-main">
	<button class="wave-btn" @click="onLogin" ref="logRef">Login In
		<span v-for="(item,idx) in logSpanList" :key="idx" 
            :style="{ top: item.y + 'px', left: item.x + 'px' }">
        </span>
	</button>
	<button class="wave-btn" @click="onSign">Sign Up
		<span v-for="(item,idx) in signSpanList" :key="idx" 
            :style="{top: item.y + 'px', left: item.x + 'px'}">
        </span>
	</button>
</view>

····数据与方法···· 

data() {
	return {
		logSpanList: [],
		signSpanList: []
	}
}
methods: {
			onLogin(e) {
				this.addWave(e,this.logSpanList)
			},
			onSign(e) {
				this.addWave(e,this.signSpanList)
			},
			addWave(e, list) {
				let waveX = e.detail.x - e.currentTarget.offsetLeft
				let waveY = e.detail.y - e.currentTarget.offsetTop
				setTimeout(() => {
					list.shift()
				},800)
				list.push({
					x: waveX,
					y: waveY
				})
			},
		}

总结:变换思路实现效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值