源码学习

4 篇文章 0 订阅

关于uniapp 按钮的优化

  1. 首先 可以增加 loading 状态,增加用户体验
  2. 使用节流
  3. 使用水波纹
```javascript
// 获取节点信息
 		getElQuery() {
 			return new Promise(resolve => {
 				let queryInfo = '';
 				// 获取元素节点信息,请查看uniapp相关文档
 				queryInfo = uni.createSelectorQuery().in(this);
 				queryInfo.select('.container').boundingClientRect();
 				queryInfo.exec(data => {
 					resolve(data);
 				});
 			});
 		},
 		点击事件
 			dd: function(e) {
 			let touchesY = e.detail.y;
 			let touchesX = e.detail.x;
 			this.getElQuery().then(res => {
 				let data = res[0];
 				data.targetWidth = data.height > data.width ? data.height : data.width;
 				// 原理是使用了 transform,但是由于 transform-origin 是center,所以需要去掉
 				// 最大尺寸的一半 data.top 是该元素距离视口的top 值,固定值
 				this.rippleTop = touchesY - data.top  - data.targetWidth / 2;
 				this.rippleLeft = touchesX - data.left - data.targetWidth / 2;
 				// console.log(rippleTop,rippleLeft);
 				console.log(data.targetWidth); //
 				console.log(touchesY);
 				this.rippleWidth = data.width;
 				this.rippleHeight =data.height
 				this.title = !this.title;
 			})
 		},
//css 
.container {
 	width: 400rpx;
 	height: 400rpx;
 	background-color: red;
 	position: relative;
 	overflow: hidden;
 }

 .inner {
 	position: absolute;
 	border-radius: 100%;
 	background-clip: padding-box;
 	background-color: yellow;
 	transform: scale(0);
 	transform-origin:center;
 	opacity: 1;
 	z-index: 1000;
 }

 .active {
 	z-index: 1000;
 	opacity: 0;
 	transform: scale(2);
 	transition: opacity 1s linear, transform 2s linear;
 }
// html
<view class="container" @click="dd">
 		<view :class="[title ? 'active':'','inner']" :style="{
 			top: rippleTop + 'px',
 			left: rippleLeft + 'px',
 			width: rippleWidth + 'px',
 			height: rippleHeight + 'px'
 			}">
 		</view>
 	</view>

总结:水波纹的原理是通过点击元素,通过transform 来用内部元素由scale(0) 变成scale(2);
scale(0) 让元素不可见
4. 禁用事件
pointer-events: none;
5. 禁止复制
user-select: none;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值